Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Konfigurasi MySQL 8

Mengonfigurasi MySQL 8

MySQL memiliki dua jenis parameter:

Statis, yang berlaku setelah memulai ulang server MySQL Dinamis, yang dapat diubah secara online tanpa memulai ulang server MySQL berfungsi di versi 5.7 dan yang lebih baru.

Variabel dapat diatur melalui berikut ini:

  • File konfigurasi
  • Skrip pembuka
  • Menggunakan perintah SET
  • Parameter Konfigurasi Tetap

Menggunakan file konfigurasi:

File konfigurasi dapat ditemukan di  /etc/my.cnf (RHL dan CENTOS) dan /etc/mysql/my.cnf(Debian), Anda dapat mengedit file ini di editor pilihan Anda.

File konfigurasi memiliki bagian di bawah ini, parameter terkait harus disimpan di bawahnya.

  • [mysql]:Bagian dibaca oleh klien baris perintah mysql
  • [klien]:Bagian dibaca oleh semua klien yang terhubung (termasuk klien mysql)
  • [mysqld]:Bagian dibaca oleh server mysql
  • [mysqldump]:Bagian ini dibaca oleh utilitas cadangan yang disebut mysqldump
  • [mysqld_safe]:Dibaca oleh mysqld_safeprocess (Skrip Startup Server MySQL)
[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           1 |

ubah parameter server-id menjadi 2 dan restart server mysql

#vim /etc/my.cnf
server-id=2 (edit this parameter in config file)

#sudo systemctl restart mysqld

[[email protected] ~]# mysql -e "select @@server_id;"
+-------------+
| @@server_id |
+-------------+
|           2|

Menggunakan parameter dengan skrip startup:

Misalkan Anda ingin memulai MySQL menggunakan skrip startup dan bukan melalui systemd,

terutama untuk pengujian atau untuk beberapa perubahan sementara. Anda dapat meneruskan variabel ke skrip

daripada mengubahnya di file konfigurasi

# /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/centos7.err --pidfile=/usr/local/mysql/data/centos7.pid --init-file=/tmp/mysql-init &

Anda dapat melihat bahwa parameter –init-file diteruskan ke server. Server mengeksekusi pernyataan SQL dalam file itu sebelum memulai

Menggunakan variabel global dan sesi:

Ada dua jenis variabel berdasarkan ruang lingkup variabel:

Global:Berlaku untuk semua koneksi baru

Sesi:Hanya berlaku untuk koneksi saat ini (sesi)

Saya akan menggunakan sort_buffer_size untuk contoh ini karena ini memiliki cakupan global dan tingkat sesi, jadi ini akan menjelaskan cakupannya dengan sangat baik.

mysql> SET GLOBAL sort_buffer_size = 512 * 1024;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT @@sort_buffer_size;
+--------------------+
| @@sort_buffer_size |
+--------------------+
|             262144 |
+--------------------+
1 row in set (0.00 sec)

Itu tidak berubah karena ukuran sort_buffer memiliki cakupan global dan tingkat sesi dan global hanyalah default untuk sesi baru. Kami menggunakan koneksi klien yang sama sepanjang jalan sehingga dengan global yang sama kami mengubah default untuk sesi baru tetapi sesi kami tidak baru, sesi kami dimulai sebelum perubahan default. Jadi kita bisa menggunakan Select @@global.sort_buffer_size untuk menanyakan nilai global

mysql> SELECT @@global.sort_buffer_size;
+---------------------------+
| @@global.sort_buffer_size |
+---------------------------+
|                    524288 |
+---------------------------+
1 row in set (0.00 sec)

mysql> SELECT @@global.sort_buffer_size, @@session.sort_buffer_size;
+---------------------------+----------------------------+
| @@global.sort_buffer_size | @@session.sort_buffer_size |
+---------------------------+----------------------------+
|                    524288 |                     262144 |
+---------------------------+----------------------------+
1 row in set (0.00 sec)

Parameter Konfigurasi Tetap:

periksa sort_buffer_size dari  skema performa, variabel sesi, dan tabel variabel global.

mysql> SELECT * FROM performance_schema.session_variables WHERE variable_name LIKE 'sort_buffer_size';
+------------------+----------------+
| VARIABLE_NAME    | VARIABLE_VALUE |
+------------------+----------------+
| sort_buffer_size | 262144         |
+------------------+----------------+
1 row in set (0.01 sec)

mysql> SELECT * FROM performance_schema.global_variables WHERE variable_name LIKE 'sort_buffer_size';
+------------------+----------------+
| VARIABLE_NAME    | VARIABLE_VALUE |
+------------------+----------------+
| sort_buffer_size | 262144         |
+------------------+----------------+
1 row in set (0.01 sec)

Keduanya sama karena kita belum mengubahnya. Mari periksa apakah nilai ini berasal.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| sort_buffer_size | GLOBAL          | /etc/my.cnf   | 32768     | 18446744073709551615 | NULL     | NULL     | NULL     |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.01 sec)

Jadi kita dapat melihat bahwa variabel tersebut berasal dari /etc/my.cnf dan nilai VARIABLE_SOURCE adalah GLOBAL karena ini belum berubah sesi memilih nilai global saat koneksi.

Mari kita ubah Sor_buffer_size Global dan lihat apa hasilnya.

mysql> SET GLOBAL sort_buffer_size = 512 * 1024;
Query OK, 0 rows affected (0.00 sec)

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME                   | SET_USER | SET_HOST  |
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
| sort_buffer_size | DYNAMIC         |               | 32768     | 18446744073709551615 | 2020-08-09 11:04:01.681846 | root     | localhost |
+------------------+-----------------+---------------+-----------+----------------------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Sekarang seperti yang kita lihat bahwa sumber itu dinamis, SET_TIME telah diubah dan pengguna rootlah yang membuat perubahan.

Mari kita periksa variabel yang tidak ada di my.cnf seperti wait timeout.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME | SET_USER | SET_HOST |
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
| wait_timeout  | COMPILED        |               | 1         | 31536000  | NULL     | NULL     | NULL     |
+---------------+-----------------+---------------+-----------+-----------+----------+----------+----------+
1 row in set (0.00 sec)

Anda dapat melihat bahwa sumber variabel, dalam hal ini, COMPILED yang berarti kita menggunakan nilai default server. Mari kita ubah ke yang lain.

mysql> SET GLOBAL wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Nah kalau kita cek lagi sourcenya akan dinamis, ini dia.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE | SET_TIME                   | SET_USER | SET_HOST  |
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
| wait_timeout  | DYNAMIC         |               | 1         | 31536000  | 2020-08-09 11:08:57.537268 | root     | localhost |
+---------------+-----------------+---------------+-----------+-----------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Mari kita buat ini persisten dengan perintah PERSIST. CATATAN kami belum menambahkan perubahan ini di file my.cnf

mysql> SET PERSIST wait_timeout=100;
Query OK, 0 rows affected (0.00 sec)

Keluar dari klien MySQL dan periksa apakah pengaturannya memang ada di mysqld-auto.cnf.

[[email protected] ~]# sudo cat /var/lib/mysql/mysqld-auto.cnf
{ "Version" : 1 , "mysql_server" : { "mandatory_roles" : { "Value" : "dbt3_read23" , "Metadata" : { "Timestamp" : 1592984803211900 , "User" : "root" , "Host" : "localhost" } } , "wait_timeout" : { "Value" : "100" , "Metadata" : { "Timestamp" : 1596960656007284 , "User" : "root" , "Host" : "localhost" } } } }

Mulai ulang server mysql dan periksa jalur dari nilai variabel wait_timeout yang akan datang, itu akan berasal dari /var/lib/mysql/mysqld-auto.cnf seperti yang ditunjukkan di bawah ini.

mysql> SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'wait_timeout';
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
| VARIABLE_NAME | VARIABLE_SOURCE | VARIABLE_PATH                  | MIN_VALUE | MAX_VALUE | SET_TIME                   | SET_USER | SET_HOST  |
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
| wait_timeout  | PERSISTED       | /var/lib/mysql/mysqld-auto.cnf | 1         | 31536000  | 2020-08-09 11:10:56.007284 | root     | localhost |
+---------------+-----------------+--------------------------------+-----------+-----------+----------------------------+----------+-----------+
1 row in set (0.01 sec)

Jika Anda memeriksa nilai untuk 'sort_buffer_size', nilainya masih sama karena kami tidak mengubah nilainya, masih berasal dari jalur yang sama dan sumbernya GLOBAL.

mysql>  SELECT * FROM performance_schema.variables_info WHERE variable_name LIKE 'sort_buffer_size';
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| VARIABLE_NAME    | VARIABLE_SOURCE | VARIABLE_PATH | MIN_VALUE | MAX_VALUE            | SET_TIME | SET_USER | SET_HOST |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
| sort_buffer_size | GLOBAL          | /etc/my.cnf   | 32768     | 18446744073709551615 | NULL     | NULL     | NULL     |
+------------------+-----------------+---------------+-----------+----------------------+----------+----------+----------+
1 row in set (0.00 sec)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara Membuat Prosedur Tersimpan di MySQL

  2. MySQL Menghapus Beberapa kunci Asing

  3. Bagaimana saya bisa menekan output tajuk kolom untuk satu pernyataan SQL?

  4. MySQL JATUHKAN KENDALA UNIK

  5. Fungsi MySQL COS() – Mengembalikan Kosinus Angka di MySQL