solaris上实现mysql的双机热备功能-同时处理复制冲突
时间:2009-05-19 来源:cj_gameboy
本周二,在solaris上实现了两个数据库之间的双机复制功能,在配置过程中间,回头看了看前些日子写的在win上配置双机复制的文字,感觉还是有些东西写错了,暂时懒的改了,就以这篇文档中的内容为准,在此对所有阅读过上篇文档的同仁们表示歉意。
一、配置要求:
两台主机A机 10.144.15.200;B机10.144.15.234;同步数据库名为cai,测试用表名为test,测试时,双机均为solaris机器,但其中一台为sparc另外一台为x86机型;
二、配置单向的数据流:(配置B机向A机的传输)
1.在两台主机上安装mysql服务;
2.在两台主机上增加用户cai,密码cai
GRANT ALL PRIVILEGES ON *.* TO 'cai'@’%’ IDENTIFIED BY ‘cai’ WITH GRANT OPTION;
该操作只能在本机上进行;进行完成后可以远程登录进行测试;
找到mysql安装目录,在bin文件夹下找到mysql可执行程序,用命令登录对侧机器:
mysql -h10.144.15.52 -u cai -p 进行登录;
3.在两台主机上增加相应的数据库
GREATE database cai
4.在两台主机上增加相应的表
CREATE table test (
name VARCHAR(20) NOT NULL default '',
age int(3) unsigned NOT NULL,
PRIMARY KEY (name));
5.配置主机B上的my.cnf,该文件默认存放在product目录下
先将主机mysql停止,
mysqladmin –uroot shutdown
然后在my.cnf文件中找到[mysqld]部分,在其后面增加如下语句
server-id=1
log-bin= /export/home/mysql/data/log
这两句话的意思是将二进制文件保存在 /export/home/mysql/data下,而主机ID设为1;再启动mysql服务(在mysql目录下的bin目录下键入mysqld_safe&);
启动后,检查是否配置修改成功就是用show master status,如果发现查询不到结果,则说明修改的配置文件无效。
6.配置主机A上的my.cnf,将主机mysql停止(同上一步中停止mysql的步骤),在my.cnf文件中找到[mysqld]部分,在其后面增加如下语句
server-id=2
log-bin=/export/home/mysql/data/log
#从库是否只读,0表示可读写,1表示只读
read-only=0
#只复制某个库
replicate-do-db=backup
#复制完的sql语句是否立即从中继日志中清除,1表示立即清除
relay-log-purge=1
report-host=10.144.15.200 //自己IP
slave-skip-errors=all //出错不停止复制功能
7.启动mysql服务,在mysql界面下键入如下命令:
mysql> CHANGE MASTER TO
-> MASTER_HOST='10.144.15.234', //对侧IP
-> MASTER_USER='cai',
-> MASTER_PASSWORD='cai';
mysql> start slave;
8.使用命令 show processlist\G可以查看当前运行的mysql主从服务。使用
insert into test values(hh,11)命令进行测试,查看从机是否可以同步;
三、配置反向的数据流:(配置A机向B机的传输)
只要在B机的my.cnf中,增加上述A机上步骤6、7的配置即可。
四、删除旧的备份文件
可以使用sql语句:
PURGE MASTER LOGS BEFORE DATE_SUB(now(), INTERVAL 3 DAY);
五、冲突解决
正常情况下,如果,两机断线,而此时,如果在A机和B机上进行冲突操作。如A机上增加记录3、4、5,而B机上增加记录4、5、6,则记录4、5会发生冲突。在网线重新恢复链接的时候,该数据双热备复制会导致复制功能挂起。需要重新启动复制,才能使复制功能恢复。(start slave)
所以,这里特别注意配置文件中这样一条:
slave-skip-errors=all //出错不停止复制功能
配置该语句后,相应的错误不会引起复制功能的挂起。原数据库之所以在遇到冲突语句后挂起复制,是因为数据库的数据一致性要求,所以,遇到问题必须终止待dba进行手动操作,保证各节点的数据一致性。但由于我们应用高持续性和低数据一致性的要求,这里增加该配置,使得在冲突发生的时候,数据库复制功能不挂起,而允许两库之间的数据存在不一致。
|