初心者または初心者、MySQLデータベースの運用および保守担当者の中級者にとって、mysqlデータベースに対するmysqldumpの影響を理解することは非常に必要です。mysqldumpコマンドが実行された後、mysqlバックグラウンドで実行されるものを見てみましょう。ここでgeneral_logを使用してください。analysis
1.まず、以下に示すように、データベースのgeneral_logを開きます。
[root@localhost] 17:30:41 [(none)]>show variables like 'general_log%';
+------------------+---------------------------------+
| Variable_name | Value |
+------------------+---------------------------------+
| general_log | OFF |
| general_log_file | /data/mysql/data/3306/mysql.log |
+------------------+---------------------------------+
2 rows in set (0.00 sec)
general_logを開きます
[root@localhost] 17:41:40 [(none)]>set global general_log=on;
Query OK, 0 rows affected (0.42 sec)
[root@localhost] 17:41:50 [(none)]>show variables like 'general_log%';
+------------------+---------------------------------+
| Variable_name | Value |
+------------------+---------------------------------+
| general_log | ON |
| general_log_file | /data/mysql/data/3306/mysql.log |
+------------------+---------------------------------+
2 rows in set (0.00 sec)
2.mysqldumpバックアップコマンドを実行します
#mysqldump --socket=/data/mysql/run/3306/mysql.sock --skip-tz-utc --all-databases --single-transaction -ER -u root -proot> db_script.sql
実行後、general_logの内容を確認してください
2020-08-20T17:44:58.473668+08:00 6 Connect root@localhost on using Socket
2020-08-20T17:44:58.473911+08:00 6 Query /*!40100 SET @@SQL_MODE='' */
2020-08-20T17:44:58.474234+08:00 6 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2020-08-20T17:44:58.474325+08:00 6 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2020-08-20T17:44:58.474514+08:00 6 Query SHOW VARIABLES LIKE 'gtid\_mode'
2020-08-20T17:44:58.478784+08:00 6 Query SELECT @@GLOBAL.GTID_EXECUTED
2020-08-20T17:44:58.478972+08:00 6 Query UNLOCK TABLES
backupコマンドは、最初にセッションの分離レベルをRRに設定し、次にトランザクション整合性スナップショットの設定を開始します。これを見ると、FTWRL(読み取りロック付きのテーブルのフラッシュ)がバックグラウンドで実行されない理由を尋ねる学生がいます。バックアップ中に追加されない– master-dataパラメーター、このパラメーターを追加した後の違いを確認する
#mysqldump --socket=/data/mysql/run/3306/mysql.sock --master-data=2 --skip-tz-utc --all-databases --single-transaction -ER -u root -proot> db_script.sql
general_logの内容をもう一度見てください
2020-08-20T17:52:33.612990+08:00 7 Connect root@localhost on using Socket
2020-08-20T17:52:33.613504+08:00 7 Query /*!40100 SET @@SQL_MODE='' */
2020-08-20T17:52:33.614493+08:00 7 Query FLUSH /*!40101 LOCAL */ TABLES
2020-08-20T17:52:33.617383+08:00 7 Query FLUSH TABLES WITH READ LOCK
2020-08-20T17:52:33.617559+08:00 7 Query SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
2020-08-20T17:52:33.617628+08:00 7 Query START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
2020-08-20T17:52:33.617804+08:00 7 Query SHOW VARIABLES LIKE 'gtid\_mode'
2020-08-20T17:52:33.625696+08:00 7 Query SELECT @@GLOBAL.GTID_EXECUTED
2020-08-20T17:52:33.625876+08:00 7 Query SHOW MASTER STATUS
2020-08-20T17:52:33.626051+08:00 7 Query UNLOCK TABLES
ここでは、さらに2つの操作があることがわかります
FLUSH /*!40101 LOCAL */ TABLES
FLUSH TABLES WITH READ LOCK
これは、–master-dataパラメータの追加により、バックアップがレプリケートされたマスターデータベースからエクスポートされるためです。このバックアップファイルを使用して、別のレプリケーションスレーブデータベースを直接作成できます。読み取りロック付きのフラッシュテーブルは、主に次のバックアップツールに使用されます。一貫性のあるバックアップを取得します(binlogサイトとのデータ一致)。
操作が適切でないため、更新用のすべてのDML、DDLがブロックされ、ビジネスが操作を実行できなくなるため、読み取りロック付きのフラッシュテーブルを理解する必要があります。
FTWRLには、主に3つのステップが含まれます
。1。グローバル読み取りロック(lock_global_read_lock)
2。テーブルキャッシュのクリア(close_cached_tables)
3。グローバルCOMMITロック(make_global_read_lock_block_commit)
最初のステップでは、グローバル読み取りロックであるため、更新操作のためにすべてのDML、DDLをブロックしますが、このステップは非常に高速であり、ビジネスはそれを感じることができません。
2番目のステップでは、テーブルキャッシュがクリーンアップされます。ここで注意する必要があります。クエリが遅い場合、FTWRLはブロックされます。さらに、selectを含む、関連するテーブルに対するすべての操作がブロックされます。これで、mysqldumpバックアップコマンドを終了しても、slow queryステートメントを強制終了しない限り、ブロックは削除されないため、早朝にバックアップを行う学生
は3番目の操作に注意を払い、グローバルコミットロックを申請します。このとき、大きなものがあると、長期間提出しないと、FTWRLがブロックされます。
要約すると、mysqldumpコマンドを実行する前に、データベースに長い間送信されていない遅いSQLや大きなものがあるかどうかを最初に確認します。