MySQL 5.6.10 跨平台GTID复制实践

根据业务需要,建立MySQL复制来实现数据冗余。

MySQL 5.6.10版本提供了更方便的基于GTID的复制功能,MySQL可以通过GTID自动识别上次同步的点,极大地方便了运维人员,减少出错的几率。

在官方文档中提到,最保险可靠的复制方式,是基于row的复制,所以宁可牺牲一些性能也要保证数据的安全。

现实环境中,master主数据库MySQL 5.6.10(msi安装方式)安装在Windows 2008 Server x64上,slave从服务器是一台老旧的DELL服务器,运行CentOS 6.4 x64系统,源码编译安装MySQL 5.6.10的Linux版本,安装过程可以参考我以前的博文:http://www.cnblogs.com/jlzhou/archive/2013/03/09/2951544.html

不同平台下,MySQL是有一些差异的,要小心处理。

第一个问题是,Windows平台下,文件名大小写不敏感,造成对应的MySQL的数据表名称默认都采用小写字母方式,同时大小不写敏感,参考我以前的博文:http://www.cnblogs.com/jlzhou/archive/2013/03/18/2966106.html 为了能将数据同步复制到Linux平台的MySQL,我们需要设置Linux平台下MySQL的数据表名称设置:(修改my.cnf文件)

?[mysqld]
lower_case_table_names=1

第二个问题是,自增字段0值的问题。因为现有数据库是MSSQL,业务逻辑需要某些表的自增字段从0开始。参考我以前的博文:http://www.cnblogs.com/jlzhou/archive/2013/03/18/2965384.html 为了在Windows平台和Linux平台的MySQL之间复制数据,增加全局变量设置,在my.ini和my.cnf中分别添加NO_AUTO_VALUE_ON_ZERO设置到sql-mode行:

//my.ini 该文件默认在Windows7或Windows2008操作系统中位于 C:\ProgramData\MySQL\MySQL Server 5.6 目录下(采用MSI安装方式),如果你自定义了数据目录,则该配置文件在数据目录下。
# Set the SQL mode to strict
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_AUTO_VALUE_ON_ZERO"

现在开始配置GTID复制,先配置master端的my.ini文件,加入下述配置,然后重启master的MySQL服务:

binlog-format=ROW
log-bin=master-bin.log
log-bin-index=master-bin.index
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
sync_binlog=1

再修改slave端的my.cnf文件,加入下述配置,然后重启slave的MySQL服务:

binlog-format=ROW
log-bin=slave-bin.log
log-bin-index=slave-bin.index
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=2
sync_binlog=1

其实,并不需要在slave端启用binlog,但是为了在master故障时,方便的转换slave到master,并且方便建立slave的slave,所以采用和主服务器类似的配置。

复制设置会将用于复制的用户和密码以明文形式保存在master.info文件中,最好为复制建立专用的用户,授予 REPLICATION SLAVE 权限。

在master端执行:

GRANT REPLICATION SLAVE ON *.* TO ‘repluser‘@‘192.168.1.101‘ IDENTIFIED BY ‘12345678‘;

最后,在slave执行指向master的命令,并开启slave复制。

CHANGE MASTER TO MASTER_HOST=‘192.168.1.100‘, MASTER_PORT=3306, MASTER_USER=‘repluser‘,MASTER_PASSWORD=‘12345678‘, master_auto_position=1;
START slave;

这时就可以测试在master上建立数据库,建表,然后监控slave的复制状态了。

本文中没有涉及到已有数据库在master上的情况,请参考这篇博文:http://www.zhaokunyao.com/archives/4131

后记:

附上备份和恢复脚本:命令行执行

Backup from remote server scripts:

// for test database:
"C:\MySQL\MySQL Server 5.6\bin\mysqldump.exe" --user=root --max_allowed_packet=1G --host=10.192.8.105 --port=3306 --default-character-set=utf8 --set-gtid-purged=OFF --password --databases test > "C:\\Backup\\test.dump.sql" 

Restore to local dev machine scripts:

// for test database:
"C:\MySQL\MySQL Server 5.6\bin\mysql.exe" --host=localhost --user=root --port=3306 --password --default-character-set=utf8 --comments < "C:\\Backup\\test.dump.sql"

注意,上述脚本中,备份的部分要加入--set-gtid-purged=OFF参数,防止在备份出的sql脚本中生成 SET @@global.gtid_purged 语句:

Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even those that changed suppressed parts of the database. If you don‘t want to restore GTIDs, pass --set-gtid-purged=OFF.

官方文档关于set-gtid-purged是这样写的:

This option enables control over global transaction ID (GTID) information written to the dump file, by indicating whether to add a SET @@global.gtid_purged statement to the output.

