MySQL8の構成
MySQLには2種類のパラメータがあります:
静的。MySQLサーバーを再起動した後に有効になります。動的。MySQLサーバーを再起動せずにオンラインで変更できます。バージョン5.7以降で機能します。
変数は次の方法で設定できます:
- 構成ファイル
- 起動スクリプト
- SETコマンドの使用
- 構成パラメーターの永続化
構成ファイルの使用:
設定ファイルは/etc/my.cnf(RHLおよびCENTOS)および/etc/mysql/my.cnf(Debian)にあり、選択したエディタでこのファイルを編集できます。
構成ファイルには以下のセクションがあり、関連するパラメーターはそれらの下に保持する必要があります。
- [mysql]:セクションはmysqlコマンドラインクライアントによって読み取られます
- [client]:セクションは接続しているすべてのクライアント(mysql cliを含む)によって読み取られます
- [mysqld]:セクションはmysqlserverによって読み取られます
- [mysqldump]:このセクションはmysqldumpと呼ばれるバックアップユーティリティによって読み取られます
- [mysqld_safe]:mysqld_safeprocess(MySQL Serverスタートアップスクリプト)によって読み取られます
[[email protected] ~]# mysql -e "select @@server_id;" +-------------+ | @@server_id | +-------------+ | 1 |
server-idパラメータを2に変更し、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|
起動スクリプトでのパラメータの使用:
systemdではなく起動スクリプトを使用してMySQLを起動したいとします。
特にテストや一時的な変更のために。変数をスクリプトに渡すことができます
設定ファイルで変更するのではなく
# /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 &
–init-fileパラメーターがサーバーに渡されていることがわかります。サーバーは、開始する前にそのファイルのSQLステートメントを実行します
グローバル変数とセッション変数の使用:
変数のスコープに基づいて、2つのタイプの変数があります。
グローバル:すべての新しい接続に適用されます
セッション:現在の接続(セッション)にのみ適用されます
この例ではsort_buffer_sizeを使用します。これは、グローバルスコープとセッションレベルのスコープを持っているためです。これにより、スコープが非常によく説明されます。
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)
sort_bufferサイズにはグローバルスコープとセッションレベルスコープの両方があり、グローバルは新しいセッションのデフォルトであるため、変更されませんでした。ずっと同じクライアント接続を使用していたので、同じグローバルで新しいセッションのデフォルトを変更しましたが、セッションは新しいものではなく、デフォルトの変更前にセッションが開始されました。したがって、Select@@global.sort_buffer_sizeを使用してグローバル値をクエリできます
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)
永続的な構成パラメーター:
パフォーマンススキーマ、セッション変数、グローバル変数テーブルからsort_buffer_sizeを確認してください。
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)>
まだ変更していないので、どちらも同じです。この値がから来ていることを確認しましょう。
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)
したがって、変数は/etc/my.cnfからのものであり、VARIABLE_SOURCE値はGLOBALであることがわかります。これはまだ変更されていないため、接続時にセッションがグローバル値を選択したためです。
グローバルsor_buffer_sizeを変更して、結果がどうなるか見てみましょう。
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)
ソースが動的であることがわかるように、SET_TIMEが変更され、変更を加えたのはrootユーザーです。
待機タイムアウトなど、my.cnfにない変数を確認してみましょう。
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)
可変ソース(この場合はコンパイル済み)であることがわかります。 これは、サーバーのデフォルト値を使用していることを意味します。別のものに変更しましょう。
mysql> SET GLOBAL wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
ここで、ソースが動的になることをもう一度確認すると、そこに行きます。
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)
PERSISTコマンドを使用してこれを永続的にしましょう。 注 これらの変更はmy.cnfファイルに追加していません
mysql> SET PERSIST wait_timeout=100; Query OK, 0 rows affected (0.00 sec)
MySQLクライアントを終了し、設定が実際に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" } } } }
mysqlサーバーを再起動し、wait_timeout変数値からのパスが来ることを確認します。以下に示すように/var/lib/mysql/mysqld-auto.cnfから来るでしょう。
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)
「sort_buffer_size」の値を確認すると、値を変更しなかった場合と同じであり、同じパスから取得され、ソースは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)