MySQL GTID Implementation, Maintenance, and Best Practices
Brian Cain (Dropbox) Gillian Gunson (GitHub) Mark Filipi (SurveyMonkey)
MySQL GTID Implementation, Maintenance, and Best Practices Brian - - PowerPoint PPT Presentation
MySQL GTID Implementation, Maintenance, and Best Practices Brian Cain (Dropbox) Gillian Gunson (GitHub) Mark Filipi (SurveyMonkey) Agenda Intros Concepts Replication overview GTID Intro Implementation Maintenance
Brian Cain (Dropbox) Gillian Gunson (GitHub) Mark Filipi (SurveyMonkey)
❏
❏
❏
❏
❏
❏
❏
2
3
4
5
❏
❏
❏
❏
server1 master server2 replica server3 replica
6
Traditional replication primer and introduction to GTID
7
❏
❏
❏
8
server1 master server2 replica server3 replica server1 master server2 relay server3 replica
9
markf@db-wfcore03-ro [(none)]> show master status; +------------------+-----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+-----------+--------------+------------------+ | mysql-bin.000695 | 264631170 | | | +------------------+-----------+--------------+------------------+ 1 row in set (0.08 sec)
10
markf@db-wfcore03-ro [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.10.23.17 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000751 Read_Master_Log_Pos: 67329044 Relay_Log_File: mysqld-relay-bin.000403 Relay_Log_Pos: 67329189 Relay_Master_Log_File: mysql-bin.000751 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 67329044 Relay_Log_Space: 67329388 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: 1 row in set (0.08 sec)
11
12
13
14
15
16
17
18
19
20
21
22
23
# at 2637016 #160307 15:05:42 server id 3031 end_log_pos 2637016 Table_map: `C0070735`.`FormStats` mapped to number 139874072 #160307 15:05:42 server id 3031 end_log_pos 2637088 Update_rows: table id 139874072 flags: STMT_END_F BINLOG ' RgneVhPXCwAAOAAAANg8KAAABhPVggAAAEACUMwMDcwMzczNQAJm9ybVN0YXRzAAQDDAMDAAA= RgneVhjXCwAASAAAACA9KAAABhPVggAAAEABP//8AdPAACwPPLvVIAACgBAAAMAAAA8AdPAACw PPLvVRIAACkBAAAMAAAA '/*!*/; ### UPDATE C0070735.FormStats ### WHERE ### @1=20231 ### @2=2016-03-07 15:00:00 ### @3=296 ### @4=12 ### SET ### @1=20231 ### @2=2016-03-07 15:00:00 ### @3=297 ### @4=12 # at 2637088 #160307 15:05:42 server id 3031 end_log_pos 2637115 Xid = 2004736153 COMMIT/*!*/;
24
#160323 14:37:48 server id 168433453 end_log_pos 41956 CRC32 0xee79822d GTID [commit=yes] SET @@SESSION.GTID_NEXT= '81b0bb5e-f004-11e5-aaa3-b8ca3a676681:100'/*!*/; # at 41956 #160323 14:37:48 server id 168433453 end_log_pos 42033 CRC32 0xdac047b0 Query thread_id=4611 exec_time=0 error_code=0 SET TIMESTAMP=1458769068/*!*/; BEGIN /*!*/; # at 42033 #160323 14:37:48 server id 168433453 end_log_pos 42094 CRC32 0xd3c70a01 Table_map: `C01840587`.`FormStats` mapped to number 74 # at 42094 #160323 14:37:48 server id 168433453 end_log_pos 42166 CRC32 0xa031417e Update_rows: table id 74 flags: STMT_END_F BINLOG ' rAzzVhMtFwoKPQAAAG6kAAAAAEoAAAAAAUMwMTg0MDU4NwAJRm9ybVN0YXRzAAQDEgMDAQAAAQrH0w== rAzzVh8tFwoKSAAAALakAAAAAEoAAA///wBAAAAJmY7uAAAgAAAAIAAADwBAAAAJmY7uAAAwAAAAIAAAB+QTGg '/*!*/; ### UPDATE `C01840587`.`FormStats` ### WHERE ### @1=4 ### @2='2016-03-23 14:00:00' ### @3=2
25
26
27
28
CHANGE MASTER TO MASTER_HOST=’server1’, MASTER_AUTO_POSITION=1; START SLAVE;
29
30
Enabling GTID and making topology changes
31
❏
■
❏
■
■
❏
32
❏
■
■
■
■
■
33
server1 master server2 replica server3 replica
34
❏
❏
❏
■
■
■
■
❏
35
❏
❏
binlog_format=ROW
■
mysqlbinlog --no-defaults --base64-output=DECODE-ROWS -vvv [binlog]
❏
■
skip-slave-start
■
log-bin, log-slave-updates
36
❏
■
■
■
❏
■
■
■
37
❏
■
■
master_log_pos
■
■
38
❏
■
39
❏
❏
enforce-gtid-consistency = 1 gtid-mode = ON
❏
❏
SET GLOBAL gtid_deployment_step=ON; SET GLOBAL super_read_only=ON;
40
❏
server1 master server2 replica server3 replica
gtid_mode=ON gtid_deployment_step=ON gtid_mode=ON gtid_deployment_step=ON gtid_mode=OFF gtid_deployment_step=OFF
41
❏
❏
server1 master server2 replica server3 replica server1 replica server2 master server3 replica
42
❏
■
■
❏
■
■
43
(root@server2) [(none)]> show slave status\G *************************** 1. row *************************** Slave_IO_Running: Yes Slave_SQL_Running: No ... Master_UUID: cc83d91e-d0e4-11e5-9faf-02cddc874cbb ... Retrieved_Gtid_Set: cc83d91e-d0e4-11e5-9faf-02cddc874cbb:1-107 Executed_Gtid_Set: c866b7ac-d0e4-11e5-9faf-020a6fe2a217:1-442, cc83d91e-d0e4-11e5-9faf-02cddc874cbb:1-107 Auto_Position: 0
44
(root@server2) [(none)]> show master status\G *************************** 1. row *************************** File: mysql-bin.000002 Position: 1976131 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: c866b7ac-d0e4-11e5-9faf-020a6fe2a217:1-442, cc83d91e-d0e4-11e5-9faf-02cddc874cbb:1-107 1 row in set (0.00 sec)
45
❏
❏
❏
❏
❏
❏
46
47
server1 replica server2 master server3 replica gtid_mode=OFF gtid_mode=ON gtid_deployment_step=ON gtid_mode=ON gtid_deployment_step=ON master_auto_position=1 error silently dropped writes
❏
server1 master server2 replica server3 replica
48
server1 replica server2 master server3 replica
❏
❏
❏
❏
❏
49
❏
server1 master server2 replica server3 replica
50
server1 master server2 relay server3 replica
❏
■
STOP SLAVE
❏
■
■
FLUSH TABLES; FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; SHOW SLAVE STATUS\G UNLOCK TABLES;
❏
■
START SLAVE UNTIL [recorded server2 slave file/position]
■
■
CHANGE MASTER TO [recorded server2 master file/position]
■
START SLAVE
51
❏
■
stop slave;
■
CHANGE MASTER TO master_host=’server2’;
■
start slave;
52
53
❏
❏
❏
❏
❏
54
❏
server1 master server2 relay server3 replica
server_uuid bd933998-f2c5-11e5-bc9a-021b71 e877a3 Executed_Gtid_Set bcc3d83d-f2c5-11e5-bc9a-029d98 5ea7a3:1-2, bd933998-f2c5-11e5-bc9a-021b71 e877a3:1-111 server_uuid bcc3d83d-f2c5-11e5-bc9a-029 d985ea7a3 Master_UUID bd933998-f2c5-11e5-bc9a-021 b71e877a3 server_uuid be2ed142-f2c5-11e5-bc9a-027 4358cd201 Master_UUID bcc3d83d-f2c5-11e5-bc9a-029 d985ea7a3 55
❏
❏
❏
Executed_Gtid_Set bcc3d83d-f2c5-11e5-bc9a-029d985ea7a3:1-2, bd933998-f2c5-11e5-bc9a-021b71e877a3: 1-111:113-120
56
❏
❏
❏
❏
mysqlbinlog --no-defaults -vvv --base64-output=DECODE-ROWS
/var/lib/mysql/mysql-bin.000002 SET @@SESSION.GTID_NEXT= 'bd933998-f2c5-11e5-bc9a-021b71e877a3:112'/*!*/;
57
❏
❏
❏
❏
ALTER TABLE mysqlslap.t1 ADD COLUMN newcol3 varchar(128);
58
❏
❏
❏
set gtid_next='xxx_gtid_xxx'; BEGIN; COMMIT;
59
Things to investigate
60
❏
❏
❏
❏
❏
61
❏
❏
❏
❏
62
❏
❏
❏
❏
❏
❏
❏
63
❏
❏
❏
❏
❏
select gtid_subtract(@@global.gtid_executed,@@global.gtid_purged)
❏
❏
❏
64
❏
❏
❏
❏
65
❏
❏
❏
❏
❏
❏
66
Things to look forward to
67
❏
❏
68
❏
❏
❏
❏
❏
69
❏
❏
❏
❏
70
❏
❏
71
❏
❏
❏
❏
72
73