Mysql 5.5 and 5.6 replication

44
©Continuent 2012. What's new in MySQL 5.5 and 5.6 replication Giuseppe Maxia Continuent, Inc 1 Tuesday, April 17, 12

description

What's new in MySQL 5.5

Transcript of Mysql 5.5 and 5.6 replication

Page 1: Mysql 5.5 and 5.6 replication

©Continuent 2012.

What's new in MySQL 5.5 and 5.6

replication

Giuseppe MaxiaContinuent, Inc

1Tuesday, April 17, 12

Page 2: Mysql 5.5 and 5.6 replication

©Continuent 2012

AGENDA

• 5.5

• semi-synchronous replication

• 5.6

• delayed replication

• server UUID

• crash-safe slave

• multi-thread slave

• Global transaction identi!ers

2

2Tuesday, April 17, 12

Page 3: Mysql 5.5 and 5.6 replication

semi-synch replicationAGEN

DA

3Tuesday, April 17, 12

Page 4: Mysql 5.5 and 5.6 replication

semi-synchronous replication

• Available in 5.5 and higher

• Makes sure that at least one slave has copied the data.

• Increases reliability

4Tuesday, April 17, 12

Page 5: Mysql 5.5 and 5.6 replication

5

transaction with regular replication

clientmaster

slave

commit

binary log

execute

returns to client

replication

1

2

34

55Tuesday, April 17, 12

Page 6: Mysql 5.5 and 5.6 replication

6

transaction with semi-

synchronous replication

clientmaster

slave

commit

binary log

execute

returns to client

sends transaction

to slave

gets acknowledgement

relay log

1

2

3

4 5

6

7

6Tuesday, April 17, 12

Page 7: Mysql 5.5 and 5.6 replication

semi-synchronous replication in practice

• installation:

• it’s a plugin.

• Actually, two plugins

7Tuesday, April 17, 12

Page 8: Mysql 5.5 and 5.6 replication

semi-synch replication install# in the masterplugin-load=rpl_semi_sync_master=semisync_master.sorpl_semi_sync_master_enabled=1

# in each slaveplugin-load=rpl_semi_sync_slave=semisync_slave.sorpl_semi_sync_slave_enabled=1

# restar all servers

8Tuesday, April 17, 12

Page 9: Mysql 5.5 and 5.6 replication

semi-synch replication check# in the mastershow variables like 'rpl_semi%';+------------------------------------+-------+| Variable_name | Value |+------------------------------------+-------+| rpl_semi_sync_master_enabled | ON || rpl_semi_sync_master_timeout | 10000 || rpl_semi_sync_master_trace_level | 32 || rpl_semi_sync_master_wait_no_slave | ON |+------------------------------------+-------+

9Tuesday, April 17, 12

Page 10: Mysql 5.5 and 5.6 replication

semi-synch replication checkshow status like "rpl_semi_%tx";+-----------------------------+-------+| variable_name | value |+-----------------------------+-------+| RPL_SEMI_SYNC_MASTER_NO_TX | 0 || RPL_SEMI_SYNC_MASTER_YES_TX | 0 |+-----------------------------+-------+

10Tuesday, April 17, 12

Page 11: Mysql 5.5 and 5.6 replication

semi-synch replication testmaster> create table t1 ( i int);Query OK, 0 rows affected (0.01 sec)

master> show status like "rpl_semi_%tx";+-----------------------------+-------+| Variable_name | Value |+-----------------------------+-------+| Rpl_semi_sync_master_no_tx | 0 || Rpl_semi_sync_master_yes_tx | 1 |+-----------------------------+-------+

11Tuesday, April 17, 12

Page 12: Mysql 5.5 and 5.6 replication

disabling semi-synch# for each slave

set global rpl_semi_sync_slave_enabled=0;stop slave io_thread; start slave io_thread;

12Tuesday, April 17, 12

Page 13: Mysql 5.5 and 5.6 replication

disabled semi-synch replication testmaster> insert into t1 values (1);Query OK, 1 row affected (10.00 sec)

master> show status like "rpl_semi_%tx";+-----------------------------+-------+| Variable_name | Value |+-----------------------------+-------+| Rpl_semi_sync_master_no_tx | 1 || Rpl_semi_sync_master_yes_tx | 1 |+-----------------------------+-------+2 rows in set (0.00 sec)

13Tuesday, April 17, 12

Page 14: Mysql 5.5 and 5.6 replication

disabled semi-synch replication testmaster> insert into t1 values (2);Query OK, 1 row affected (0.01 sec)

master> show status like "rpl_semi_%tx";+-----------------------------+-------+| Variable_name | Value |+-----------------------------+-------+| Rpl_semi_sync_master_no_tx | 2 || Rpl_semi_sync_master_yes_tx | 1 |+-----------------------------+-------+2 rows in set (0.00 sec)

14Tuesday, April 17, 12

Page 15: Mysql 5.5 and 5.6 replication

re-enabling semi-synch# in one slave

set global rpl_semi_sync_slave_enabled=1;stop slave io_thread; start slave io_thread;

