Mysql GTID
8065 ワード
GTIDは何ですか?
GTID全称A global transaction identifierグローバル事物idは、MASTERが作成した事物に一致するID番号である.それは本機で唯一であるだけでなく、他のサーバでも唯一である. gitd物事と一つ一つ対応 master commit物事のたびにgtid が自動的に作成されます.
gitd形式はGTID=source_id:transaction_id(例えば04038 bcc-fd 0 c-11 e 7-9 cc 5-000 c 29 db 6599:1-2)
source_idは一般的に発起人のuuidでautoに保存されています.cnfファイル;
transaction_idは物事idであり、1-2は2番目の物事を表す.第1-nはn個の事物を表す
なぜGTIDを使うのですか?
主従レプリケーション、特に半同期レプリケーションでは、MasterのdumpプロセスがbinlogをSlaveに送信しながら、SlaveのACKメッセージを待つため、このプロセスはシリアルであり、前の物事のACKがメッセージを受信していないため、後の物事はキューに並んで待つしかない.これにより、パフォーマンスに大きな影響を及ぼします.GTIDがあれば、SLAVEは直接データストリームを通じてGTID情報を得ることができ、同期することができる.
また、主にフェイルオーバーから、MASTER downが1台あれば、最新ログを持つSLAVEを抽出してMASTERを行う必要があります.これは良い判断ですが、GTIDがあれば、GTIDを基準にすれば簡単に判断できます.GTIDがあれば、SLAVEはbin-logのファイル名とPositionをずっと保存する必要はありません.
MASTER crashの場合、GTIDはデータの一致性を保証するのに役立ちます.すべてのものが唯一のGTIDに対応しているため、回復時に何かが繰り返し提出されると、SLAVEは直接無視されます.
GTIDはいつ使いますか?
一般的に主従複製のシーンでは、1台だけで使用する必要はありません.
GTID不支持:CREATE TABLE...SELECT文は、一つの物事にGTIDがあるので、この文には2つの物事があり、一つのCREATE、一つのINSERTがあるので、サポートされていません
CRETAE TEMPORARY TABLE、またはDROP TEMPORARY TABLEはサポートされていません
物事と非物事を混合して使用する.サポートされていません
GTIDの設定方法
すべてのプライマリスレーブノードはset global enforceを実行します.gtid_consistency=WARN;,mysql 5.7.6以前はONとOFFのみで、その後WARN、すなわちGTID制限を実行できる文があったが、warningsが生成され、warningsがあればこれらのサポートされていない文を処理しなければならない.データが一致しないという問題が発生しやすい.警告がないことを確認してから、実行を続行します.
すべてのノード、gtidモード、gtid_をオンにします.modeには4つのモードがあります. OFF GTIDを生成せず、SlaveはGTIDを持たないトランザクション のみを受け入れる OFF_PERMISSIVEはGTIDを生成せず、SlaveはGTIDを持たないトランザクションもGTID付きトランザクションも受け入れる ON_PERMISSIVEはGTIDを生成し、SlaveはGTIDを持たないトランザクションもGTIDを持つトランザクションも を受け入れる. ONはGTIDを生成し、SlaveはGTID付きトランザクション のみを受け入れる.
モード間の切り替えは段階的にしか切り替えられません.そうしないと、エラーが発生します.
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF OFF_PERMISSIVE ON_PERMISSIVE ON. Also note that this value must be stepped up or down simultaneouslyon all servers. See the Manual for instructions.
設定の表示
SLAVEの再構成:(すべてのSLAVEでこの行)
構成完了
現在のGTIDの表示方法
1,Slaveでshow slave statusを実行する
2,masterで実行:show master status;
3, show binlog events
4 binlogを表示
GTIDプロファイル:
GTID全称A global transaction identifierグローバル事物idは、MASTERが作成した事物に一致するID番号である.
gitd形式はGTID=source_id:transaction_id(例えば04038 bcc-fd 0 c-11 e 7-9 cc 5-000 c 29 db 6599:1-2)
source_idは一般的に発起人のuuidでautoに保存されています.cnfファイル;
transaction_idは物事idであり、1-2は2番目の物事を表す.第1-nはn個の事物を表す
なぜGTIDを使うのですか?
主従レプリケーション、特に半同期レプリケーションでは、MasterのdumpプロセスがbinlogをSlaveに送信しながら、SlaveのACKメッセージを待つため、このプロセスはシリアルであり、前の物事のACKがメッセージを受信していないため、後の物事はキューに並んで待つしかない.これにより、パフォーマンスに大きな影響を及ぼします.GTIDがあれば、SLAVEは直接データストリームを通じてGTID情報を得ることができ、同期することができる.
また、主にフェイルオーバーから、MASTER downが1台あれば、最新ログを持つSLAVEを抽出してMASTERを行う必要があります.これは良い判断ですが、GTIDがあれば、GTIDを基準にすれば簡単に判断できます.GTIDがあれば、SLAVEはbin-logのファイル名とPositionをずっと保存する必要はありません.
MASTER_AUTO_POSITION
を有効にすればよいMASTER crashの場合、GTIDはデータの一致性を保証するのに役立ちます.すべてのものが唯一のGTIDに対応しているため、回復時に何かが繰り返し提出されると、SLAVEは直接無視されます.
GTIDはいつ使いますか?
一般的に主従複製のシーンでは、1台だけで使用する必要はありません.
GTID不支持:CREATE TABLE...SELECT文は、一つの物事にGTIDがあるので、この文には2つの物事があり、一つのCREATE、一つのINSERTがあるので、サポートされていません
CRETAE TEMPORARY TABLE、またはDROP TEMPORARY TABLEはサポートされていません
物事と非物事を混合して使用する.サポートされていません
GTIDの設定方法
すべてのプライマリスレーブノードはset global enforceを実行します.gtid_consistency=WARN;,mysql 5.7.6以前はONとOFFのみで、その後WARN、すなわちGTID制限を実行できる文があったが、warningsが生成され、warningsがあればこれらのサポートされていない文を処理しなければならない.データが一致しないという問題が発生しやすい.警告がないことを確認してから、実行を続行します.
mysql> set global enforce_gtid_consistency=WARN;
Query OK, 0 rows affected (0.00 sec)
mysql> set global enforce_gtid_consistency=on;
Query OK, 0 rows affected (0.00 sec)
すべてのノード、gtidモード、gtid_をオンにします.modeには4つのモードがあります.
モード間の切り替えは段階的にしか切り替えられません.そうしないと、エラーが発生します.
ERROR 1788 (HY000): The value of @@GLOBAL.GTID_MODE can only be changed one step at a time: OFF OFF_PERMISSIVE ON_PERMISSIVE ON. Also note that this value must be stepped up or down simultaneouslyon all servers. See the Manual for instructions.
mysql> set global gtid_mode=OFF_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)
mysql> set global gtid_mode=ON_PERMISSIVE;
Query OK, 0 rows affected (0.02 sec)
mysql> set global gtid_mode=ON;
Query OK, 0 rows affected (0.02 sec)
設定の表示
mysql> show global variables like '%gtid%';
+----------------------------------+-------------------------------------------+
| Variable_name | Value |
+----------------------------------+-------------------------------------------+
| binlog_gtid_simple_recovery | ON |
| enforce_gtid_consistency | ON |
| gtid_executed | 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-16 |
| gtid_executed_compression_period | 1000 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
| session_track_gtids | OFF |
+----------------------------------+-------------------------------------------+
SLAVEの再構成:(すべてのSLAVEでこの行)
mysql> stop slave;
Query OK, 0 rows affected (0.01 sec)
mysql> change master to master_auto_position=1;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql>
構成完了
現在のGTIDの表示方法
1,Slaveでshow slave statusを実行する
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.8.135.149
Master_User: repl
Master_Port: 3358
Connect_Retry: 10
Master_Log_File: mysql-bin.000036
Read_Master_Log_Pos: 194
Relay_Log_File: localhost-relay-bin.000017
Relay_Log_Pos: 407
Relay_Master_Log_File: mysql-bin.000036
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
..........
Master_SSL_Crlpath:
Retrieved_Gtid_Set: 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-16
Executed_Gtid_Set: 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-16
Auto_Position: 1
Replicate_Rewrite_DB:
2,masterで実行:show master status;
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000036 | 584 | | | 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-17 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)
mysql>
3, show binlog events
mysql> show binlog events in 'mysql-bin.000036';
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000036 | 4 | Format_desc | 135149 | 123 | Server ver: 5.7.19-log, Binlog ver: 4 |
| mysql-bin.000036 | 123 | Previous_gtids | 135149 | 194 | 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-16 |
| mysql-bin.000036 | 194 | Gtid | 135149 | 259 | SET @@SESSION.GTID_NEXT= '04038bcc-fd0c-11e7-9cc5-000c29db6599:17' |
| mysql-bin.000036 | 259 | Query | 135149 | 332 | BEGIN |
| mysql-bin.000036 | 332 | Table_map | 135149 | 380 | table_id: 108 (apple.a) |
| mysql-bin.000036 | 380 | Write_rows | 135149 | 553 | table_id: 108 flags: STMT_END_F |
| mysql-bin.000036 | 553 | Xid | 135149 | 584 | COMMIT /* xid=61 */ |
+------------------+-----+----------------+-----------+-------------+--------------------------------------------------------------------+
4 binlogを表示
#180123 19:24:10 server id 135149 end_log_pos 194 CRC32 0x37c62cd3 Previous-GTIDs
# 04038bcc-fd0c-11e7-9cc5-000c29db6599:1-16
# at 194
#180123 19:32:09 server id 135149 end_log_pos 259 CRC32 0x929f90c1 GTID [commit=no]
SET @@SESSION.GTID_NEXT= '04038bcc-fd0c-11e7-9cc5-000c29db6599:17'/*!*/;
# at 259
#180123 19:32:09 server id 135149 end_log_pos 332 CRC32 0xf9df8eb9 Query thread_id=6 exec_time=0 error_code=0
GTIDプロファイル:
[mysqld]
binlog-format = ROW
log-bin = /export/data/mysql/mysql-bin
sync_master_info=1
gtid_mode=on
enforce_gtid_consistency=on
report_port=3358
report_host=172.28.112.112
master_info_repository=table
relay_log_info_repository=table
binlog_checksum=CRC32
slave_sql_verify_checksum=1
binlog_rows_query_log_events=1