SlideShare a Scribd company logo
Why MySQL Replication Fails,
and How to Get it Back
September, 26, 2017
Sveta Smirnova
∙ MySQL Support engineer
∙ Author of
∙ MySQL Troubleshooting
∙ JSON UDF functions
∙ FILTER clause for MySQL
∙ Speaker
∙ Percona Live, OOW, Fosdem,
DevConf, HighLoad...
Sveta Smirnova
2
Thank You Sponsors!
3
∙ Exists since very first versions
Replication in MySQL
4
∙ Exists since very first versions
∙ Easy to use
Replication in MySQL
4
∙ Exists since very first versions
∙ Easy to use
∙ Minimal setup
Replication in MySQL
4
∙ Master
∙ --log-bin
∙ --server-id
∙ GRANT REPLICATION SLAVE ON *.* ...
Turn Replication On
5
∙ Master
∙ --log-bin
∙ --server-id
∙ GRANT REPLICATION SLAVE ON *.* ...
∙ Slave
∙ --server-id
∙ CHANGE MASTER ...
∙ START SLAVE
Turn Replication On
5
Simple
6
Circle
7
Star
8
Creative
9
Typical Replication Errors
Replication Stopped
11
Slave Lags from the Master
12
Increased Resource Usage on Master
13
Not a Full List!
14
MySQL Replication: Must Know
Master Slave
← Initiates
Asynchronous
16
Master Slave
← Initiates
← Requests a packet
Asynchronous
16
Master
Sends the packet →
Slave
← Initiates
← Requests a packet
Asynchronous
16
Master
Sends the packet →
Slave
← Initiates
← Requests a packet
... ?
Asynchronous
16
∙ Network error
∙ Authorization
Did Slave Recieve Data?
17
Slave_IO_State: Waiting for master to send event
Master_Host: 127.0.0.1
Master_User: root
Master_Port: 13000
Connect_Retry: 60
Master_Log_File: master-bin.000002
Read_Master_Log_Pos: 63810611
Relay_Log_File: slave-relay-bin-master@002d1.000004
Relay_Log_Pos: 1156
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1032
Last_Error: Could not execute Update_rows event on...
Skip_Counter: 0
Exec_Master_Log_Pos: 989
Relay_Log_Space: 63814652
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: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1032
Last_SQL_Error: Could not execute Update_rows event on...
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
Master_UUID: d08c509e-6857-11e6-8872-30b5c2208a0f
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State:
Master_Retry_Count: 10
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp: 160823 15:11:21
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set:
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name: master-1 | Master_TLS_Version:
∙ IO thread Configuration
∙ SQL thread Configuration
∙ IO thread State
∙ SQL thread State
∙ Errors
∙ Only last one
∙ All are in the error log
Tool #1: SHOW SLAVE STATUS
18
Slave_IO_Running: Connecting
Slave_SQL_Running: Yes
...
Last_IO_Errno: 1045
Last_IO_Error: error connecting to master ’root@127.0.0.1:13000’ -
Last_SQL_Errno: 0
Last_SQL_Error:
...
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp: 160824 03:18:36
Last_SQL_Error_Timestamp:
Network Errors
19
mysql> select * from performance_schema.replication_connection_statusG
*************************** 1. row ***************************
CHANNEL_NAME:
GROUP_NAME:
SOURCE_UUID:
THREAD_ID: NULL
SERVICE_STATE: CONNECTING
COUNT_RECEIVED_HEARTBEATS: 0
LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00
RECEIVED_TRANSACTION_SET:
LAST_ERROR_NUMBER: 1045
LAST_ERROR_MESSAGE: error connecting to master ’root@127.0.0.1:13000’ -
retry-time: 60 retries: 4
LAST_ERROR_TIMESTAMP: 2016-08-24 03:21:36
1 row in set (0,01 sec)
#2: connection status in Performance Schema
20
2016-08-24T00:18:36.077384Z 3 [ERROR] Slave I/O for channel ’’: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 1, Error_code: 1045
2016-08-24T00:19:36.299011Z 3 [ERROR] Slave I/O for channel ’’: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 2, Error_code: 1045
2016-08-24T00:20:36.485315Z 3 [ERROR] Slave I/O for channel ’’: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 3, Error_code: 1045
2016-08-24T00:21:36.677915Z 3 [ERROR] Slave I/O for channel ’’: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 4, Error_code: 1045
2016-08-24T00:22:36.872066Z 3 [ERROR] Slave I/O for channel ’’: error connecting to
master ’root@127.0.0.1:13000’ - retry-time: 60 retries: 5, Error_code: 1045
#3: Error Log File
21
$ perror 1045
MySQL error code 1045 (ER_ACCESS_DENIED_ERROR): Access denied for user ’%-.48s’@’%-.64s’
(using password: %s)
#4: perror
22
∙ On the slave
$ mysql -h127.0.0.1 -P13000 -uslave_user -pslave_password
Warning: Using a password on the command line interface can be insecure.
ERROR 1045 (28000): Access denied for user ’slave_user’@’localhost’ (using password: YES
#5: MySQL Command Line Client
23
∙ On the slave
∙ On the master
mysql> SHOW GRANTS;
+-----------------------------------------+
| Grants for slave_user@% |
+-----------------------------------------+
| GRANT SELECT ON *.* TO ’slave_user’@’%’ |
+-----------------------------------------+
1 row in set (0.00 sec)
#5: MySQL Command Line Client
23
∙ On the slave
∙ On the master
∙ Fix privileges on master
GRANT REPLICATION SLAVE
ON *.* TO ’slave user’@’%’
#5: MySQL Command Line Client
23
∙ On the slave
∙ On the master
∙ Fix privileges on master
∙ Restart replication
#5: MySQL Command Line Client
23
Master Slave
← Initiates
Semisynchrous plugin
24
Master Slave
← Initiates
← Requests a packet
Semisynchrous plugin
24
Master
Sends the packet →
Slave
← Initiates
← Requests a packet
Semisynchrous plugin
24
Master
Sends the packet →
Waits ”Ack”
Slave
← Initiates
← Requests a packet
Semisynchrous plugin
24
Master
Sends the packet →
Waits ”Ack”
Slave
← Initiates
← Requests a packet
← Sends ”Ack”
Semisynchrous plugin
24
∙ Writes on master are slower
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ Before 5.7: from single slave
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ Before 5.7: from single slave
∙ Now in MySQL:
rpl semi sync master wait for slave count
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ Before 5.7: from single slave
∙ Now in MySQL:
rpl semi sync master wait for slave count
∙ Won’t wait others
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ What happens in case of timeout?
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ What happens in case of timeout?
∙ Replication becomes asynchronous
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ What happens in case of timeout?
∙ What does ”Ack” mean?
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ What happens in case of timeout?
∙ What does ”Ack” mean?
∙ Event written into relay log
Semisynchrous: Troubleshooting
25
∙ Writes on master are slower
∙ How many ”Ack”-s master waits?
∙ What happens in case of timeout?
∙ What does ”Ack” mean?
∙ Event written into relay log
∙ It is unknown if event applied
Semisynchrous: Troubleshooting
25
IO thread
Reads from the master
SQL thread
Two Kinds of Slave Threads
26
IO thread
Reads from the master
Stores in the relay log
SQL thread
Two Kinds of Slave Threads
26
IO thread
Reads from the master
Stores in the relay log
SQL thread
← Reads from relay log
Two Kinds of Slave Threads
26
IO thread
Reads from the master
Stores in the relay log
SQL thread
← Reads from relay log
Executes
Two Kinds of Slave Threads
26
∙ Easier for troubleshooting
Single SQL Thread
27
∙ Easier for troubleshooting
∙ Slower than master
∙ High parallel load
Single SQL Thread
27
Writes on the Master
28
Writes on the Slave: Single SQL Thread
29
Multiple SQL Threads: 5.6+
30
∙ MySQL: --slave parallel workers
∙ MySQL: --slave parallel type=DATABASE | LOGICAL CLOCK
∙ MySQL 8.0.1+:
SET @@GLOBAL.binlog transaction dependency tracking =
WRITESET | WRITESET SESSION | COMMIT ORDER;
Performance Tuning
31
∙ MariaDB: --slave parallel threads
∙ MariaDB: --slave parallel max queued
∙ MariaDB: --slave domain parallel threads
∙ MariaDB: --slave parallel mode=optimistic | conservative |
aggressive | minimal | none
Performance Tuning
31
mysql> select WORKER_ID, SERVICE_STATE, LAST_SEEN_TRANSACTION, LAST_ERROR_NUMBER,
-> LAST_ERROR_MESSAGE from performance_schema.replication_applier_status_by_workerG
*************************** 1. row ***************************
WORKER_ID: 1
SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4988
LAST_ERROR_NUMBER: 0
LAST_ERROR_MESSAGE:
*************************** 2. row ***************************
WORKER_ID: 3
SERVICE_STATE: OFF
LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4986
LAST_ERROR_NUMBER: 1032
LAST_ERROR_MESSAGE: Worker 2 failed executing transaction...
#6: Error of One Thread Stops All
32
MariaDB [test]> select id, command, time, state from information_schema.processlist
-> where user=’system user’;
+----+---------+------+------------------------------------------------------------------+
| id | command | time | state |
+----+---------+------+------------------------------------------------------------------+
| 25 | Connect | 4738 | Waiting for master to send event |
| 24 | Connect | 5096 | Slave has read all relay log; waiting for the slave I/O thread t |
| 23 | Connect | 0 | Waiting for work from SQL thread |
| 22 | Connect | 0 | Unlocking tables |
| 21 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 20 | Connect | 0 | Waiting for prior transaction to start commit before starting ne |
| 19 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 18 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) |
| 17 | Connect | 0 | Update_rows_log_event::find_row(-1)
...
#6: Error of One Thread Stops All
32
∙ Different data
∙ Slave cannot apply event from relay log
Which Kind of Errors?
33
∙ Different data
∙ Slave cannot apply event from relay log
∙ Different errors on master and slave
∙ Triggers
∙ Transactional and non-transactional tables in
the same transaction
Which Kind of Errors?
33
∙ Did table change outside of the replication?
∙ How?
∙ Can it cause conflict with changes on the
master?
Different Data on Master and Slave
34
∙ Did table change outside of the replication?
∙ Are table structures identical?
∙ Percona Toolkit
pt-table-checksum, pt-table-sync
∙ MySQL Utilities
mysqlrplsync, mysqldbcompare, mysqldiff
Different Data on Master and Slave
34
∙ Did table change outside of the replication?
∙ Are table structures identical?
∙ Are changes in the correct order?
∙ mysqlbinlog
∙ Application logic on the master
Different Data on Master and Slave
34
Master
Recieves a change
Storage Engine
Logical
35
Master
Recieves a change
Sends to SE →
Storage Engine
Logical
35
Master
Recieves a change
Sends to SE →
Storage Engine
Writes into table
Logical
35
Master
Recieves a change
Sends to SE →
Storage Engine
Writes into table
← Returns control
Logical
35
Master
Recieves a change
Sends to SE →
Writes into binary log
Storage Engine
Writes into table
← Returns control
Logical
35
Master
Recieves a change
Sends to SE →
Writes into binary log
Synchronizes →
Storage Engine
Writes into table
← Returns control
← Synchronizes
Logical
35
∙ More writes
∙ RBR: --binlog row image
Master Performance
36
∙ More writes
∙ RBR: --binlog row image
∙ --binlog cache size
Watch Binlog cache disk use
Master Performance
36
∙ More writes
∙ RBR: --binlog row image
∙ --binlog cache size
Watch Binlog cache disk use
∙ --binlog stmt cache size
Watch Binlog stmt cache disk use
Master Performance
36
∙ More writes
∙ Synchronization
∙ --binlog sync
∙ Do not disable!
∙ You may set it greater than 1
Master Performance
36
∙ Binary log lifetime
∙ --expire log days
Master Behavior
37
∙ Binary log lifetime
∙ Synchronization
∙ SBR is not safe with READ COMMITTED and READ
UNCOMMITTED
Master Behavior
37
∙ Binary log lifetime
∙ Synchronization
∙ Order of records in the binary log
∙ Non-deterministic events and SBR
Master Behavior
37
Client Binary log
Statement-Based Binary Log Format
38
Client
INSERT INTO ... →
Binary log
Statement-Based Binary Log Format
38
Client
INSERT INTO ... →
Binary log
SET TIMESTAMP...
Statement-Based Binary Log Format
38
Client
INSERT INTO ... →
Binary log
SET TIMESTAMP...
SET sql mode...
Statement-Based Binary Log Format
38
Client
INSERT INTO ... →
Binary log
SET TIMESTAMP...
SET sql mode...
INSERT INTO ...
Statement-Based Binary Log Format
38
∙ Exists since very first versions
SBR: Strong Sides
39
∙ Exists since very first versions
∙ Table definitions on master and slave can
significantly vary
SBR: Strong Sides
39
∙ Exists since very first versions
∙ Table definitions on master and slave can
significantly vary
∙ Usually less writes
∙ There are exceptions!
SBR: Strong Sides
39
∙ Exists since very first versions
∙ Table definitions on master and slave can
significantly vary
∙ Usually less writes
∙ Human readable
SBR: Strong Sides
39
∙ Exists since very first versions
∙ Table definitions on master and slave can
significantly vary
∙ Usually less writes
∙ Human readable
∙ Easy to troubleshoot
SBR: Strong Sides
39
mysql> SHOW BINLOG EVENTS IN ’mysql-bin.000316’ FROM 422;
+------------------+-----+------------+------------+-------------+---------------------------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+------------------+-----+------------+------------+-------------+---------------------------------+
| mysql-bin.000316 | 422 | Query | 1456667904 | 509 | BEGIN |
| mysql-bin.000316 | 509 | Query | 1456667904 | 609 | use ‘PgDay‘; update ai set f1=1 |
| mysql-bin.000316 | 609 | Xid | 1456667904 | 640 | COMMIT /* xid=60328 */ |
+------------------+-----+------------+------------+-------------+---------------------------------+
3 rows in set (0,12 sec)
#7: SHOW BINLOG EVENTS
40
∙ Not all queries are safe
∙ Non-deterministic functions
∙ MySQL extentions
∙ Triggers
∙ Mix with non-transactional tables
∙ Temporary tables
SBR: Weak Sides
41
∙ Not all queries are safe
∙ Order of events matter!
∙ Row-based locks
SBR: Weak Sides
41
∙ Not all queries are safe
∙ Order of events matter!
∙ Row-based locks
∙ Triggers
SET GLOBAL slave skip counter – No GTIDs!
Skip transaction – GTIDs
Synchronize tables!
SBR: Weak Sides
41
Client Binary log
Row-Based Binary Log Format
42
Client
UPDATE ... →
Binary log
Row-Based Binary Log Format
42
Client
UPDATE ... →
Binary log
SET TIMESTAMP...
Row-Based Binary Log Format
42
Client
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql mode...
Row-Based Binary Log Format
42
Client
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql mode...
Row before changes
Row-Based Binary Log Format
42
Client
UPDATE ... →
Binary log
SET TIMESTAMP...
SET sql mode...
Row before changes
Row with changes
Row-Based Binary Log Format
42
∙ Safe
∙ You do not need to care about
Order of events
Triggers
Functions
Which queries you send to master
RBR: Strong Sides
43
∙ Sensitive for table structures
∙ More writes
∙ --binlog row image=FULL | MINIMAL | NOBLOB
∙ Harder to read
RBR: Weak Sidex
44
$ mysqlbinlog ./mysqld.1/data/master-bin.000001 --start-position=989 --stop-position=1213
...
# at 1167
#160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b
Update_rows: table id 109 flags: STMT_END_F
BINLOG ’
v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ==
v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw==
’/*!*/;
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;
...
#8: mysqlbinlog
45
$ mysqlbinlog -v ./mysqld.1/data/master-bin.000001 --start-position=989 --stop-position=1213
...
# at 1167
#160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b
Update_rows: table id 109 flags: STMT_END_F
BINLOG ’
v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ==
v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw==
’/*!*/;
### UPDATE ‘m2‘.‘t1‘
### WHERE
### @1=5
### SET
### @1=6
ROLLBACK /* added by mysqlbinlog */ /*!*/;
SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/;
#8: mysqlbinlog
46
∙ You must specify
∙ Name of the master’s binary log file
∙ Position
Position-Based
47
∙ You must specify
∙ Name of the master’s binary log file
∙ Position
∙ From the troubleshooting point of view
∙ Event executes if on the current position
Position-Based
47
∙ You must specify
∙ Name of the master’s binary log file
∙ Position
∙ From the troubleshooting point of view
∙ Event executes if on the current position
∙ Easy to skip
Position-Based
47
∙ You must specify
∙ Name of the master’s binary log file
∙ Position
∙ From the troubleshooting point of view
∙ Event executes if on the current position
∙ Easy to skip
∙ Easy to move position backward
Position-Based
47
∙ You must specify
∙ Name of the master’s binary log file
∙ Position
∙ From the troubleshooting point of view
∙ Event executes if on the current position
∙ Easy to skip
∙ Easy to move position backward
∙ No conflict resolution
Position-Based
47
∙ Each transaction has unique number: GTID
Global Transaction Identifiers (GTID)
48
∙ Each transaction has unique number: GTID
∙ MySQL: AUTO POSITION=1
Global Transaction Identifiers (GTID)
48
∙ Each transaction has unique number: GTID
∙ MySQL: AUTO POSITION=1
∙ MariaDB: master use gtid = { slave pos | current pos }
Global Transaction Identifiers (GTID)
48
∙ Each transaction has unique number: GTID
∙ MySQL: AUTO POSITION=1
∙ MariaDB: master use gtid = { slave pos | current pos }
∙ No need to specify binary log and position
Global Transaction Identifiers (GTID)
48
∙ Each transaction has unique number: GTID
∙ MySQL: AUTO POSITION=1
∙ MariaDB: master use gtid = { slave pos | current pos }
∙ No need to specify binary log and position
∙ Hard to skip erroneous event
Global Transaction Identifiers (GTID)
48
sveta@thinkie> mysqlslavetrx --gtid-set=fb776095-8474-11e5-ad41-30b5c2208a0f:3 
--slaves=root:@127.0.0.1:13001
WARNING: Using a password on the command line interface can be insecure.
#
# GTID set to be skipped for each server:
# - 127.0.0.1@13001: fb776095-8474-11e5-ad41-30b5c2208a0f:3
#
# Injecting empty transactions for ’127.0.0.1:13001’...
#
#...done.
#
#9: mysqlslavetrx
49
Complicated Setups
∙ Same specifics and methods
Complicated Setups
51
∙ Same specifics and methods
∙ Multiply complexity on number of channels
Complicated Setups
51
∙ Same specifics and methods
∙ Multiply complexity on number of channels
∙ Control writes
∙ What
∙ On which server
Complicated Setups
51
Master
∙ Binary log
∙ Binlog Dump
Slave
∙ Relay log
∙ IO thread
∙ SQL thread
Master and Slave
52
Slave 1
∙ Relay log
∙ IO thread
∙ SQL thread
Master
∙ Binary log
∙ Binlog Dump
∙ Binlog Dump
Slave 2
∙ Relay log
∙ IO thread
∙ SQL thread
Master and Two Slaves
53
Master 1
∙ Binary log
∙ Binlog Dump
∙ Relay log
∙ IO thread
∙ SQL thread
Master 2
∙ Relay log
∙ IO thread
∙ SQL thread
∙ Binary log
∙ Binlog Dump
Circular
54
Master 1
∙ Binary log
∙ Binlog Dump
Slave
∙ Relay log
∙ IO thread
∙ SQL thread
∙ Relay log
∙ IO thread
∙ SQL thread
Master 2
∙ Binary log
∙ Binlog Dump
Multiple Masters (Multi-channel): 5.7+
55
∙ Multiple sets of relay logs
∙ Multiple IO threads
∙ Multiple SQL threads
∙ MySQL: --slave parallel workers for each
Multi-Master: Troubleshooting
56
∙ Multiple sets of relay logs
∙ Multiple IO threads
∙ Multiple SQL threads
∙ MySQL: --slave parallel workers for each
∙ Independent channels
Multi-Master: Troubleshooting
56
∙ Multiple sets of relay logs
∙ Multiple IO threads
∙ Multiple SQL threads
∙ MySQL: --slave parallel workers for each
∙ Independent channels
∙ Error in one stops only one
Multi-Master: Troubleshooting
56
∙ Multiple sets of relay logs
∙ Multiple IO threads
∙ Multiple SQL threads
∙ MySQL: --slave parallel workers for each
∙ Independent channels
∙ Error in one stops only one
∙ No automatic conflict resolution
Multi-Master: Troubleshooting
56
Summary
∙ Error log file
Basic Tools
58
∙ Error log file
∙ On the slave
∙ SHOW SLAVE STATUS
∙ MySQL: Tables in Performance Schema
∙ System database mysql
Basic Tools
58
∙ Error log file
∙ On the slave
∙ On the master
∙ SHOW MASTER STATUS
∙ SHOW BINLOG EVENTS
∙ mysqlbinlog
Basic Tools
58
∙ Error log file
∙ On the slave
∙ On the master
∙ Percona Toolkit
Basic Tools
58
∙ Error log file
∙ On the slave
∙ On the master
∙ Percona Toolkit
∙ MySQL Utilities
Basic Tools
58
∙ Always available, requires setup
∙ Asynchronous
∙ Master
∙ Keeps all changes in the binary log
Two formats: ROW and STATEMENT
∙ Slave
∙ IO thread reads from the master into relay log
∙ SQL thread executes updates
Multiple SQL threads in 5.6+
Multiple channels/sources (masters) in 5.7+
∙ GTID in 5.6+
Replication Must Know
59
∙ Master
∙ Same as for standalone server
∙ More writes and consistency checks
Typical Issues
60
∙ Master
∙ Slave IO thread
∙ Common network issues
∙ mysql command line client for tests
Typical Issues
60
∙ Master
∙ Slave IO thread
∙ Slave SQL thread
∙ Regular query-related issues
∙ Regular storage engine issues
∙ Less execution threads than on master
Typical Issues
60
∙ Basic Techniques – troubleshooting
webinar
∙ Troubleshooting hardware resource usage
∙ Introduction into storage engine
troubleshoot...
∙ Percona Toolkit
∙ MySQL Utilities
∙ Book MySQL High Availability
∙ MySQL Replication Team blog
More Information
61
http://www.slideshare.net/SvetaSmirnova
https://twitter.com/svetsmirnova
https://github.com/svetasmirnova
Contact Information
62
∙ ... Case Study: .IE Continuous Restore ...
Marcelo Altmann - Percona, Mick Begley - IE Domain Registry
Tuesday 2:20PM-3:10PM @ Goldsmith 3
∙ A ... Walkthrough on pt-stalk
Marcelo Altmann - Percona, Marcos Albe - Percona
Wednesday 3:20PM-4:10PM @ Field Suite 2
∙ Percona XtraBackup Best Practices
Marcelo Altmann - Percona
Wednesday 4:30PM-4:55PM @ Sky Suite 2
∙ MySQL-MongoDB-Redis-Cassandra-HBase
Marcos Albe - Percona
Wednesday 4.55PM-5.20PM @ Sky Suite 2
Support Team at Percona Live
63
Thank you!

