Định cấu hình MySQL 8
MySQL có hai loại tham số:
Tĩnh, có hiệu lực sau khi khởi động lại máy chủ MySQL Động, có thể thay đổi trực tuyến mà không cần khởi động lại Máy chủ MySQL hoạt động trong phiên bản 5.7 trở lên.
Các biến có thể được đặt thông qua các bước sau:
- Định cấu hình tệp
- Tập lệnh khởi động
- Sử dụng lệnh SET
- Tham số cấu hình bền bỉ
Sử dụng tệp cấu hình:
Tệp cấu hình có thể được tìm thấy trong /etc/my.cnf (RHL và CENTOS) và /etc/mysql/my.cnf(Debian), bạn có thể chỉnh sửa tệp này trong sự lựa chọn của trình chỉnh sửa.
Tệp cấu hình có các phần bên dưới, thông số liên quan nên được giữ bên dưới chúng.
- [mysql]:Phần được đọc bởi ứng dụng dòng lệnh mysql
- [client]:Phần được đọc bởi tất cả các client đang kết nối (bao gồm cả cli mysql)
- [mysqld]:Phần được đọc bởi mysqlserver
- [mysqldump]:Phần được đọc bởi tiện ích sao lưu có tên là mysqldump
- [mysqld_safe]:Đọc bởi mysqld_safeprocess (MySQL Server Startup Script)
[[email protected] ~]# mysql -e "select @@server_id;" +-------------+ | @@server_id | +-------------+ | 1 |
thay đổi thông số server-id thành 2 và khởi động lại máy chủ 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|
Sử dụng các tham số với tập lệnh khởi động:
Giả sử bạn muốn khởi động MySQL bằng tập lệnh khởi động chứ không phải thông qua systemd,
đặc biệt là để thử nghiệm hoặc cho một số thay đổi tạm thời. Bạn có thể chuyển các biến vào tập lệnh
thay vì thay đổi nó trong tệp cấu hình
# /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 &
Bạn có thể thấy rằng tham số –init-file được chuyển đến máy chủ. Máy chủ thực thi các câu lệnh SQL trong tệp đó trước khi bắt đầu
Sử dụng các biến phiên và toàn cục:
Có hai loại biến dựa trên phạm vi của biến:
Toàn cầu:Áp dụng cho tất cả các kết nối mới
Phiên:Chỉ áp dụng cho kết nối hiện tại (phiên)
Tôi sẽ sử dụng sort_buffer_size cho ví dụ này vì điều này có phạm vi toàn cầu và cấp phiên, vì vậy điều này sẽ giải thích phạm vi rất tốt.
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)
Nó không thay đổi vì kích thước bộ đệm sắp xếp có cả phạm vi toàn cầu và cấp phiên và toàn cầu chỉ là mặc định cho các phiên mới. Chúng tôi đã sử dụng cùng một kết nối máy khách nên với cùng một toàn cục, chúng tôi đã thay đổi mặc định cho các phiên mới nhưng phiên của chúng tôi không mới, phiên của chúng tôi bắt đầu trước khi thay đổi mặc định. Vì vậy, chúng tôi có thể sử dụng Select @@ global.sort_buffer_size để truy vấn giá trị toàn cục
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)
Tham số cấu hình cố định:
kiểm tra sort_buffer_size từ lược đồ hiệu suất, các biến phiên và bảng biến toàn cục.
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)
Cả hai đều giống nhau vì chúng tôi chưa thay đổi nó. Hãy kiểm tra xem giá trị này đến từ đâu.
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)
Vì vậy, chúng ta có thể thấy rằng biến đến từ /etc/my.cnf và giá trị VARIABLE_SOURCE là GLOBAL vì điều này chưa được thay đổi nhưng phiên đã chọn giá trị toàn cục khi kết nối.
Hãy thay đổi kích thước Global sor_buffer_size và xem kết quả sẽ như thế nào.
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)
Bây giờ chúng ta có thể thấy rằng nguồn là động, SET_TIME đã được thay đổi và chính người dùng gốc đã thực hiện các thay đổi.
Hãy kiểm tra một biến không có trong my.cnf như thời gian chờ.
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)
Bạn có thể thấy rằng nguồn biến, trong trường hợp này, nó được LINH KIỆN có nghĩa là chúng tôi đang sử dụng giá trị mặc định của máy chủ. Hãy thay đổi nó thành một cái gì đó khác.
mysql> SET GLOBAL wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Bây giờ nếu chúng ta kiểm tra lại thì nguồn sẽ động, chúng ta bắt đầu.
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)
Hãy làm cho điều này lâu dài với lệnh PERSIST. LƯU Ý chúng tôi chưa thêm những thay đổi này vào tệp my.cnf
mysql> SET PERSIST wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
Thoát khỏi máy khách MySQL và kiểm tra xem cài đặt có thực sự nằm trong mysqld-auto.cnf không.
[[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" } } } }
Khởi động lại máy chủ mysql và kiểm tra đường dẫn từ giá trị biến wait_timeout đến, nó sẽ đến từ /var/lib/mysql/mysqld-auto.cnf như hình dưới đây.
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)
Nếu bạn kiểm tra giá trị cho ‘sort_buffer_size’ thì giá trị đó vẫn giống như chúng tôi không thay đổi giá trị của nó, vẫn đến từ cùng một đường dẫn và nguồn là TOÀN CẦU.
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)