在线QQ客服:1922638
专业的SQL Server、MySQL数据库同步软件
操作系统:CentOS7
mysql版本:5.7
TiDB版本:2.0.0
同步方法:使用TiDB提供的工具集进行同步
?
说明:
当独立mysql同步时,可以直接使用binlog同步,
但是,当MySQL集群同步时,您必须依赖GTID,但是在打开GTID之后,对事物的要求更高,导致以下操作失败:
(1)多个事件不能同时合并;
(2)不能在事务内创建临时表;
(3)不能在同一事务中更新InnoDB表和MyISAM表。
?
下载tidb同步工具包
#wget http:// download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.tar.gz
#wget http:// download.pingcap.org/tidb-enterprise-tools-latest-linux-amd64.sha256
#sha256sum -c tidb-enterprise-tools-latest-linux-amd64.sha256
# tar-xzf tidb-enterprise-tools-latest-linux-amd64。 焦油 。 z
#cd tidb -enterprise-tools-latest-linux-amd64
?
?
mysql-binlog同步
配置mysql基本信息,添加以下配置
vi/etc/my.cnf
#server-默认情况下,id为0,并且不接受任何从属。因此必须将其更改为非0的数字
服务器-id = 1 #STATEMENT,ROW,MIXED三种模式。默认为MIXED,需要修改为ROW
binlog_format = 行
#启用日志输出并指定日志文件的位置和名称
log_bin = mysql-bin
日志-bin-index = mysql-bin.index
#提交日志后的写模式,请提供0, 1 ,2个三个选择,1是最可靠和最差的表现
# 0 :日志缓冲区将每秒写入一次日志文件,并且日志同时执行文件刷新(刷新到磁盘)操作。在这种模式下,提交事务时,将不会主动触发写入磁盘的操作。
# 1:每次提交事务时,MySQL都会将日志缓冲区的数据写入日志。file ,然后刷新(刷新到磁盘),此模式是系统默认设置。
# 2:每次事务提交时,MySQL都会写入日志缓冲区数据以记录日志file ,但是不会同时执行刷新(刷新到磁盘)操作。在这种模式下,MySQL将每秒执行一次刷新(刷新到磁盘)操作。
innodb_flush_log_at_trx_commit = 1 #二进制日志(binary log)与磁盘同步的频率
# 0 不要主动同步,而是依靠操作系统本身来不规则地刷新文件内容到磁盘。
# 1 在每个语句或事物之后同步一次
#n指定n条语句或要同步一次的事物
sync_binlog = 1 #是否将同步记录记录在自己的binlog中,默认为0,即没有记录。
#如果本地计算机B具有从属计算机C,则当A将Binlog与B同步时,未启用此选项,A的操作将仅与B同步,而不与C同步。也就是说,B将不记录Binlog并且不会同步到C
log-slave-updates = 1
配置完成后重新启动mysql
#systemctl重新启动mysql
?
导出前检查
您需要在导出之前检查表。这里我们以mysql系统库为例。实际导出数据时,应指定相应的库。如果出现错误,则表明无法同步
#检查整个mysql库
。/checker-host 172.18。 100.65-L debug-user root-密码root mysql
#检查mysql库下的db表
。/checker-host 172.18。 100.65-L debug-user root-password root mysql db
?
导出数据
https://blog.csdn.net/weixin_30550081/article/details/mydumper-h 172.20。 51.68-P 3306-u root-p root-B housedata-t 5-F 1--skip-tz-utc-o test
-h源数据库IP?
-P源数据库端口?
-u用户名-p密码?
-B源数据库名称?
-t?导出线程数?
-F分割文件大小,单位M(建议64)
-skip-tz-utc不更改时间??
-o导出到文件夹名称,支持绝对路径
?
导出后,您可以在相应的文件夹中看到相应的导出数据:
数据库名称模式-create.sql库信息
数据库名称。表名-schema.sql表信息
数据库名称。表名。 SQL表数据
元数据同步信息(在后续的增量同步中,您需要使用文件中的信息)
?
导入数据
https://blog.csdn.net/weixin_30550081/article/details/loader-h 172.18。 100.66-P 4000-u root-t 3-d测试
-h目标数据库IP
-P目标数据库端口
-u用户名
-p密码(密码为空时,删除此参数)
-t导入线程
-d导入的文件夹,支持绝对路径
?
导入时,将创建一个tidb_loader数据,其中将包含一个检查点表,该表记录了每个表导入的进度
如果清除了目标记录,则再次导入数据时将不会再次导入数据。您可以清除检查点,然后将其导入。
?
开始同步
在同步器目录中创建config.toml和syncer.mata
#vi syncer.meta
binlog-name = " mysql-bin.000001 " binlog-pos = 68335
#vi config.toml
log-level = " info " 服务器-id = 101 #meta文件地址
meta = " https://blog.csdn.net/weixin_30550081/article/details/syncer.meta" worker-count = 16 批处理 = 10 ## pprof调试地址,Prometheus也可以通过该地址提取同步器指标
##将 127.0。 0.1 修改为相应的主机IP地址
状态-addr = " 172.20.51.68:10086" 复制-做-db = [" housedata " ]
[从]
主机 = " 172.20.51.68 " 用户 = " 根 " 密码 = " 根 " 端口 = 3306 [至]
主机 = " 172.18.100.66 " 用户 = " 根 " 密码 = "" port = 4000
启动同步程序
https://blog.csdn.net/weixin_30550081/article/details/syncer-config config.toml
如果同步成功,则应该自动更新syncer.meta文件的binlog-pos,但不会自动更新,因此将导致数据重新同步每次。
这是进行后续操作以了解问题所在。
?
GTID同步
检查mysql版本,最佳版本是5.7,其他版本不保证配置成功。因为GTID仅在5.6版中可用
mysql \>显示变量,例如" 版本 ";
?
根据binlog同步配置,添加GTID的相关配置。
#vi/etc/my.cnf
gtid-mode = 启用
force_gtid_consistency = ON
systemctl重新启动mysqld
?
使用https://blog.csdn.net/weixin_30550081/article/details/mydumper以与binlog相同的方式导出数据。
但是请注意,在导出之前需要插入一条记录,否则元数据文件中的GTID将是时空的。因为刚刚启用了GTID,所以尚未生成任何记录。
https://blog.csdn.net/weixin_30550081/article/details/mydumper-h 172.20。 51.68-P 3306-u root-p root-B housedata-t 5-F 1--skip-tz-utc-o test
?
以与binlog相同的方式导入数据
https://blog.csdn.net/weixin_30550081/article/details/loader-h 172.18。 100.66-P 4000-u root-t 3-d测试
?
要设置syncer.mate,您需要从元文件中再复制一个binlog-gtid
binlog-name = " mysql-bin.000002 " binlog-pos = 13355 binlog-gtid = " c1d8336d-5d6d-11e8-8ad0-0050563c1c70:1-30 "
?
?要开始同步,您需要添加相应的参数
https://blog.csdn.net/weixin_30550081/article/details/syncer-config config.toml -启用-gtid
?
尽管syncer.mate文件在同步后刷新了binlog-pos,但是binlog-gtid仍然没有刷新。
因此,如果您重新启动,则只能手动再次进行操作,
?