15Tuesday, April 17, 12

Page 16: Mysql 5.5 and 5.6 replication

reenabled semi-synch replication testmaster> insert into t1 values (3);Query OK, 1 row affected (0.01 sec)

master> show status like "rpl_semi_%tx";+-----------------------------+-------+| Variable_name | Value |+-----------------------------+-------+| Rpl_semi_sync_master_no_tx | 2 || Rpl_semi_sync_master_yes_tx | 2 |+-----------------------------+-------+2 rows in set (0.00 sec)

16Tuesday, April 17, 12

Page 17: Mysql 5.5 and 5.6 replication

delayed replicationAGEN

DA

17Tuesday, April 17, 12

Page 18: Mysql 5.5 and 5.6 replication

delayed replication in practiceSTOP SLAVE;change master to master_delay=60;START SLAVE;

SHOW SLAVE STATUS\G(...) SQL_Delay: 60 SQL_Remaining_Delay: NULL

18Tuesday, April 17, 12

Page 19: Mysql 5.5 and 5.6 replication

delayed replication in practicemaster > use test;master > create table t2 (i int);

SHOW SLAVE STATUS\G(...) SQL_Delay: 60 SQL_Remaining_Delay: 55

slave> SHOW TABLES FROM test;+----------------+| Tables_in_test |+----------------+| t1 |+----------------+

19Tuesday, April 17, 12

Page 20: Mysql 5.5 and 5.6 replication

delayed replication in practice# after 1 minute

SHOW SLAVE STATUS\G(...) SQL_Delay: 60 SQL_Remaining_Delay: NULL

slave> SHOW TABLES FROM test;+----------------+| Tables_in_test |+----------------+| t1 || t2 |+----------------+

20Tuesday, April 17, 12

Page 21: Mysql 5.5 and 5.6 replication

Server UUIDAGEN

DA

21Tuesday, April 17, 12

Page 22: Mysql 5.5 and 5.6 replication

testing some replicationmake_replication_sandbox mysql-5.6.5-m8-osx10.7-.tar.gz ........replication directory installed in $HOME/sandboxes/rsandbox_mysql-5_6_5

22Tuesday, April 17, 12

Page 23: Mysql 5.5 and 5.6 replication

testing some replication~/sandboxes/rsandbox_mysql-5_6_5/s1show slave status\G******** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 127.0.0.1 Master_User: rsandbox Master_Port: 12630 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 2524 Relay_Log_File: mysql_sandbox12631-relay-bin.000002 Relay_Log_Pos: 2677 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes

23Tuesday, April 17, 12

Page 24: Mysql 5.5 and 5.6 replication

testing some replication~/sandboxes/rsandbox_mysql-5_6_5/s1show slave status\G....Master_Server_Id: 1Master_UUID: be3c022a-726f-11e1-a26a-a64f991393aaMaster_Info_File: /Users/gmax/sandboxes/rsandbox_mysql-5_6_5/node1/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it

24Tuesday, April 17, 12

Page 25: Mysql 5.5 and 5.6 replication

crash safe slaveAGEN

DA

25Tuesday, April 17, 12

Page 26: Mysql 5.5 and 5.6 replication

uncovering replication features

show variables like '%info%';+---------------------------+----------------+| Variable_name | Value |+---------------------------+----------------+| master_info_repository | FILE || relay_log_info_file | relay-log.info || relay_log_info_repository | FILE || sync_master_info | 0 || sync_relay_log_info | 0 |+---------------------------+----------------+show variables like '%worker%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| slave_parallel_workers | 0 |+------------------------+-------+

26Tuesday, April 17, 12

Page 27: Mysql 5.5 and 5.6 replication

uncovering replication features

STOP SLAVE;

set global master_info_repository='table';Query OK, 0 rows affected (0.00 sec)

slave1 [localhost] {msandbox} ((none)) > set global relay_log_info_repository='table';Query OK, 0 rows affected (0.00 sec)

slave1 [localhost] {msandbox} ((none)) > set global slave_parallel_workers=3;Query OK, 0 rows affected (0.00 sec)

27Tuesday, April 17, 12

Page 28: Mysql 5.5 and 5.6 replication

fixing replication tablesuse mysql;

slave1 [localhost] {msandbox} (mysql) > alter table slave_master_info engine=innodb;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0

slave1 [localhost] {msandbox} (mysql) > alter table slave_relay_log_info engine=innodb;Query OK, 1 row affected (0.01 sec)Records: 1 Duplicates: 0 Warnings: 0

slave1 [localhost] {msandbox} (mysql) > alter table slave_worker_info engine=innodb;Query OK, 0 rows affected (0.01 sec)Records: 0 Duplicates: 0 Warnings: 0

28Tuesday, April 17, 12

Page 29: Mysql 5.5 and 5.6 replication

Look at the new featuresshow slave status\G........Master_UUID: be3c022a-726f-11e1-a26a-a64f991393aaMaster_Info_File: mysql.slave_master_info

29Tuesday, April 17, 12

Page 30: Mysql 5.5 and 5.6 replication

