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
主数据库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
配置完成后如果项目已经启动则需要重启,若没有启动项目此时启动项目
创建mysql复制账户:
在主一数据库操作:
为主二的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了
在 3DDataCenter\64\mysql\bin 地址栏上面输入cmd
登录mysql:
mysql -uroot -p -P3333 //登录mysql
use mysql;
grant replication slave on *.* to root1@'192.168.10.212' identified by 'root1';
赋予权限:如果就这样连接的话虽然能访问但还是看不了数据的,所以需要赋予root1权限
GRANT ALL PRIVILEGES ON *.* TO 'root1'@'192.168.10.212' IDENTIFIED BY 'root1' WITH GRANT OPTION;
立即生效:
flush privileges;
在主二数据库操作:
为主二的所在的ip创建一个账号密码为root1,这样就能够允许远程访问本机数据库了
在 3DDataCenter\64\mysql\bin 地址栏上面输入cmd
登录mysql:
mysql -uroot -p -P3333 //登录mysql
use mysql;
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 //登录主二的数据库
继续连接,发现可以连接成功,并且可以查看数据
show databases; //查看数据库
同理,在主二的数据库可以访问主一的数据库看下:
mysql -h192.168.10.7 -uroot1 -p -P3333 //登录主一的数据库
show databases; //查看数据库
互告bin-log信息
登录本地的mysql
主主同步还有主从同步都是基于binlog的原理进行,相当于我们打开了这个开关,每次操作数据库都会产生一个binlog日志,然后把binlog日志进行发给对方进行执行,这样数据就保持同步了
首先进入MySQL命令行:
在主数据库1下操作:
查看日志: show master status;
设置同步:
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;
备注: master_log_file与File值一致, master_log_pos与Position值一致
开始同步: start slave;
查看同步情况:
show slave status\G;
当看到了两个yes,即:Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如果是两个yes就说明已经成功
出现报错的情况
说明已经配置成功了,但是这里有一个显示为no,明显有问题
解决办法:
stop slave;
reset slave;
start slave;
然后我们继续查看同步情况;
show slave status\G;
发现还是报错,只是报错的内容不一样
继续输入
reset master;
show master status\G;
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;
start slave;
show slave status\G;
支持主数据库一完成
在主数据库2下操作:
这里其实跟上面的主数库1是一样的操作
show master status;
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;
查看同步情况:
show slave status\G;
如果碰到问题可以根据上面的出现报错的情况处理
测试:在浏览器打开两个页面,我们修改其中一个数据
我们访问192.168.10.7
这是修改前:
我们修改一个数据看另外的一个项目数据会不会改变
我们看下另外一个地址
同步成功