一 GTID 详解php
官方文档:http://dev.mysql.com/doc/refman/5.6/en/replication-gtids.html在这篇文档里,咱们能够知道全局事务 ID 的官方定义是:GTID = source_id:transaction_idcss
MySQL 5.6 中,每个 GTID 表明一个数据库事务。在上面的定义中,source_id 表示执行事务的主库 uuid(server_uuid),transaction_id 是一个从 1 开始的自增计数,表示在这个主库上执行的第 n 个事务。MySQL 会保证事务与 GTID 之间的 1 : 1 映射。html
例如,下面就是一个 GTID:3E11FA47-71CA-11E1-9E33-C80AA9429562:50 表示在以 "3E11FA47-71CA-11E1-9E33-C80AA9429562" 为惟一标示的 MySQL 实例上执行的第 50 个数据库事务。很容易理解,MySQL 只要保证每台数据库的 server_uuid 全局惟一,以及每台数据库生成的 transaction_id 自身惟一,就能保证 GTID 的全局惟一性。node
2.什么是server_uuid?mysql
MySQL 5.6 用 128 位的 server_uuid 代替了本来的 32 位 server_id 的大部分功能。缘由很简单,server_id 依赖于 my.cnf 的手工配置,有可能产生冲突 —— 而自动产生 128 位 uuid 的算法能够保证全部的 MySQL uuid 都不会冲突。算法
在首次启动时 MySQL 会调用 generate_server_uuid() 自动生成一个 server_uuid,而且保存到 auto.cnf 文件 —— 这个文件目前存在的惟一目的就是保存 server_uuidsql
在 MySQL 再次启动时会读取 auto.cnf 文件,继续使用上次生成的 server_uuid。使用 SHOW 命令能够查看 MySQL 实例当前使用的 server_uuid?:SHOW GLOBAL VARIABLES LIKE 'server_uuid';它是一个 MySQL 5.6 global variables,文档连接在这里: server_uuid? 全局惟一的 server_uuid 的一个好处是:能够解决由 server_id 配置冲突带来的 MySQL 主备复制的异常终止(BUG #33815?)数据库
在MySQL 5.6,Slave 向 Master 申请 binlog 时,会首先发送本身的 server_uuid,Master 用 Slave 发送的 server_uuid 代替 server_id (MySQL 5.6 以前的方式)做为 kill_zombie_dump_threads 的参数,终止冲突或者僵死的 BINLOG_DUMP 线程vim
二 多线程复制安全
MySQL 5.6以前的版本,同步复制是单线程的,队列的,只能一个一个执行,在5.6里,能够作到多个库之间的多线程复制,例如数据库里,存放着用户表,商品表,价格表,订单表,那么将每一个业务表单独放在一个库里,这时就能够作到多线程复制,但一个库里的表,多线程复制是无效的。
注,每一个数据库仅能使用一个线程,复制涉及到多个数据库时多线程复制才有意义。
三 mysql复制管理工具
Mysql 5.6 复制管理工具
官方下载地址:http://dev.mysql.com/downloads/tools/utilities/#downloads
注,这里只简单的介绍一下,具体的工具使用,不具体说明,使用方法 命令—help
mysqlreplicate 快速启动复制
mysqlrplcheck 快速检查复制环境
mysqlrplshow 显示复制拓扑
mysqlfailover 故障转移
四 配置过程
环境
操做系统 Centso 6.4 x86_64
软件版本 mysql 5.6.19
master 192.168.200.17
slave 192.168.200.18
mysql 安装过程略
1 配置选项说明
配置master节点
[root@node1 ~]# vim /etc/my.cnf [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 datadir = /mydata/data log-bin=/binlog/mysql innodb_file_per_table = 1 sync_binlog = 1 binlog_format=row # required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1 log-slave-updates=true gtid-mode=on enforce-gtid-consistency=true master-info-repository=TABLE relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=4 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 report-port=3306 report-host=node1.daphne.com
从新启动mysql
[root@node1 ~]# service mysqld restart Shutting down MySQL.. SUCCESS! Starting MySQL. SUCCESS!
查看GTID 相关信息
mysql> show global variables like '%gtid%'; +--------------------------+------------------------------------------+ | Variable_name | Value | +--------------------------+------------------------------------------+ | enforce_gtid_consistency | ON | | gtid_executed | 99ba0aa4-0c10-11e4-96dd-000c298632f6:1-3 | | gtid_mode | ON | | gtid_owned | | | gtid_purged | | +--------------------------+------------------------------------------+ 5 rows in set (0.01 sec)
建立有复制权限的用户
mysql> grant replication slave on *.* to user@192.168.200.18 identified by 'redhat';
配置从服务器
[root@node2 ~]# vim /etc/my.cnf [mysqld] port = 3306 socket = /tmp/mysql.sock skip-external-locking key_buffer_size = 256M max_allowed_packet = 1M table_open_cache = 256 sort_buffer_size = 1M read_buffer_size = 1M read_rnd_buffer_size = 4M myisam_sort_buffer_size = 64M thread_cache_size = 8 query_cache_size= 16M # Try number of CPU's*2 for thread_concurrency thread_concurrency = 8 datadir = /mydata/data log-bin=/binlog/mysql innodb_file_per_table = 1 sync_binlog = 1 # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interaction with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking # Replication Master Server (default) # binary logging is required for replication # binary logging format - mixed recommended binlog_format=row # required unique id between 1 and 2^32 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 10 log-slave-updates=true gtid-mode=on enforce-gtid-consistency=true master-info-repository=TABLE relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-workers=4 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 report-port=3306 report-host=node2.daphne.com
从新启动mysql
[root@node2 ~]# service mysqld restart Shutting down MySQL.. [ OK ] Starting MySQL. [ OK ]
在从服务器上进行复制
mysql> change master to master_host='192.168.200.17',master_user='user',master_password='redhat',master_auto_position=1;
mysql> start slave;
查看复制状态
mysql> show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.200.17 Master_User: user Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql.000007 Read_Master_Log_Pos: 191 Relay_Log_File: node2-relay-bin.000006 Relay_Log_Pos: 393 Relay_Master_Log_File: mysql.000007 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: 191 Relay_Log_Space: 982 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: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 99ba0aa4-0c10-11e4-96dd-000c298632f6 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: 99ba0aa4-0c10-11e4-96dd-000c298632f6:1-3 Executed_Gtid_Set: 99ba0aa4-0c10-11e4-96dd-000c298632f6:1-3 Auto_Position: 1 1 row in set (0.00 sec)
测试主从复制