Look at the new featuresselect * from mysql.slave_master_info\G*************************** 1. row ****** Master_id: 101 Number_of_lines: 22 Master_log_name: mysql-bin.000001 Master_log_pos: 2524 Host: 127.0.0.1 User_name: rsandbox User_password: rsandbox Port: 12630.... Heartbeat: 1800 Bind: Ignored_server_ids: 0 Uuid: be3c022a-726f-11e1-a26a-a64f991393aa Retry_count: 86400

30Tuesday, April 17, 12

Page 31: Mysql 5.5 and 5.6 replication

Look at the new featuresselect * from mysql.slave_relay_log_info\G*************************** 1. row *************** Master_id: 101 Number_of_lines: 6 Relay_log_name: ./mysql_sandbox12631-relay-bin.000002 Relay_log_pos: 2677 Master_log_name: mysql-bin.000001 Master_log_pos: 2524 Sql_delay: 0Number_of_workers: 3

31Tuesday, April 17, 12

Page 32: Mysql 5.5 and 5.6 replication

Look at the new featuresselect * from mysql.slave_worker_info\G************** 3. row ********************* Master_id: 101 Worker_id: 2 Relay_log_name: ./mysql_sandbox12631-relay-bin.000003 Relay_log_pos: 1394 Master_log_name: mysql-bin.000001 Master_log_pos: 3651 Checkpoint_relay_log_name: ./mysql_sandbox12631-relay-bin.000003 Checkpoint_relay_log_pos: 1199Checkpoint_master_log_name: mysql-bin.000001 Checkpoint_master_log_pos: 3456 Checkpoint_seqno: 0 Checkpoint_group_size: 64 Checkpoint_group_bitmap:

32Tuesday, April 17, 12

Page 33: Mysql 5.5 and 5.6 replication

multi-threaded slaveAGEN

DA

33Tuesday, April 17, 12

Page 34: Mysql 5.5 and 5.6 replication

facts about multiple threaded slavea.k.a. parallel replication

• Requires MySQL 5.6 in both master and slave

• Parallel replication with a 5.5 master will slow down replication

• Data gets parallelized by schema

34Tuesday, April 17, 12

Page 35: Mysql 5.5 and 5.6 replication

enabling multi-threaded slave

set global slave_parallel_workers=10;

show variables like '%worker%';+------------------------+-------+| Variable_name | Value |+------------------------+-------+| slave_parallel_workers | 10 |+------------------------+-------+

stop slave; start slave;

35Tuesday, April 17, 12

Page 36: Mysql 5.5 and 5.6 replication

global transaction identifierAGEN

DA

36Tuesday, April 17, 12

Page 37: Mysql 5.5 and 5.6 replication

global transaction identifier

• Requires MySQL 5.6 in both master and slave

• requires all servers in the cluster to run these options:

• log-bin

• log-slave-updates

• gtid-mode=ON

• disable-gtid-unsafe-statements

37Tuesday, April 17, 12

Page 38: Mysql 5.5 and 5.6 replication

global transaction identifier issues

• Can't work with:

• non-transactional updates.

• temporary tables within transactions

• CREATE TABLE ... SELECT

• disable-gtid-unsafe-statements will make the server fail on any of the above cases.

38Tuesday, April 17, 12

Page 39: Mysql 5.5 and 5.6 replication

enabling global transaction identifiers# change my.cnf in ALL nodes # (master and slaves)

[mysqld]log-binlog-slave-updatesgtid-mode=ONdisable-gtid-unsafe-statements

# restart the servers

39Tuesday, April 17, 12

Page 40: Mysql 5.5 and 5.6 replication

testing global transaction identifierscreate table t1 (i int not null primary key);show binlog events\G********* 3. row *************************** Log_name: mysql-bin.000002 Pos: 147 Event_type: Gtid Server_id: 1End_log_pos: 191 Info: SET @@SESSION.GTID_NEXT='44556A96-8417-11E1-9589-2BD5ACDD51FD:1'********* 4. row *************************** Log_name: mysql-bin.000002 Pos: 191 Event_type: Query Server_id: 1End_log_pos: 305 Info: use `test`; create table t1 (i int not null primary key)

40Tuesday, April 17, 12

Page 41: Mysql 5.5 and 5.6 replication

testing global transaction identifiersSHOW SLAVE STATUS\G(...) Retrieved_Gtid_Set: 44556A96-8417-11E1-9589-2BD5ACDD51FD:1-2 Executed_Gtid_Set: 44556A96-8417-11E1-9589-2BD5ACDD51FD:1-2

41Tuesday, April 17, 12

Page 42: Mysql 5.5 and 5.6 replication

DEMO

42Tuesday, April 17, 12

Page 43: Mysql 5.5 and 5.6 replication

©Continuent 2012

ADVERTISING

43

43Tuesday, April 17, 12

Page 44: Mysql 5.5 and 5.6 replication

©Continuent 2012

http://www.continuent.com/about/careers

WE ARE HIRING!

• Cluster implementation engineer• QA engineer• Documentation writer

44

44Tuesday, April 17, 12