MySQL 5.6引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现,且更加健壮。
gtid是一个 unique 唯一的表示符,他是由服务器的uuid 全局唯一标示,是由128位的随机符组成,mysql-5.6是依靠server-id和uuid 来标示复制架构中的每一个主机,因为是128位的随机字符串在全局都不会重复,server-id 和uuid以及每一个mysql事物的事物序号组成了唯一的gtid ,自从引进mysql-5.6之后每一个二进制日志当中在每一个事物的首部都会写上gtid 标记,因此gtid使得追踪和比较复制事物变得非常简单而且能够实现从崩溃中快速恢复。尤其是innodb 引擎要想实现高可用功能必须要借助于gtid来实现。
要在MySQL 5.6中使用复制功能,其服务配置段[mysqld]中于少应该定义如下选项:
binlog-format:二进制日志的格式,有row、statement和mixed几种类型;
需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;
log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;
master-info-repository和relay-log-info-repository:启用此两项,可用于实现在崩溃时保证二进制及从服务器安全的功能;
sync-master-info:启用之可确保无信息丢失;
slave-paralles-workers:设定从服务器的SQL线程数;0表示关闭多线程复制功能;
binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:启用复制有关的所有校验功能;
binlog-rows-query-log-events:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;
log-bin:启用二进制日志,这是保证复制功能的基本前提;
server-id:同一个复制拓扑中的所有服务器的id号必须惟一
闲话少说 开干
mysql5.6的安装我就不再说了 之前的文章有
分配一下角色
172.16.2.5 为主
172.16.2.3 为辅
切记关闭selinux 要不有你蛋疼的时候
vi /etc/my.cnf 添加一下内容(主)
innodb_file_per_table = ON
server-id
= 1
log-bin = master-bin
binlog-
format
=ROW
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=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=172.16.2.5
启动mysql
mysql> show global variables like '%gtid%';
+--------------------------+------------------------------------------+
| Variable_name | Value |
+--------------------------+------------------------------------------+
| enforce_gtid_consistency | ON 俩个都为on 说明gtid
已经启用 |
| gtid_executed | 26cb56f0-0fce-11e3-a9ec-eef1eccc36ac:1-3 |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
+--------------------------+------------------------------------------+
5 rows in set (0.00 sec)
授予从上的用户与密码
GRANT REPLICATION SLAVE ON *.* TO 'kyo'@'172.16.%.%' IDENTIFIED BY 'kyo';
flush privileges;
接下来在slave上设置
vi /etc/my.cnf
innodb_file_per_table = ON
binlog-format=ROW
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=2
binlog-checksum=CRC32
master-verify-checksum=1
slave-sql-verify-checksum=1
binlog-rows-query-log_events=1
report-port=3306
report-host=172.16.2.3
这里的server_id要为2
启动mysql
mysql> change master to master_host='172.16.2.5',
master_user='kyo',master_password='kyo',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: 172.16.2.5
Master_User: kyo
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001 主的二进制文件
Read_Master_Log_Pos: 524
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 736
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes 复制的进程全部为yes
Slave_SQL_Running: Yes
测试
在主的mysql上面添加数据库 再从的上面查看是否同步
mysql> create database qilei; 主
mysql> show databases; 从
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| qilei |
| test |
+--------------------+
ok 有了 大功告成