MySQL数据库双向同步

2014-11-24 18:43:17 · 作者: · 浏览: 2

项目申请了两台数据库服务器,为了保持数据同步,就搞了个数据同步,以此文记录以备后续使用:


首先声明:


数据库服务器A,ip地址:192.168.6.108


数据库服务器B,ip地址:192.168.6.200


当然 首先要备份一台数据最新的数据库,然后等设置同步完毕之后都还原成相同的数据!


先做B同步A数据库的数据功能:


暂时称A为主机Master、B为从机Slave


A主机Master


1、修改mysql数据库conf文件,修改/etc/my.conf



# Replication Master Server (default)


# binary logging is required for replication


之后增加


2、重启mysql


(CentOS是serice mysqld restart 其他系统的自行重启 若不知请谷歌、度娘)


3、创建一个MySQL帐号为同步专用


用root用户登陆mysql


mysql> grant replication slave,reload,super on *.* to backup@192.168.5.200 identified by 'backup';


mysql> flush privileges;


ps:我这里是创建了一个backup用户密码也是backup的mysql数据库用户,用于同步。@后面指定该账户允许远程登录的ip,也就是B从机的ip地址


B从机Slave


1、同样的修改mysql数据库conf文件,修改/etc/my.conf



# Replication Master Server (default)


# binary logging is required for replication


之后增加


启动同步


在主服务器A上,mysql命令下(root用户登陆mysq)


mysql> show master status;


eg:


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+


| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+


| mysql-bin.000012 | 106 | mydb_name | mysql |


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+


从服务器B上,mysql命令下(同样用root用户登陆mysq)


mysql> slave stop;


mysql> change master to master_log_file='mysql-bin.000012',master_log_pos=106;


mysql> slave start;


ps:


master_log_file就是在主服务器mysql下show master status;显示的File列的值


master_log_pos就是在主服务器mysql下show master status;显示的Position列的值


还是在从服务器B的mysql命令下


用show slave status \G;看一下从服务器的同步情况


mysql>show slave status \G;


有如下两项的值都是YES就表示已经在同步


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


否则就是同步失败,当然了,失败的原因有N种,自己慢慢谷歌、度娘,这里只把我自己的操作步骤记录。


设置MySQL双向同步


其实设置双向同步就是把上面的步骤重复一下,只是A和B服务器的操作反过来,A变成从服务器、B变成主服务器!


1、修改B服务器的my.conf,添加


2、重启B服务器的mysql (service mysqld restart)


3、登陆mysql,


mysql> grant replication slave,reload,super on *.* to backup@192.168.5.108 identified by 'backup';


mysql> flush privileges;


ps:创建一个backup用户,密码也是backup的mysql数据库用户,用于同步。@后面指定该账户允许远程登录的ip,也就是A从机的ip地址。


4、修改A服务器的my.cnf,添加


5、重启A服务器的mysql(service mysqld restart)


6、在主服务器B MySQL命令符下:


mysql> show master status;


eg:


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+



| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+


| mysql-bin.000014 | 188 | mydb_name | mysql |


+一一一一一一一一一一+一一一一一一+一一一一一一一一+一一一一一一一一一一+


7、在服务器A MySQL命令符下:


mysql> slave stop;


mysql> change master to master_log_file='mysql-bin.000014',master_log_pos=188;


mysql> slave start;


8、还是在从服务器A的mysql命令下


用show slave status \G;看一下从服务器的同步情况


mysql>show slave status \G;


有如下两项的值都是YES就表示已经在同步


Slave_IO_Running: Yes


Slave_SQL_Running: Yes


然后还原数据至最新数据库!


至此 双向同步配置完毕!


ps:因为是基于操作日志备份,所以设置同步前请把数据库先备份,然后用用一份备份还原数据库,之后数据就可以保持一致!