一、概述
问题:使两个不同数据库里个别表的数据一致性。
方案:搭建mysql数据库主从(主主)表数据同步。
二、采取方案原因
由于方便理解在这里我设定两个不同的库为:A库、B库
两个需要同步的表为:A库的aa表------------> B库的aa表
B库的bb表------------> A库的bb表
由上面的举例可以看出我们同步是比较特殊的,相当于双向同步不同表内容
所以,我采用mysql数据库主主式同步,这种方法可以保证数据的完整性,
属于时时同步,使数据可以在第一时间传输到对方的库中,减少了手动传输
出现错误的可能性。
三、 部署过程
如:A库的服务器:192.168.1.1(主)
B库的服务器:192.168.1.2(从)
系统:centos6.4
1. 修改主服务器的mysql配置文件my.cnf
[mysqld]
server_id=1 (mysql主从的标示一般是号码越小的为主)
log_bin=mysql-bin (二进制同步日志文件)
binlog_do_db=A (要同步的库名)
修改完重启mysql
2. 进入主mysql输入
grant replication slave on *.* to 账号@’%’ identifiedby ‘密码’; (创建主从同步账号,从A库到B库)
flush privileges; (立即使用)
show master status; (查看主的配置信息)例如下:
3. 修改从服务器的mysql配置文件my.cnf
[mysqld]
server_id=2
log_bin=mysql-bin
replicate_rewrite_db=A->B (将master库名转换为slave库名)
replicate_do_table=B.aa(指定需要同步的表名)
修改完后重启mysql
4. 进入从mysql输入
stop slave; (关闭slave)
change master to master_host=’ip’,master_user=’用户’,master_password=’密码’,master_connect_retry=60,”(重试连接时间)” master_log_file=’master上查到的file信息’,”(如mysql-bin.000001)” master_log_pos= ’master上查到的Position信息’; “(如399)”
start slave; (开启slave)
5. 这时我们测试:
A库的aa表 ------------>B库的aa表 (院校库表)
是可以同步的,还剩下B库的bb表 ------------>A库的bb表 (审核表)
6. 修改从服务器的mysql配置文件my.cnf(不要消除第一步的配置接着添加)
replicate_rewrite_db=B->A (将slave库名转换为master库名)
replicate_do_table=A.aa (指定需要同步的表名)
修改完重启mysql
7. 修改主服务器的mysql配置文件my.cnf(不要消除已经配好的条件接着添加)
binlog_do_db=B(要同步的库用)
修改完重启mysql
8. 进入从mysql输入
grantreplication slave on *.* to 账号@’%’ identified by ‘密码’; (创建主从同步账号,从B库到A库)
flush privileges; (立即使用)
show master status; (查看主的配置信息)例如下:
9. 进入主mysql输入
stopslave; (关闭slave)
changemaster to master_host=’ip’,master_user=’用户’,master_password=’密码’,master_connect_retry=60,”(重试连接时间)” master_log_file=’slave上查到的file信息’,”(如mysql-bin.000002)”master_log_pos=‘slave上查到的Position信息’; “(如266)”
startslave; (开启slave)
10. 这时B库的bb表 ------------>A库的bb表
四、 总结
这时mysql就可以实现
A库的aa表 ------------>B库的aa表
B库的bb表 ------------>A库的bb表