介绍
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:启用之可用于在二进制日志记录事件相关的信息,可降低故障排除的复杂度;www.it165.net
log-bin:启用二进制日志,这是保证复制功能的基本前提;
server-id:同一个复制拓扑中的所有服务器的id号必须惟一.
环境介绍:
Centos6.4(64 bit)
Mysql 5.6.14
服务器信息
Mysql master:192.168.1.10
Mysql slave:192.168.1.11
安装Mysql5.6(Master 和Slave都一样,注意server-id不能重复)
首先到http://dev.mysql.com/downloads/mysql/#downloads下载最新的Mysql安装包,我系统是Centos6 64-bit 所以选择Oracle&Red Hat Linux6 的版本,并下载MySQL-server-5.6.14-1.el6.x86_64.rpm和MySQL-client-5.6.14-1.el6.x86_64.rpm这两个安装包。
然后安装并启动数据库
rpm -ivh MySQL-server-5.6.14-1.el6.x86_64.rpmMySQL-client-5.6.14-1.el6.x86_64.rpm
service mysql start
这里需要注意的是,mysql5.6以后的版本,安装好后root用户的密码不再为空,而是随机的,保存在/root/.mysql_secret 中,而且用这个密码登陆后需要马上更改密码才能执行操作,修改命令如下:
set password=password('root');
接下来需要复制my.cnf文件到/etc目录下
cp /usr/share/mysql/my-default.cnf /etc/my.cnf
编辑my.cnf文件,加入主从复制的一些配置
server-id=1 #主从服务器的id不能重复
binlog-format=ROW
log-slave-updates
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
最后重启Mysql服务器
service mysql restart
在mysql中查查看是否已经启动GTID功能
show global variables like '%gtid%';
+--------------------------+-------+
| Variable_name | Value |
+--------------------------+-------+
| enforce_gtid_consistency | ON |
| gtid_executed | |
| gtid_mode | ON |
| gtid_owned | |
| gtid_purged | |
+--------------------------+-------+
5 rows in set (0.07 sec)
授权用于复制的帐号信息
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'IDENTIFIED BY 'slave';
flush privileges;
在从服务器上启动从Master复制
change master to master_host='192.168.1.10', master_user='slave',master_password='slave',master_auto_position=1;
start slave;
show slave status\G;
*************************** 1. row***************************
Slave_IO_State: Waitingfor master to send event
Master_Host:192.168.1.10
Master_User:slave
Master_Port:3306
Connect_Retry: 60
Master_Log_File:mysql-bin.000009
Read_Master_Log_Pos: 1072664
Relay_Log_File:slave1_mysql-relay-bin.000031
Relay_Log_Pos: 1072827
Relay_Master_Log_File: mysql-bin.000009
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
两个yes表示已经成功开始主从复制了。