More Related Content

What's hot (20)

PDF
MariaDB ColumnStore
MariaDB plc
 
PDF
Understanding the architecture of MariaDB ColumnStore
MariaDB plc
 
PDF
[2018] MySQL 이중화 진화기
NHN FORWARD
 
PDF
MMUG18 - MySQL Failover and Orchestrator
Simon J Mudd
 
DOCX
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
NeoClova
 
PDF
MySQL Shell for DBAs
Frederic Descamps
 
PDF
MySQL Load Balancers - Maxscale, ProxySQL, HAProxy, MySQL Router & nginx - A ...
Severalnines
 
PPTX
Getting the most out of MariaDB MaxScale
MariaDB plc
 
PPTX
MariaDB Galera Cluster
Abdul Manaf
 
PDF
MariaDB MaxScale
MariaDB plc
 
PDF
The Complete MariaDB Server tutorial
Colin Charles
 
PDF
Chasing the optimizer
Mauro Pagano
 
PDF
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
Mydbops
 
PDF
Streaming Operational Data with MariaDB MaxScale
MariaDB plc
 
PDF
MySQL Multi-Source Replication for PL2016
Wagner Bianchi
 
PDF
MariaDB Administrator 교육
Sangmo Kim
 
PDF
MyRocks Deep Dive
Yoshinori Matsunobu
 
