一、简述
两台服务器互为主从,在一台服务器上有更新操作(增删改)时,另一台服务器上的mysql同步到数据库也有相同的操作,需要利用mysql的主从同步的原理,实现mysql的双向同步。 在企业中的项目开发中会用到mysql的主从复制,为了实现数据实时备份,我们自己做小的项目的时候肯定没必要使用。
二、步骤
1、配置my.ini文件 (强烈建议使用两个相同版本的mysql,本人测试的是5.0.27)
(1)server-id 标识 主从数据库设置的都不能相同
(2)bin-log 数据库二进制文件的存储地址
(3)binlog-do-db 需要同步的数据库
(4)binlog-ignore-db 不需要同步的数据库
(5)max_allowed_packet=20M
2、在两台服务器上的mysql中分别创建两个用户
在192.168.0.119上运行
grant replication slave on *.* to slaveuser@192.168.0.119 identified by '123456';
在192.168.0.50上运行
grant replication slave on *.* to slaveuser@192.168.0.50 identified by '123456';
注:等测试的时候你一定会想,这两个用户又不需要登录,并没有用到,但是为什么要创建这两个用户并赋予其一定的权限呢,我们的root是拥有所有的权限,真的是有点多此一举啊,其实不然,这个用户虽然不用登录,但是想过没,我们的二进制日志文件在主mysql中,将sql命令全部存在了配置文件中指定的第一个日志文件中,然后从mysql需要通过IO线程读取这个日志文件到从服务器的mysql中,然后使用sql线程进行操作。这个过程是谁实现的呢,毫无疑问是这个用户实现的。所以创建这个用户是有必要的。
3、设置主机并且启动从服务
在服务器server1:192.168.0.165上用MySQL命令行工具执行如下语句:
mysql> show master status;
得到的结果如下
+---------------------+------------+---------------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------+------------+---------------------+--------------------------+
| mysql-bin.000020 | 107 | ctbsdb | mysql |
+---------------------+------------+---------------------+--------------------------+
1 row in set (0.00 sec)
再到服务器server2:192.168.0.50上打开mysql命令
mysql> stop slave;
mysql> change master to master_host='192.168.0.50',master_user='slaveuser',master_password='123456',master_port=3306,master_log_file='mysql-bin.000020',master_log_pos=107;
mysql> start slave;
mysql> show slave status\G
查看如下两项,得到的结果为Yes即表示正常。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
操作到此步即已完成两台服务器的主从同步,接下来是把server1(192.168.0.119)作为主,server2(192.168.0.50)作为从服务器来设置。
4、反过来重新执行第三部就ok了,就会将server1(192.168.0.50)作为主,server2(192.168.0.119)作为从服务器