4

windows下mysql的数据主主同步 - 北城青

 1 year ago
source link: https://www.cnblogs.com/sk777/p/16733372.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

mysql主主备份:

保证各服务器上的数据库中的数据一致,因此需要开启数据库同步机制。由于是一整套系统,并且系统内含数据库。由于任何一台服务器都有可能被选中,因此要让所有的数据库上的数据都是最新的,任何一个服务器上的数据发生变化时都要自动的同步到其他的服务器上。

系统使用的时Mysql数据库,这里采用的时主-主备份机制进行同步的。

主一数据库:192.168.10.7

主二数据库:192.168.10.212

主数据库1:

编辑数据库配置文件

3DDataCenter\64\mysql\my.ini
# 开启二进制同步
log-bin=mysql-bin

# 设置ID,不能重复,可以使用IP最后一位数字 
server-id=129

# 需要同步的数据名称,多个数据库则要重复设置: bin-do-db,bin-ignore-db为互斥关系, 只需设置其中一项即可
replicate-do-db=itv

# 自增长字段初始值为1
auto-increment-offset=2

# 自增长字段增量值
auto-increment-increment=2

# 跳过所有复制的错误
slave-skip-errors=all

2589936-20220927092453636-185445371.png

主数据库2:

编辑数据库

3DDataCenter\64\mysql\my.ini
# 开启二进制同步
log-bin=mysql-bin

# 设置ID,不能重复,可以使用IP最后一位数字 
server-id=128

# 需要同步的数据名称,多个数据库则要重复设置: bin-do-db,bin-ignore-db为互斥关系, 只需设置其中一项即可
replicate-do-db=itv

# 自增长字段初始值为1
auto-increment-offset=1

# 自增长字段增量值
auto-increment-increment=2

# 跳过所有复制的错误
slave-skip-errors=all

2589936-20220927092452469-224490380.png

配置完成后如果项目已经启动则需要重启,若没有启动项目此时启动项目

创建mysql复制账户:

在主一数据库操作:

为主二的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了

在 3DDataCenter\64\mysql\bin 地址栏上面输入cmd

2589936-20220927092452455-643848534.png

登录mysql:

mysql -uroot -p -P3333   //登录mysql
use mysql;
grant replication slave on *.* to root1@'192.168.10.212' identified by 'root1';

2589936-20220927092452527-579551807.png

赋予权限:如果就这样连接的话虽然能访问但还是看不了数据的,所以需要赋予root1权限

GRANT ALL PRIVILEGES ON *.* TO 'root1'@'192.168.10.212' IDENTIFIED BY 'root1' WITH GRANT OPTION;

立即生效:

flush privileges;

2589936-20220927092452432-512530576.png

在主二数据库操作:

为主二的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了

在 3DDataCenter\64\mysql\bin 地址栏上面输入cmd

2589936-20220927092452455-643848534.png

登录mysql:

mysql -uroot -p -P3333   //登录mysql
use mysql;

2589936-20220927092452527-579551807.png
grant replication slave on *.* to root1@'192.168.10.7' identified by 'root1';
GRANT ALL PRIVILEGES ON *.* TO 'root1'@'192.168.10.7' IDENTIFIED BY 'root1' WITH GRANT OPTION;

立即生效:

flush privileges;

测试能否访问:

在主一登录主二的数据库:

mysql -h192.168.10.212 -uroot1 -p -P3333   //登录主二的数据库

2589936-20220927092455731-1378641356.png

继续连接,发现可以连接成功,并且可以查看数据

show databases;  //查看数据库

2589936-20220927092452472-627510844.png

同理,在主二的数据库可以访问主一的数据库看下:

mysql -h192.168.10.7 -uroot1 -p  -P3333   //登录主一的数据库

2589936-20220927092452446-1361055341.png
show databases;  //查看数据库

2589936-20220927092452459-1877385608.png

互告bin-log信息

登录本地的mysql

主主同步还有主从同步都是基于binlog的原理进行,相当于我们打开了这个开关,每次操作数据库都会产生一个binlog日志,然后把binlog日志进行发给对方进行执行,这样数据就保持同步了

首先进入MySQL命令行:

2589936-20220927092455981-1971870676.png

在主数据库1下操作:

查看日志: show master status;

2589936-20220927092452459-365707681.png

设置同步:

change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=47007;

2589936-20220927092453817-1333159679.png

备注: master_log_file与File值一致, master_log_pos与Position值一致

开始同步: start slave;

2589936-20220927092452457-2100462697.png

查看同步情况:

show slave status\G;

当看到了两个yes,即:Slave_IO_Running: Yes

Slave_SQL_Running: Yes

如果是两个yes就说明已经成功

出现报错的情况

说明已经配置成功了,但是这里有一个显示为no,明显有问题

2589936-20220927092456690-129293020.png

解决办法:

stop slave;
reset slave;
start slave;

2589936-20220927092452548-660853358.png

然后我们继续查看同步情况;

show slave status\G;

2589936-20220927092457789-1711018548.png

发现还是报错,只是报错的内容不一样

reset master;
show master status\G;

2589936-20220927092452536-1506154773.png
stop slave;   //这里可能需要等待一会儿



change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=106;

2589936-20220927092452441-1966243987.png

start slave;

2589936-20220927092452408-1850581671.png

show slave status\G;

2589936-20220927092456675-939479569.png

支持主数据库一完成

在主数据库2下操作:

2589936-20220927092452436-1189133485.png

这里其实跟上面的主数库1是一样的操作

show master status;

2589936-20220927092452396-1556499686.png
change master to master_host = '192.168.10.212',master_user='root1',master_password='root1',master_port=3333,master_log_file='mysql-bin.000001',master_log_pos=695;

备注: master_log_file与File值一致, master_log_pos与Position值一致

开始同步:

  start slave;

2589936-20220927092452469-279615212.png

查看同步情况:

 show slave status\G;

2589936-20220927092452469-1570224375.png

如果碰到问题可以根据上面的出现报错的情况处理

测试:在浏览器打开两个页面,我们修改其中一个数据

我们访问192.168.10.7

这是修改前:

2589936-20220927092455830-1826135589.png

2589936-20220927092455997-964191527.png

我们修改一个数据看另外的一个项目数据会不会改变

2589936-20220927092454509-1931702401.png

我们看下另外一个地址

2589936-20220927092452452-1843258934.png

__EOF__


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK