您的位置 首页 经验

MySQL 主主同步配置

这个东西怎么讲呢,没啥技术难度,按照网上的教程走一遍,基本上问题不大,为什么我要摆在这里讲呢? 手里头冗余的小…

这个东西怎么讲呢,没啥技术难度,按照网上的教程走一遍,基本上问题不大,为什么我要摆在这里讲呢?

手里头冗余的小鸡太多了,放着也是放着,索性就弄了一台Azure SG 作为国外访问,准备做的时候,有考虑使用独立的MySQL 作为数据库,但是发现延迟还是有几十ms,库虽然在腾讯云广州节点。不能走内网,也就没必要搞什么站库分离了。

后来又想,国内的MySQL做主库,国外从库,只读不写,但是实验了一圈,还要改动程序,太麻烦了。最后确定使用主主同步的方式,每台数据库都是主库,也是从库,一台数据发生变化,另外一台也随之变化,主要延迟都变成了同步数据的延迟,几十毫秒也没什么差别。

软件环境

两台服务器都是使用CentOS 6.10,数据库版本都是 MySQL 5.7.24,环境安装这里就不讲了。
以本站为例子

腾讯云广州IP:123.207.124.47
Azure SG IP:207.46.227.229

操作方法

首先创建用户
该账户的主要作用是用于数据同步。

qcloud:


1
2
GRANT REPLICATION SLAVE,FILE ON *.* TO 'sync'@'207.46.227.229' IDENTIFIED BY 'passwd';
FLUSH PRIVILEGES;

Azure:


1
2
GRANT REPLICATION SLAVE,FILE ON *.* TO 'sync'@'123.207.124.47' IDENTIFIED BY 'passwd';
FLUSH PRIVILEGES;

sync表示同步的账号,passwd 密码,这里建议使用相同账号密码,IP 与之对应就行。

修改my.cnf
本站所使用的环境为lnmp,一般文件在/etc/ 文件夹下:
腾讯云:


1
2
3
4
5
6
7
8
9
server-id = 1 #唯一标识号,纯数字
log-bin = mysql-bin #启用二进制日志文件
log-slave-updates  #配置从库上的更新操作是否写二进制文件
binlog-do-db = helingqi #只同步的数据库
#binlog-ignore-db=db1 表示不同步的数据库
slave-skip-errors = all #值为all表示让从库跳过所有错误
sync_binlog = 1 #每次提交事务,把二进制日志的内容同步到磁盘上
auto_increment_increment = 1 #表示自增长字段从某个特定数开始
auto_increment_offset = 1 #表示自增长字段每次递增的量

上述一起用于主主同步,用来错开自增,防止键值冲突

Azure:


1
2
3
4
5
6
7
8
server-id = 2
log-bin = mysql-bin
log-slave-updates
binlog-do-db = helingqi #需要同步的数据库
slave-skip-errors = all
sync_binlog = 1
auto_increment_increment = 2
auto_increment_offset = 1

如果需要只配置主从同步,可以在从库上配置:replicate-do-db(同步的数据库)、replicate-ignore-db(从库不复制)、replicate_wild_do_table和replicate_wild_ignore_table。

分别上传my.cnf,然后重启MySQL,命令模式,分别输入


1
SHOW MASTER status\G;

注意”File”和”Position”的值

腾讯云:


1
2
3
     File: mysql-bin.000001
     Position: 7358
     Binlog_Do_DB:   Binlog_Ignore_DB: mysql,information_schema,performance_schema Executed_Gtid_Set:  1 row in set (0.00 sec)

Azure:


1
2
3
     File: mysql-bin.000001
     Position: 1063
     Binlog_Do_DB:   Binlog_Ignore_DB: mysql,information_schema,performance_schema Executed_Gtid_Set:  1 row in set (0.00 sec)

使用CHANGE MASTER 指定同步位置,两个主库都需要设置

腾讯云:


1
2
STOP SLAVE;
CHANGE MASTER TO master_host='207.46.227.229',master_user='sync',master_password='GonDMLqiJ5yx',master_log_file='mysql-bin.000001', master_log_pos=7358;

Azure:


1
2
STOP SLAVE;
CHANGE MASTER TO master_host='123.207.124.47',master_user='sync',master_password='GonDMLqiJ5yx',master_log_file='mysql-bin.000001', master_log_pos=1063;

启动复制


1
STOP SLAVE;

查看状态

mysql> show slave statusG;

主要关注以下 2 个参数:

… 
… 
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes 
… 

如下图,表示正常。

TIM截图20190118211646.png

其他:
我在配置的时候,出现过如下错误

Slave_IO_Running:No ERROR 1872 (HY000): Slave failed to initialize
relay log info structure from the repository

附上一个解决办法:

mysql> reset slave; 
Query OK, 0 rows affected (0.04 sec)

mysql> start slave IO_THREAD; 
Query OK, 0 rows affected (0.07 sec)

mysql> stop slave IO_THREAD;
Query OK, 0 rows affected (0.01 sec)

mysql> reset slave; 
Query OK, 0 rows affected (0.10 sec)

mysql> start slave; 
Query OK, 0 rows affected (0.20 sec)

mysql> show slave statusG

更多细节,还待发现。

本文来自网络,不代表鑫云博客立场,转载请注明出处:http://vp.y6a.net/archives/2079

作者: admin

发表评论

电子邮件地址不会被公开。 必填项已用*标注

联系我们

联系我们

在线咨询: QQ交谈

邮箱: admin@xinteam.net

工作时间:周一至周五,9:00-17:30。
关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部
鑫云博客cnzz&51la for wordpress,cnzz for wordpress,51la for wordpress