sql >> データベース >  >> RDS >> Mysql

MySQL8の構成

    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)

    1. OracleJDBCおよびOracleCHARデータ型

    2. MySQLWorkbenchを使用してMySQLを停止/開始する方法

    3. MySQLの文字列からすべての英数字以外の数字を削除するにはどうすればよいですか?

    4. 末尾にスペースがある値と一致するSQLWHERE句