PDF
Differences between MariaDB 10.3 & MySQL 8.0
Colin Charles
 
PDF
Apache Iceberg: An Architectural Look Under the Covers
ScyllaDB
 
PDF
MySQL Advanced Administrator 2021 - 네오클로바
NeoClova
 
MariaDB ColumnStore
MariaDB plc
 
Understanding the architecture of MariaDB ColumnStore
MariaDB plc
 
[2018] MySQL 이중화 진화기
NHN FORWARD
 
MMUG18 - MySQL Failover and Orchestrator
Simon J Mudd
 
Keepalived+MaxScale+MariaDB_운영매뉴얼_1.0.docx
NeoClova
 
MySQL Shell for DBAs
Frederic Descamps
 
MySQL Load Balancers - Maxscale, ProxySQL, HAProxy, MySQL Router & nginx - A ...
Severalnines
 
Getting the most out of MariaDB MaxScale
MariaDB plc
 
MariaDB Galera Cluster
Abdul Manaf
 
MariaDB MaxScale
MariaDB plc
 
The Complete MariaDB Server tutorial
Colin Charles
 
Chasing the optimizer
Mauro Pagano
 
PostgreSQL 15 and its Major Features -(Aakash M - Mydbops) - Mydbops Opensour...
Mydbops
 
Streaming Operational Data with MariaDB MaxScale
MariaDB plc
 
MySQL Multi-Source Replication for PL2016
Wagner Bianchi
 
MariaDB Administrator 교육
Sangmo Kim
 
MyRocks Deep Dive
Yoshinori Matsunobu
 
Differences between MariaDB 10.3 & MySQL 8.0
Colin Charles
 
Apache Iceberg: An Architectural Look Under the Covers
ScyllaDB
 
MySQL Advanced Administrator 2021 - 네오클로바
NeoClova
 

Viewers also liked (20)

PDF
MySQL Group Replication
Manish Kumar
 
PPTX
Redis介绍
zhaolinjnu
 
PDF
MySQL Group Replication - HandsOn Tutorial
Kenny Gryp
 
PDF
MySQL InnoDB Cluster and Group Replication - OSI 2017 Bangalore
Sujatha Sivakumar
 
PDF
What you wanted to know about MySQL, but could not find using inernal instrum...
Sveta Smirnova
 
PDF
SQL Outer Joins for Fun and Profit
Karwin Software Solutions LLC
 
PPTX
Hbase源码初探
zhaolinjnu
 
PDF
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Kenny Gryp
 
PPTX
MySQL aio
zhaolinjnu
 
PDF
Load Data Fast!
Karwin Software Solutions LLC
 
PDF
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Sveta Smirnova
 
PDF
MySQL InnoDB Cluster - Group Replication
Frederic Descamps
 
PPT
Mysql high availability and scalability
yin gong
 
PDF
Extensible Data Modeling
Karwin Software Solutions LLC
 
PDF
MySQL Best Practices - OTN LAD Tour
Ronald Bradford
 
PDF
Capturing, Analyzing and Optimizing MySQL
Ronald Bradford
 
PDF
Multi Source Replication With MySQL 5.7 @ Verisure
Kenny Gryp
 
PDF
MySQL Group Replication
Kenny Gryp
 
PPT
淘宝数据库架构演进历程
zhaolinjnu
 
PDF
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
Sveta Smirnova
 
MySQL Group Replication
Manish Kumar
 
Redis介绍
zhaolinjnu
 
MySQL Group Replication - HandsOn Tutorial
Kenny Gryp
 
MySQL InnoDB Cluster and Group Replication - OSI 2017 Bangalore
Sujatha Sivakumar
 
What you wanted to know about MySQL, but could not find using inernal instrum...
Sveta Smirnova
 
SQL Outer Joins for Fun and Profit
Karwin Software Solutions LLC
 
Hbase源码初探
zhaolinjnu
 
Percona XtraDB Cluster vs Galera Cluster vs MySQL Group Replication
Kenny Gryp
 
MySQL aio
zhaolinjnu
 
Мониторинг и отладка MySQL: максимум информации при минимальных потерях
Sveta Smirnova
 
MySQL InnoDB Cluster - Group Replication
Frederic Descamps
 
Mysql high availability and scalability
yin gong
 
Extensible Data Modeling
Karwin Software Solutions LLC
 
MySQL Best Practices - OTN LAD Tour
Ronald Bradford
 
Capturing, Analyzing and Optimizing MySQL
Ronald Bradford
 
Multi Source Replication With MySQL 5.7 @ Verisure
Kenny Gryp
 
MySQL Group Replication
Kenny Gryp
 
淘宝数据库架构演进历程
zhaolinjnu
 
MySQL Storage Engines - which do you use? TokuDB? MyRocks? InnoDB?
Sveta Smirnova
 
Ad

Similar to Why MySQL Replication Fails, and How to Get it Back (20)

PDF
Lessons Learned: Troubleshooting Replication
Sveta Smirnova
 
PDF
MySQL Replication Troubleshooting for Oracle DBAs
Sveta Smirnova
 
PDF
MySQL Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
PDF
MySQL/MariaDB Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
PDF
MySQL Parallel Replication: inventory, use-cases and limitations
Jean-François Gagné
 
PDF
MySQL Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
PDF
MySQL highav Availability
Baruch Osoveskiy
 
PPT
Download presentation
Rachit Gaur
 
PPT
Download presentation531
Indra Pratap
 
PDF
2012 replication
sqlhjalp
 
PDF
2012 scale replication
sqlhjalp
 
PDF
MySQL 5.6 Replication Webinar
Mark Swarbrick
 
PDF
20190817 coscup-oracle my sql innodb cluster sharing
Ivan Ma
 
PPT
Download presentation
webhostingguy
 
PPTX
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
PDF
MySQL Replication
Mark Swarbrick
 
PDF
Buytaert kris my_sql-pacemaker
kuchinskaya
 
PDF
MySQL Group Replication - Ready For Production? (2018-04)
Kenny Gryp
 
PPT
Mysql replication @ gnugroup
Jayant Chutke
 
PDF
MySQL User Camp: Multi-threaded Slaves
Shivji Kumar Jha
 
Lessons Learned: Troubleshooting Replication
Sveta Smirnova
 
MySQL Replication Troubleshooting for Oracle DBAs
Sveta Smirnova
 
MySQL Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
MySQL/MariaDB Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
MySQL Parallel Replication: inventory, use-cases and limitations
Jean-François Gagné
 
MySQL Parallel Replication: inventory, use-case and limitations
Jean-François Gagné
 
MySQL highav Availability
Baruch Osoveskiy
 
Download presentation
Rachit Gaur
 
Download presentation531
Indra Pratap
 
2012 replication
sqlhjalp
 
2012 scale replication
sqlhjalp
 
MySQL 5.6 Replication Webinar
Mark Swarbrick
 
20190817 coscup-oracle my sql innodb cluster sharing
Ivan Ma
 
Download presentation
webhostingguy
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
Ontico
 
MySQL Replication
Mark Swarbrick
 
Buytaert kris my_sql-pacemaker
kuchinskaya
 
MySQL Group Replication - Ready For Production? (2018-04)
Kenny Gryp
 
Mysql replication @ gnugroup
Jayant Chutke
 
MySQL User Camp: Multi-threaded Slaves
Shivji Kumar Jha
 
Ad

More from Sveta Smirnova (20)

