基于MYSQL-GTID主从复制

           MySQL 从5.6版本开始引入的GTID(Global Transaction IDs)使得其复制功能的配置、监控及管理变得更加易于实现。并且支持的操作系统是CENTOS或者是redhat6版本。

         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几种类型,建议使用row;

需要注意的是:当设置隔离级别为READ-COMMITED必须设置二进制日志格式为ROW,现在MySQL官方认为STATEMENT这个已经不再适合继续使用;但mixed类型在默认的事务隔离级别下,可能会导致主从数据不一致;

log-slave-updates、gtid-mode、enforce-gtid-consistency、report-port和report-host:用于启动GTID及满足附属的其它需求;

log-slave-updates:表示当从服务器从中继日志中读取时间到本地操作时是否将写操作写入到从服务器的二进制日志中,如果从服务器不做其他从的主的话可以不启用,但是如果基于GTID功能,随时有可能会被提升为主服务器,所以这项还是要启用。值为ture

gtid-mode:表示是否启用GTID模式

enforce-gtid-consistency:表示是否强制GTID的一致性

report-port和,report-host:表示从服务器在连接主服务器时必须告诉主服务器自己的IP地址或主机名和端口号

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号必须惟一.主从服务器ID号不能相同

             配置环境

              操作系统:  redhat   6.4

              MySQL版本:mysql-5.6.10-linux-glibc2.5-i686.tar.gz

                配置过程:

                1.配置主服务器

                vim /usr/local/mysql/my.cnf                      

               [mysqld]
                binlog-format=ROW
                log-bin=master-bin-log
                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
                server-id=1
                report-port=3306

                port=3306
                datadir=/mydata/data
                socket=/tmp/mysql.sock

                report-host=172.16.16.20                            //可以是IP地址或者是主机名,为避免DNS解析建议使用IP地址

        2.配置从服务器

         vim /usr/local/mysql/my.cnf        

        [mysqld]
                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
                server-id=11
                report-port=3306
                port=3306
                log-bin=slave-bin.log
               datadir=/mydata/data  
               socket=/tmp/mysql.sock
               report-host=172.16.16.10

            read_only = 1                                               //配置从服务器为只读的,为安全考虑,为中继日志

               3.主服务器授权:授权复制用户和登录主机,登录MySQL服务器

               #MySQL -uroot -p

              mysql>mysql> GRANT REPLICATION SLAVE ON *.* TO [email protected] IDENTIFIED BY 'rplpass';

               4.启动从服务器的复制进程,连接主服务器

               启用了GTID功能,则使用如下命令:

              MySQL>change master to            master_hosts='172.16.16.20',master_user='rpluser',master_password='rplpass',master_outo_opsition=1;

       如果未启用GTID,则使用命令

        MySQL> CHANGE MASTER TO MASTER_HOST='172.16.16.20',
              -> MASTER_USER='rpl',
              -> MASTER_PASSWORD='rplpass',
              -> MASTER_LOG_FILE='master-bin-log.000001',
              -> MASTER_LOG_POS=1174;

             5.启动slave服务

             MySQL>START SLAVE;                                    //启动复制进程

             mysql>SHOW SLAVE STATUS\G                      //查看复制状态信息

            MySQL>SHOW MSATER STAUS;                     //查看主服务器状态信息

            MYSQL>SHOW SLAVE STATUS;                     //查看从服务器信息


二、半同步复制

1、分别在主从节点上安装相关的插件

master> INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
slave> INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

2、启用半同步复制

在master上的配置文件中,添加
rpl_semi_sync_master_enabled=ON

在至少一个slave节点的配置文件中添加
rpl_semi_sync_slave_enabled=ON

而后重新启动mysql服务即可生效。

或者,也可以mysql服务上动态启动其相关功能:

master> SET GLOBAL rpl_semi_sync_master_enabled = ON;
slave> SET GLOBAL rpl_semi_sync_slave_enabled = ON;
slave> STOP SLAVE IO_THREAD; START SLAVE IO_THREAD;

3、确认半同步功能已经启用

master> CREATE DATABASE magedudb;
master> SHOW STATUS LIKE 'Rpl_semi_sync_master_yes_tx';

slave> SHOW DATABASES;


你可能感兴趣的:(mysql,复制,GTID, , , , )