根据业务需要,建立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版本,安装过程可以参考我以前的文章:
不同平台下,mysql是有一些差异的,要小心处理。
第一个问题是,windows平台下,文件名大小写不敏感,造成对应的mysql的数据表名称默认都采用小写字母方式,同时大小不写敏感,参考我以前的文章: 为了能将数据同步复制到linux平台的mysql,我们需要设置linux平台下mysql的数据表名称设置:(修改my.cnf文件)
[mysqld]
lower_case_table_names=1
第二个问题是,自增字段0值的问题。因为现有数据库是mssql,业务逻辑需要某些表的自增字段从0开始。参考我以前的博文: 为了在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