PDF
War Story: Removing Offensive Language from Percona Toolkit
Sveta Smirnova
 
PDF
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
Sveta Smirnova
 
PDF
Database in Kubernetes: Diagnostics and Monitoring
Sveta Smirnova
 
PDF
MySQL Database Monitoring: Must, Good and Nice to Have
Sveta Smirnova
 
PDF
MySQL Cookbook: Recipes for Developers
Sveta Smirnova
 
PDF
MySQL Performance for DevOps
Sveta Smirnova
 
PDF
MySQL Test Framework для поддержки клиентов и верификации багов
Sveta Smirnova
 
PDF
MySQL Cookbook: Recipes for Your Business
Sveta Smirnova
 
PDF
Introduction into MySQL Query Tuning for Dev[Op]s
Sveta Smirnova
 
PDF
Производительность MySQL для DevOps
Sveta Smirnova
 
PDF
MySQL Performance for DevOps
Sveta Smirnova
 
PDF
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
Sveta Smirnova
 
PDF
How to migrate from MySQL to MariaDB without tears
Sveta Smirnova
 
PDF
Modern solutions for modern database load: improvements in the latest MariaDB...
Sveta Smirnova
 
PDF
How Safe is Asynchronous Master-Master Setup?
Sveta Smirnova
 
PDF
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Sveta Smirnova
 
PDF
How to Avoid Pitfalls in Schema Upgrade with Galera
Sveta Smirnova
 
PDF
How Safe is Asynchronous Master-Master Setup?
Sveta Smirnova
 
PDF
Introduction to MySQL Query Tuning for Dev[Op]s
Sveta Smirnova
 
PDF
Billion Goods in Few Categories: How Histograms Save a Life?
Sveta Smirnova
 
War Story: Removing Offensive Language from Percona Toolkit
Sveta Smirnova
 
MySQL 2024: Зачем переходить на MySQL 8, если в 5.х всё устраивает?
Sveta Smirnova
 
Database in Kubernetes: Diagnostics and Monitoring
Sveta Smirnova
 
MySQL Database Monitoring: Must, Good and Nice to Have
Sveta Smirnova
 
MySQL Cookbook: Recipes for Developers
Sveta Smirnova
 
MySQL Performance for DevOps
Sveta Smirnova
 
MySQL Test Framework для поддержки клиентов и верификации багов
Sveta Smirnova
 
MySQL Cookbook: Recipes for Your Business
Sveta Smirnova
 
Introduction into MySQL Query Tuning for Dev[Op]s
Sveta Smirnova
 
Производительность MySQL для DevOps
Sveta Smirnova
 
MySQL Performance for DevOps
Sveta Smirnova
 
How to Avoid Pitfalls in Schema Upgrade with Percona XtraDB Cluster
Sveta Smirnova
 
How to migrate from MySQL to MariaDB without tears
Sveta Smirnova
 
Modern solutions for modern database load: improvements in the latest MariaDB...
Sveta Smirnova
 
How Safe is Asynchronous Master-Master Setup?
Sveta Smirnova
 
Современному хайлоду - современные решения: MySQL 8.0 и улучшения Percona
Sveta Smirnova
 
How to Avoid Pitfalls in Schema Upgrade with Galera
Sveta Smirnova
 
How Safe is Asynchronous Master-Master Setup?
Sveta Smirnova
 
Introduction to MySQL Query Tuning for Dev[Op]s
Sveta Smirnova
 
Billion Goods in Few Categories: How Histograms Save a Life?
Sveta Smirnova
 

Recently uploaded (20)

PPTX
Mistakes to Avoid When Selecting Policy Management Software
Insurance Tech Services
 
PDF
Code Once; Run Everywhere - A Beginner’s Journey with React Native
Hasitha Walpola
 
PPTX
Cubase Pro Crack 2025 – Free Download Full Version with Activation Key
HyperPc soft
 
PPTX
WYSIWYG Web Builder Crack 2025 – Free Download Full Version with License Key
HyperPc soft
 
PDF
LPS25 - Operationalizing MLOps in GEP - Terradue.pdf
terradue
 
PPTX
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 
PDF
Difference Between Kubernetes and Docker .pdf
Kindlebit Solutions
 
PDF
>Wondershare Filmora Crack Free Download 2025
utfefguu
 
PDF
Capcut Pro Crack For PC Latest Version {Fully Unlocked} 2025
hashhshs786
 
PPTX
CONCEPT OF PROGRAMMING in language .pptx
tamim41
 
PPTX
Iobit Driver Booster Pro 12 Crack Free Download
chaudhryakashoo065
 
PDF
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
PDF
WholeClear Split vCard Software for Split large vCard file
markwillsonmw004
 
PPTX
computer forensics encase emager app exp6 1.pptx
ssuser343e92
 
PDF
From Chaos to Clarity: Mastering Analytics Governance in the Modern Enterprise
Wiiisdom
 
PDF
IDM Crack with Internet Download Manager 6.42 Build 41
utfefguu
 
PPTX
ManageIQ - Sprint 264 Review - Slide Deck
ManageIQ
 
PDF
Continouous failure - Why do we make our lives hard?
Papp Krisztián
 
PPTX
IObit Uninstaller Pro 14.3.1.8 Crack Free Download 2025
sdfger qwerty
 
PPTX
ERP - FICO Presentation BY BSL BOKARO STEEL LIMITED.pptx
ravisranjan
 
Mistakes to Avoid When Selecting Policy Management Software
Insurance Tech Services
 
Code Once; Run Everywhere - A Beginner’s Journey with React Native
Hasitha Walpola
 
Cubase Pro Crack 2025 – Free Download Full Version with Activation Key
HyperPc soft
 
WYSIWYG Web Builder Crack 2025 – Free Download Full Version with License Key
HyperPc soft
 
LPS25 - Operationalizing MLOps in GEP - Terradue.pdf
terradue
 
MiniTool Power Data Recovery Full Crack Latest 2025
muhammadgurbazkhan
 
Difference Between Kubernetes and Docker .pdf
Kindlebit Solutions
 
>Wondershare Filmora Crack Free Download 2025
utfefguu
 
Capcut Pro Crack For PC Latest Version {Fully Unlocked} 2025
hashhshs786
 
CONCEPT OF PROGRAMMING in language .pptx
tamim41
 
Iobit Driver Booster Pro 12 Crack Free Download
chaudhryakashoo065
 
Understanding the Need for Systemic Change in Open Source Through Intersectio...
Imma Valls Bernaus
 
WholeClear Split vCard Software for Split large vCard file
markwillsonmw004
 
computer forensics encase emager app exp6 1.pptx
ssuser343e92
 
From Chaos to Clarity: Mastering Analytics Governance in the Modern Enterprise
Wiiisdom
 
IDM Crack with Internet Download Manager 6.42 Build 41
utfefguu
 
ManageIQ - Sprint 264 Review - Slide Deck
ManageIQ
 
Continouous failure - Why do we make our lives hard?
Papp Krisztián
 
IObit Uninstaller Pro 14.3.1.8 Crack Free Download 2025
sdfger qwerty
 
ERP - FICO Presentation BY BSL BOKARO STEEL LIMITED.pptx
ravisranjan
 