时间: 2025-01-02 17:04:59

MySQL 5.6.10 跨平台GTID复制实践的相关文章

(5.8)mysql高可用系列——MySQL中的GTID复制(实践篇)

目录: [0]概念 一.基于GTID的异步复制(一主一从)无数据/少数据搭建 [1]环境 [2]安装 mysql utilities(本文借助该工具进行安装) [3]开始配置 #[3.1]在主库上 准备复制账户 #[3.2]参数配置(主从都配)#[3.3]重启两台mysql#[3.4]主库上查看binlog#[3.5.1]使用mysqlreplicate(mysql utilities工具)命令配置#[3.5.2]使用传统方式配置#[3.6]主从数据测试(在主库上跑) [4]我的其他文章 [4.

[mysql] MariaDB 10.0.10 GTID复制

一:概念理解:    1.TID:Transaction ID,即Mysql服务器的事务ID号. 2.GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事物ID是不能相同的. 3.全局事物ID是Mster服务器生成一个128位的UUID+事物的ID号组成的,UUID标示主服务器的身份,此UUID在整个主从复制架构中是绝对唯一,而且即使更换主服务器后UUID也不会改变而是继承当前主服务器的UUID身份. 4.全局事务ID有何用处?简单来讲GTID能够保

mariadb10.x启用gtid复制时提示mysql.gtid_slave_pos找不到的解决方案

mariadb10.x安装方式为yum时,当启用gtid复制方式后,一直提示mysql.gtid_slave_pos找不到的解决方案 造成的原因不详 解决方案:/usr/share/mysql/mysql_system_tables.sql是创建系统表的脚本 找到innodb_table_stats,innodb_index_stats,gtid_slave_pos表的创建方式 innodb_table_stats表的创建语句: SET FOREIGN_KEY_CHECKS=0; DROP TA

mysql 5.6 的新特性:GTID 复制

mysql 5.6 的新特性: MySQL 5.6 包含了一个复制的新功能,enabling DevOps teams to reliably scale-out their MySQL infrastructure across commodity hardware, rel="nofollow">Global Transaction Identifiers (GTIDs)功能, 为了解决以下问题: -能够无缝的故障恢复和master与slave的切换 -能把slave指向新的

MySQL主从复制--MySQL5.6基于GTID及多线程复制

大纲 一.系统环境 二.MySQL初始化安装过程 三.基于GTID的主从模式配置过程 一.系统环境 系统环境 CentOS5.8 x86_64 master.network.com    master    172.16.1.101 slave.network.com     slave     172.16.1.105 软件包 mysql-5.6.26-linux-glibc2.5-x86_64.tar.gz(二进制通用安装包) 拓扑图 二.MySQL初始化安装过程 1.时间同步 [[emai

MariaDB 10 Slave Crash-Safe需转为GTID复制模式

之前写了一篇<MySQL5.6 crash-safe replication> ,但在Mariadb10.0.X和10.1.X上不支持relay_log_info_repository = TABLE参数,官网建议用GTID复制模式代替传统复制模式,传统复制模式是不支持Slave Crash-Safe的. 在mysql库下,会有一张gtid_slave_pos表(在安装初始化时,就已经是innodb引擎) START TRANSACTION; -- Statement 1 -- ... -- 

mysql之 mysql 5.6不停机主从搭建(一主一从基于GTID复制)

环境说明:版本 version 5.6.25-log 主库ip: 10.219.24.25从库ip:10.219.24.22os 版本: centos 6.7已安装热备软件:xtrabackup 防火墙已关 补充: 主从复制原理: http://blog.csdn.net/zhang123456456/article/details/72972701GTID 复制原理: http://blog.csdn.net/zhang123456456/article/details/73002216mys

mysql之 MySQL 主从基于 GTID 复制原理概述

一. 什么是GTID ( Global transaction identifiers ):MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid,UUID保存在mysql数据目录的auto.cnf文件中,这是一个非常重要的文件,不能删除,这一部分是不会变的.另外一部分就是事务ID了,随着事务的增加,值一次递增,如下图+---------------+----------+--------------+------------------+-

MariaDB 10.0.10 GTID复制

一:概念理解: 1.TID:Transaction ID,即Mysql服务器的事务ID号. 2.GTID:Global Transaction ID,全局事务ID,在整个主从复制架构中任何两个事物ID是不能相同的. 3.全局事物ID是Mster服务器生成一个128位的UUID+事物的ID号组成的,UUID标示主服务器的身份,此UUID在整个主从复制架构中是绝对唯一,而且即使更换主服务器后UUID也不会改变而是继承当前主服务器的UUID身份. 4.全局事务ID有何用处?简单来讲GTID能够保证让一