1 背景介绍
学校内部有一台服务器(3g服务器),上面部署着uvge网站。在上海有一台服务器(上海服务器)。考虑到校外用户访问uvge网站时速度很慢,先决定在上海服务器上也部署个相同的网站,当外网用户想访问uvge网站时就访问上海服务器上的网站。
现在就需要解决一个问题:如何让校外用户浏览校内用户发表的帖子,校内用户也能浏览校外用户发表的帖子?
解决办法就是采用mysql的双向同步技术
2 Mysql单向同步配置步骤
mysql的同步机制是基于日志的同步机制,所以主服务器一定要支持更改日志才行。然后设置要写入日志的数据库或者不要写入日志的数据库。这样只有您感兴趣的数据库的更改才写入到数据库的日志中。
前期准备:两台服务器上都已将网站部署好,两台服务器上的数据库也是一模一样。这里的数据库一摸一样是指所需要同步的表的内容一样,两个数据库的版本可以不一样。这里所做的是双向同步,所以两台服务器互为主从关系。
为了方便,上海服务器简称ucwise,学校服务器简称3g。
2.1 配置主数据库(ucwise)的my.ini文件
server-id=1 //数据库的id这个应该默认是1就不用改动
log-bin=log_name //日志文件的名称,这里可以制定日志到别的目录 如果没有设置则默认主机名的一个日志名称。
binlog-do-db=db_name //记录日志的数据库。
binlog-ignore-db=db_name //不记录日志的数据库。
以上的如果有多个数据库用","分割开。
auto-increment-offset=1 //表中第一条数据的编号(id)。
auto-increment-increment=2 //设置自动增量,向表中没添加一条数据,数据的id自动增2。这样就保证了主数据库中数据的id为1,3,5,7…..的形式。
2.2 为主库设置创建同步用户及赋权
先连接到主库中,
mysql> grant all privileges on *.* to'访问该数据库的用户名'@'可以访问该数据库的ip'identified by '访问该数据库用的密码'。;
mysql>flush privileges; 使生效
2.3 锁定数据库
mysql> flush tables with read lock;
这一步很重要,如果不锁定主数据库,那么其他用户还能对数据库里的数据进行写操作。一旦对主数据库进行了写操作,那么主从数据库里的内容就不一致了,在以后的同步过程中可能会出现错误。
2.4 配置从数据库(3g)的my.ini文件
在从数据库的my.ini文件中找到[mysqld]模块下,并添加一下内容:
server-id = 2
master-connect-retry =60 //从服务器发现主服务器断掉,重连时间差(秒)
replicate-do-db = testdb //同步数据库:多个写多行
auto_increment_offset = 2 //表中第一条数据的id号
auto_increment_increment = 2//向表中每添加一条数据,id好自动增2.这就保证了该表中数据的id格式为:2,4,6,8….
这样主从库同步时就不会出现id号冲突了。
配置完毕保存后,增加了master.info与relay-log.info等文件。
停止MYSQL服务,删除data目录下除数据库外的所有文件, master.info和relay-log.info两文件必须删除。
注意:master修改my.ini时,master.info和relay-log.info必须删除重启服务。
2.5 查