Why MySQL Replication Fails, and How to Get it Back

  • 1. Why MySQL Replication Fails, and How to Get it Back September, 26, 2017 Sveta Smirnova
  • 2. ∙ MySQL Support engineer ∙ Author of ∙ MySQL Troubleshooting ∙ JSON UDF functions ∙ FILTER clause for MySQL ∙ Speaker ∙ Percona Live, OOW, Fosdem, DevConf, HighLoad... Sveta Smirnova 2
  • 4. ∙ Exists since very first versions Replication in MySQL 4
  • 5. ∙ Exists since very first versions ∙ Easy to use Replication in MySQL 4
  • 6. ∙ Exists since very first versions ∙ Easy to use ∙ Minimal setup Replication in MySQL 4
  • 7. ∙ Master ∙ --log-bin ∙ --server-id ∙ GRANT REPLICATION SLAVE ON *.* ... Turn Replication On 5
  • 8. ∙ Master ∙ --log-bin ∙ --server-id ∙ GRANT REPLICATION SLAVE ON *.* ... ∙ Slave ∙ --server-id ∙ CHANGE MASTER ... ∙ START SLAVE Turn Replication On 5
  • 15. Slave Lags from the Master 12
  • 16. Increased Resource Usage on Master 13
  • 17. Not a Full List! 14
  • 20. Master Slave ← Initiates ← Requests a packet Asynchronous 16
  • 21. Master Sends the packet → Slave ← Initiates ← Requests a packet Asynchronous 16
  • 22. Master Sends the packet → Slave ← Initiates ← Requests a packet ... ? Asynchronous 16
  • 23. ∙ Network error ∙ Authorization Did Slave Recieve Data? 17
  • 24. Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: root Master_Port: 13000 Connect_Retry: 60 Master_Log_File: master-bin.000002 Read_Master_Log_Pos: 63810611 Relay_Log_File: [email protected] Relay_Log_Pos: 1156 Relay_Master_Log_File: master-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 1032 Last_Error: Could not execute Update_rows event on... Skip_Counter: 0 Exec_Master_Log_Pos: 989 Relay_Log_Space: 63814652 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: NULL Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 1032 Last_SQL_Error: Could not execute Update_rows event on... Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: d08c509e-6857-11e6-8872-30b5c2208a0f Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Master_Retry_Count: 10 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: 160823 15:11:21 Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: master-1 | Master_TLS_Version: ∙ IO thread Configuration ∙ SQL thread Configuration ∙ IO thread State ∙ SQL thread State ∙ Errors ∙ Only last one ∙ All are in the error log Tool #1: SHOW SLAVE STATUS 18
  • 25. Slave_IO_Running: Connecting Slave_SQL_Running: Yes ... Last_IO_Errno: 1045 Last_IO_Error: error connecting to master ’[email protected]:13000’ - Last_SQL_Errno: 0 Last_SQL_Error: ... Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: 160824 03:18:36 Last_SQL_Error_Timestamp: Network Errors 19
  • 26. mysql> select * from performance_schema.replication_connection_statusG *************************** 1. row *************************** CHANNEL_NAME: GROUP_NAME: SOURCE_UUID: THREAD_ID: NULL SERVICE_STATE: CONNECTING COUNT_RECEIVED_HEARTBEATS: 0 LAST_HEARTBEAT_TIMESTAMP: 0000-00-00 00:00:00 RECEIVED_TRANSACTION_SET: LAST_ERROR_NUMBER: 1045 LAST_ERROR_MESSAGE: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 4 LAST_ERROR_TIMESTAMP: 2016-08-24 03:21:36 1 row in set (0,01 sec) #2: connection status in Performance Schema 20
  • 27. 2016-08-24T00:18:36.077384Z 3 [ERROR] Slave I/O for channel ’’: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 1, Error_code: 1045 2016-08-24T00:19:36.299011Z 3 [ERROR] Slave I/O for channel ’’: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 2, Error_code: 1045 2016-08-24T00:20:36.485315Z 3 [ERROR] Slave I/O for channel ’’: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 3, Error_code: 1045 2016-08-24T00:21:36.677915Z 3 [ERROR] Slave I/O for channel ’’: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 4, Error_code: 1045 2016-08-24T00:22:36.872066Z 3 [ERROR] Slave I/O for channel ’’: error connecting to master ’[email protected]:13000’ - retry-time: 60 retries: 5, Error_code: 1045 #3: Error Log File 21
  • 28. $ perror 1045 MySQL error code 1045 (ER_ACCESS_DENIED_ERROR): Access denied for user ’%-.48s’@’%-.64s’ (using password: %s) #4: perror 22
  • 29. ∙ On the slave $ mysql -h127.0.0.1 -P13000 -uslave_user -pslave_password Warning: Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user ’slave_user’@’localhost’ (using password: YES #5: MySQL Command Line Client 23
  • 30. ∙ On the slave ∙ On the master mysql> SHOW GRANTS; +-----------------------------------------+ | Grants for slave_user@% | +-----------------------------------------+ | GRANT SELECT ON *.* TO ’slave_user’@’%’ | +-----------------------------------------+ 1 row in set (0.00 sec) #5: MySQL Command Line Client 23
  • 31. ∙ On the slave ∙ On the master ∙ Fix privileges on master GRANT REPLICATION SLAVE ON *.* TO ’slave user’@’%’ #5: MySQL Command Line Client 23
  • 32. ∙ On the slave ∙ On the master ∙ Fix privileges on master ∙ Restart replication #5: MySQL Command Line Client 23
  • 34. Master Slave ← Initiates ← Requests a packet Semisynchrous plugin 24
  • 35. Master Sends the packet → Slave ← Initiates ← Requests a packet Semisynchrous plugin 24
  • 36. Master Sends the packet → Waits ”Ack” Slave ← Initiates ← Requests a packet Semisynchrous plugin 24
  • 37. Master Sends the packet → Waits ”Ack” Slave ← Initiates ← Requests a packet ← Sends ”Ack” Semisynchrous plugin 24
  • 38. ∙ Writes on master are slower Semisynchrous: Troubleshooting 25
  • 39. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? Semisynchrous: Troubleshooting 25
  • 40. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ Before 5.7: from single slave Semisynchrous: Troubleshooting 25
  • 41. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ Before 5.7: from single slave ∙ Now in MySQL: rpl semi sync master wait for slave count Semisynchrous: Troubleshooting 25
  • 42. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ Before 5.7: from single slave ∙ Now in MySQL: rpl semi sync master wait for slave count ∙ Won’t wait others Semisynchrous: Troubleshooting 25
  • 43. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ What happens in case of timeout? Semisynchrous: Troubleshooting 25
  • 44. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ What happens in case of timeout? ∙ Replication becomes asynchronous Semisynchrous: Troubleshooting 25
  • 45. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ What happens in case of timeout? ∙ What does ”Ack” mean? Semisynchrous: Troubleshooting 25
  • 46. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ What happens in case of timeout? ∙ What does ”Ack” mean? ∙ Event written into relay log Semisynchrous: Troubleshooting 25
  • 47. ∙ Writes on master are slower ∙ How many ”Ack”-s master waits? ∙ What happens in case of timeout? ∙ What does ”Ack” mean? ∙ Event written into relay log ∙ It is unknown if event applied Semisynchrous: Troubleshooting 25
  • 48. IO thread Reads from the master SQL thread Two Kinds of Slave Threads 26
  • 49. IO thread Reads from the master Stores in the relay log SQL thread Two Kinds of Slave Threads 26
  • 50. IO thread Reads from the master Stores in the relay log SQL thread ← Reads from relay log Two Kinds of Slave Threads 26
  • 51. IO thread Reads from the master Stores in the relay log SQL thread ← Reads from relay log Executes Two Kinds of Slave Threads 26
  • 52. ∙ Easier for troubleshooting Single SQL Thread 27
  • 53. ∙ Easier for troubleshooting ∙ Slower than master ∙ High parallel load Single SQL Thread 27
  • 54. Writes on the Master 28
  • 55. Writes on the Slave: Single SQL Thread 29
  • 57. ∙ MySQL: --slave parallel workers ∙ MySQL: --slave parallel type=DATABASE | LOGICAL CLOCK ∙ MySQL 8.0.1+: SET @@GLOBAL.binlog transaction dependency tracking = WRITESET | WRITESET SESSION | COMMIT ORDER; Performance Tuning 31
  • 58. ∙ MariaDB: --slave parallel threads ∙ MariaDB: --slave parallel max queued ∙ MariaDB: --slave domain parallel threads ∙ MariaDB: --slave parallel mode=optimistic | conservative | aggressive | minimal | none Performance Tuning 31
  • 59. mysql> select WORKER_ID, SERVICE_STATE, LAST_SEEN_TRANSACTION, LAST_ERROR_NUMBER, -> LAST_ERROR_MESSAGE from performance_schema.replication_applier_status_by_workerG *************************** 1. row *************************** WORKER_ID: 1 SERVICE_STATE: OFF LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4988 LAST_ERROR_NUMBER: 0 LAST_ERROR_MESSAGE: *************************** 2. row *************************** WORKER_ID: 3 SERVICE_STATE: OFF LAST_SEEN_TRANSACTION: d318bc17-66dc-11e6-a471-30b5c2208a0f:4986 LAST_ERROR_NUMBER: 1032 LAST_ERROR_MESSAGE: Worker 2 failed executing transaction... #6: Error of One Thread Stops All 32
  • 60. MariaDB [test]> select id, command, time, state from information_schema.processlist -> where user=’system user’; +----+---------+------+------------------------------------------------------------------+ | id | command | time | state | +----+---------+------+------------------------------------------------------------------+ | 25 | Connect | 4738 | Waiting for master to send event | | 24 | Connect | 5096 | Slave has read all relay log; waiting for the slave I/O thread t | | 23 | Connect | 0 | Waiting for work from SQL thread | | 22 | Connect | 0 | Unlocking tables | | 21 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 20 | Connect | 0 | Waiting for prior transaction to start commit before starting ne | | 19 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 18 | Connect | 0 | Update_rows_log_event::ha_update_row(-1) | | 17 | Connect | 0 | Update_rows_log_event::find_row(-1) ... #6: Error of One Thread Stops All 32
  • 61. ∙ Different data ∙ Slave cannot apply event from relay log Which Kind of Errors? 33
  • 62. ∙ Different data ∙ Slave cannot apply event from relay log ∙ Different errors on master and slave ∙ Triggers ∙ Transactional and non-transactional tables in the same transaction Which Kind of Errors? 33
  • 63. ∙ Did table change outside of the replication? ∙ How? ∙ Can it cause conflict with changes on the master? Different Data on Master and Slave 34
  • 64. ∙ Did table change outside of the replication? ∙ Are table structures identical? ∙ Percona Toolkit pt-table-checksum, pt-table-sync ∙ MySQL Utilities mysqlrplsync, mysqldbcompare, mysqldiff Different Data on Master and Slave 34
  • 65. ∙ Did table change outside of the replication? ∙ Are table structures identical? ∙ Are changes in the correct order? ∙ mysqlbinlog ∙ Application logic on the master Different Data on Master and Slave 34
  • 66. Master Recieves a change Storage Engine Logical 35
  • 67. Master Recieves a change Sends to SE → Storage Engine Logical 35
  • 68. Master Recieves a change Sends to SE → Storage Engine Writes into table Logical 35
  • 69. Master Recieves a change Sends to SE → Storage Engine Writes into table ← Returns control Logical 35
  • 70. Master Recieves a change Sends to SE → Writes into binary log Storage Engine Writes into table ← Returns control Logical 35
  • 71. Master Recieves a change Sends to SE → Writes into binary log Synchronizes → Storage Engine Writes into table ← Returns control ← Synchronizes Logical 35
  • 72. ∙ More writes ∙ RBR: --binlog row image Master Performance 36
  • 73. ∙ More writes ∙ RBR: --binlog row image ∙ --binlog cache size Watch Binlog cache disk use Master Performance 36
  • 74. ∙ More writes ∙ RBR: --binlog row image ∙ --binlog cache size Watch Binlog cache disk use ∙ --binlog stmt cache size Watch Binlog stmt cache disk use Master Performance 36
  • 75. ∙ More writes ∙ Synchronization ∙ --binlog sync ∙ Do not disable! ∙ You may set it greater than 1 Master Performance 36
  • 76. ∙ Binary log lifetime ∙ --expire log days Master Behavior 37
  • 77. ∙ Binary log lifetime ∙ Synchronization ∙ SBR is not safe with READ COMMITTED and READ UNCOMMITTED Master Behavior 37
  • 78. ∙ Binary log lifetime ∙ Synchronization ∙ Order of records in the binary log ∙ Non-deterministic events and SBR Master Behavior 37
  • 79. Client Binary log Statement-Based Binary Log Format 38
  • 80. Client INSERT INTO ... → Binary log Statement-Based Binary Log Format 38
  • 81. Client INSERT INTO ... → Binary log SET TIMESTAMP... Statement-Based Binary Log Format 38
  • 82. Client INSERT INTO ... → Binary log SET TIMESTAMP... SET sql mode... Statement-Based Binary Log Format 38
  • 83. Client INSERT INTO ... → Binary log SET TIMESTAMP... SET sql mode... INSERT INTO ... Statement-Based Binary Log Format 38
  • 84. ∙ Exists since very first versions SBR: Strong Sides 39
  • 85. ∙ Exists since very first versions ∙ Table definitions on master and slave can significantly vary SBR: Strong Sides 39
  • 86. ∙ Exists since very first versions ∙ Table definitions on master and slave can significantly vary ∙ Usually less writes ∙ There are exceptions! SBR: Strong Sides 39
  • 87. ∙ Exists since very first versions ∙ Table definitions on master and slave can significantly vary ∙ Usually less writes ∙ Human readable SBR: Strong Sides 39
  • 88. ∙ Exists since very first versions ∙ Table definitions on master and slave can significantly vary ∙ Usually less writes ∙ Human readable ∙ Easy to troubleshoot SBR: Strong Sides 39
  • 89. mysql> SHOW BINLOG EVENTS IN ’mysql-bin.000316’ FROM 422; +------------------+-----+------------+------------+-------------+---------------------------------+ | Log_name | Pos | Event_type | Server_id | End_log_pos | Info | +------------------+-----+------------+------------+-------------+---------------------------------+ | mysql-bin.000316 | 422 | Query | 1456667904 | 509 | BEGIN | | mysql-bin.000316 | 509 | Query | 1456667904 | 609 | use ‘PgDay‘; update ai set f1=1 | | mysql-bin.000316 | 609 | Xid | 1456667904 | 640 | COMMIT /* xid=60328 */ | +------------------+-----+------------+------------+-------------+---------------------------------+ 3 rows in set (0,12 sec) #7: SHOW BINLOG EVENTS 40
  • 90. ∙ Not all queries are safe ∙ Non-deterministic functions ∙ MySQL extentions ∙ Triggers ∙ Mix with non-transactional tables ∙ Temporary tables SBR: Weak Sides 41
  • 91. ∙ Not all queries are safe ∙ Order of events matter! ∙ Row-based locks SBR: Weak Sides 41
  • 92. ∙ Not all queries are safe ∙ Order of events matter! ∙ Row-based locks ∙ Triggers SET GLOBAL slave skip counter – No GTIDs! Skip transaction – GTIDs Synchronize tables! SBR: Weak Sides 41
  • 93. Client Binary log Row-Based Binary Log Format 42
  • 94. Client UPDATE ... → Binary log Row-Based Binary Log Format 42
  • 95. Client UPDATE ... → Binary log SET TIMESTAMP... Row-Based Binary Log Format 42
  • 96. Client UPDATE ... → Binary log SET TIMESTAMP... SET sql mode... Row-Based Binary Log Format 42
  • 97. Client UPDATE ... → Binary log SET TIMESTAMP... SET sql mode... Row before changes Row-Based Binary Log Format 42
  • 98. Client UPDATE ... → Binary log SET TIMESTAMP... SET sql mode... Row before changes Row with changes Row-Based Binary Log Format 42
  • 99. ∙ Safe ∙ You do not need to care about Order of events Triggers Functions Which queries you send to master RBR: Strong Sides 43
  • 100. ∙ Sensitive for table structures ∙ More writes ∙ --binlog row image=FULL | MINIMAL | NOBLOB ∙ Harder to read RBR: Weak Sidex 44
  • 101. $ mysqlbinlog ./mysqld.1/data/master-bin.000001 --start-position=989 --stop-position=1213 ... # at 1167 #160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b Update_rows: table id 109 flags: STMT_END_F BINLOG ’ v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ== v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw== ’/*!*/; ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/; ... #8: mysqlbinlog 45
  • 102. $ mysqlbinlog -v ./mysqld.1/data/master-bin.000001 --start-position=989 --stop-position=1213 ... # at 1167 #160822 14:15:11 server id 1 end_log_pos 1213 CRC32 0x1f346c6b Update_rows: table id 109 flags: STMT_END_F BINLOG ’ v966VxMBAAAAKwAAAI8EAAAAAG0AAAAAAAEAAm0yAAJ0MQABAwABY2HOoQ== v966Vx8BAAAALgAAAL0EAAAAAG0AAAAAAAEAAgAB///+BQAAAP4GAAAAa2w0Hw== ’/*!*/; ### UPDATE ‘m2‘.‘t1‘ ### WHERE ### @1=5 ### SET ### @1=6 ROLLBACK /* added by mysqlbinlog */ /*!*/; SET @@SESSION.GTID_NEXT= ’AUTOMATIC’ /* added by mysqlbinlog */ /*!*/; #8: mysqlbinlog 46
  • 103. ∙ You must specify ∙ Name of the master’s binary log file ∙ Position Position-Based 47
  • 104. ∙ You must specify ∙ Name of the master’s binary log file ∙ Position ∙ From the troubleshooting point of view ∙ Event executes if on the current position Position-Based 47
  • 105. ∙ You must specify ∙ Name of the master’s binary log file ∙ Position ∙ From the troubleshooting point of view ∙ Event executes if on the current position ∙ Easy to skip Position-Based 47
  • 106. ∙ You must specify ∙ Name of the master’s binary log file ∙ Position ∙ From the troubleshooting point of view ∙ Event executes if on the current position ∙ Easy to skip ∙ Easy to move position backward Position-Based 47
  • 107. ∙ You must specify ∙ Name of the master’s binary log file ∙ Position ∙ From the troubleshooting point of view ∙ Event executes if on the current position ∙ Easy to skip ∙ Easy to move position backward ∙ No conflict resolution Position-Based 47
  • 108. ∙ Each transaction has unique number: GTID Global Transaction Identifiers (GTID) 48
  • 109. ∙ Each transaction has unique number: GTID ∙ MySQL: AUTO POSITION=1 Global Transaction Identifiers (GTID) 48
  • 110. ∙ Each transaction has unique number: GTID ∙ MySQL: AUTO POSITION=1 ∙ MariaDB: master use gtid = { slave pos | current pos } Global Transaction Identifiers (GTID) 48
  • 111. ∙ Each transaction has unique number: GTID ∙ MySQL: AUTO POSITION=1 ∙ MariaDB: master use gtid = { slave pos | current pos } ∙ No need to specify binary log and position Global Transaction Identifiers (GTID) 48
  • 112. ∙ Each transaction has unique number: GTID ∙ MySQL: AUTO POSITION=1 ∙ MariaDB: master use gtid = { slave pos | current pos } ∙ No need to specify binary log and position ∙ Hard to skip erroneous event Global Transaction Identifiers (GTID) 48
  • 113. sveta@thinkie> mysqlslavetrx --gtid-set=fb776095-8474-11e5-ad41-30b5c2208a0f:3 --slaves=root:@127.0.0.1:13001 WARNING: Using a password on the command line interface can be insecure. # # GTID set to be skipped for each server: # - 127.0.0.1@13001: fb776095-8474-11e5-ad41-30b5c2208a0f:3 # # Injecting empty transactions for ’127.0.0.1:13001’... # #...done. # #9: mysqlslavetrx 49
  • 115. ∙ Same specifics and methods Complicated Setups 51
  • 116. ∙ Same specifics and methods ∙ Multiply complexity on number of channels Complicated Setups 51
  • 117. ∙ Same specifics and methods ∙ Multiply complexity on number of channels ∙ Control writes ∙ What ∙ On which server Complicated Setups 51
  • 118. Master ∙ Binary log ∙ Binlog Dump Slave ∙ Relay log ∙ IO thread ∙ SQL thread Master and Slave 52
  • 119. Slave 1 ∙ Relay log ∙ IO thread ∙ SQL thread Master ∙ Binary log ∙ Binlog Dump ∙ Binlog Dump Slave 2 ∙ Relay log ∙ IO thread ∙ SQL thread Master and Two Slaves 53
  • 120. Master 1 ∙ Binary log ∙ Binlog Dump ∙ Relay log ∙ IO thread ∙ SQL thread Master 2 ∙ Relay log ∙ IO thread ∙ SQL thread ∙ Binary log ∙ Binlog Dump Circular 54
  • 121. Master 1 ∙ Binary log ∙ Binlog Dump Slave ∙ Relay log ∙ IO thread ∙ SQL thread ∙ Relay log ∙ IO thread ∙ SQL thread Master 2 ∙ Binary log ∙ Binlog Dump Multiple Masters (Multi-channel): 5.7+ 55
  • 122. ∙ Multiple sets of relay logs ∙ Multiple IO threads ∙ Multiple SQL threads ∙ MySQL: --slave parallel workers for each Multi-Master: Troubleshooting 56
  • 123. ∙ Multiple sets of relay logs ∙ Multiple IO threads ∙ Multiple SQL threads ∙ MySQL: --slave parallel workers for each ∙ Independent channels Multi-Master: Troubleshooting 56
  • 124. ∙ Multiple sets of relay logs ∙ Multiple IO threads ∙ Multiple SQL threads ∙ MySQL: --slave parallel workers for each ∙ Independent channels ∙ Error in one stops only one Multi-Master: Troubleshooting 56
  • 125. ∙ Multiple sets of relay logs ∙ Multiple IO threads ∙ Multiple SQL threads ∙ MySQL: --slave parallel workers for each ∙ Independent channels ∙ Error in one stops only one ∙ No automatic conflict resolution Multi-Master: Troubleshooting 56
  • 127. ∙ Error log file Basic Tools 58
  • 128. ∙ Error log file ∙ On the slave ∙ SHOW SLAVE STATUS ∙ MySQL: Tables in Performance Schema ∙ System database mysql Basic Tools 58
  • 129. ∙ Error log file ∙ On the slave ∙ On the master ∙ SHOW MASTER STATUS ∙ SHOW BINLOG EVENTS ∙ mysqlbinlog Basic Tools 58
  • 130. ∙ Error log file ∙ On the slave ∙ On the master ∙ Percona Toolkit Basic Tools 58
  • 131. ∙ Error log file ∙ On the slave ∙ On the master ∙ Percona Toolkit ∙ MySQL Utilities Basic Tools 58
  • 132. ∙ Always available, requires setup ∙ Asynchronous ∙ Master ∙ Keeps all changes in the binary log Two formats: ROW and STATEMENT ∙ Slave ∙ IO thread reads from the master into relay log ∙ SQL thread executes updates Multiple SQL threads in 5.6+ Multiple channels/sources (masters) in 5.7+ ∙ GTID in 5.6+ Replication Must Know 59
  • 133. ∙ Master ∙ Same as for standalone server ∙ More writes and consistency checks Typical Issues 60
  • 134. ∙ Master ∙ Slave IO thread ∙ Common network issues ∙ mysql command line client for tests Typical Issues 60
  • 135. ∙ Master ∙ Slave IO thread ∙ Slave SQL thread ∙ Regular query-related issues ∙ Regular storage engine issues ∙ Less execution threads than on master Typical Issues 60
  • 136. ∙ Basic Techniques – troubleshooting webinar ∙ Troubleshooting hardware resource usage ∙ Introduction into storage engine troubleshoot... ∙ Percona Toolkit ∙ MySQL Utilities ∙ Book MySQL High Availability ∙ MySQL Replication Team blog More Information 61
  • 138. ∙ ... Case Study: .IE Continuous Restore ... Marcelo Altmann - Percona, Mick Begley - IE Domain Registry Tuesday 2:20PM-3:10PM @ Goldsmith 3 ∙ A ... Walkthrough on pt-stalk Marcelo Altmann - Percona, Marcos Albe - Percona Wednesday 3:20PM-4:10PM @ Field Suite 2 ∙ Percona XtraBackup Best Practices Marcelo Altmann - Percona Wednesday 4:30PM-4:55PM @ Sky Suite 2 ∙ MySQL-MongoDB-Redis-Cassandra-HBase Marcos Albe - Percona Wednesday 4.55PM-5.20PM @ Sky Suite 2 Support Team at Percona Live 63