max下载地址http://download.chyangwa.com/linux/MySQL/
Mysql作为一种开源的数据库系统得到广泛使用,但象同步数据复制这样的特性,Mysql支持的如何呢?以下是我曾经作过的一个试验,验证了linux-linux、linux-windows 进行动态数据复制和主从备份的可行性。
一、 试验目的
replication的好处:
1)提高数据库健壮性。当一台服务器出现问题,可以切换到作为备份的另一台服务器。
2)通过分离大量的客户端查询处理,可以达到更好的相应时间。SELECT查询可以放到slave上,减少master上的查询处理。修改数据的语句仍然放到master上处理。这样可以使得master与slave同步,也可以作为一种load-balancing策略。
3)在进行数据处理的同时进行实时的数据备份。
本次测试MySQL动态数据复制和主从备份的可行性。
二、 步骤
1. 测试环境
A:10.1.9.241 Red linux 9.0 MySQL 4.0.18
B:10.1.9.232 Red linux 9.0 MySQL 4.0.18
C:10.1.9.237 Windows 2000 Professional MySQL 4.0.18
2. 配置过程
A服务器设置
#mysql -u root -p
mysql>GRANT FILE ON *.* TO repl@10.1.9.232 IDENTIFIED BY '1234';
mysql>GRANT REPLICATION SLAVE on *.* to repl@10.1.9.232 identified by '1234';
mysql>GRANT FILE ON *.* TO repl@10.1.9.237 IDENTIFIED BY '1234';
mysql>GRANT REPLICATION SLAVE on *.* to repl@10.1.9.237 identified by '1234';
mysql>USE test;
mysql>CREATE TABLE t1 (A INT, B CHAR (20));
mysql>exit
上面是Master开放一个账号repl密码1234给IP: 10.1.9.232有档案处理的权限。在test数据库中建立customer表用于测试
#mysqladmin -u root -p shutdown
在A机器上修改/etc/my.cnf
在[mysqld]区段内加入参数
log-bin
server-id=1
binlog-do-db=test
重启A服务器mysql
#/usr/bin/safe_mysqld &
此时因为加入log-bin参数,因此开始有index产生了,在/var/lib/mysql目录下有.index档案纪录数据库的log。
#mysql -u root -p
mysql>show master status;
mysql>show processlistG;
查看主服务器配置和线程情况
B服务器设置
#mysql -u root -p
mysql>USE test;
mysql>CREATE TABLE t1 (A INT, B CHAR (20));
mysql>exit
在test数据库中建立customer表用于测试
关闭MySQL数据库服务器
#mysqladmin -u root -p shutdown
设定/etc/my.cnf
在[mysqld]区段加入
master-host=10.1.9.212
master-user=repl
master-password=1234
master-port=3306
server-id=2
master-connect-retry=60 #预设重试间隔60秒
replicate-do-db=test #告诉slave只做vbb数据库的更新
log-slave-updates
重启B服务器mysql
#/usr/bin/safe_mysqld &
#mysql -u root -p
mysql>show slave status;
mysql>show processlistG;
查看从服务器配置和线程情况
注意:由于设置了slave的配置信息,mysql在/var/lib/mysql目录下生成master.info
所以如有要修改相关slave的配置要先删除该文件。否则修改的配置不能生效。
3. 测试
在A服务器上进行insert、update、delete操作
#mysql -u root -p
mysql>use test;
mysql>select * from customer;
mysql>insert into customer(1,'a1');
mysql>insert into customer(2,'a2');
mysql>insert into customer(3,'a3');
mysql>update customer set a=10,b='a10' where a=1;
mysql>delete from customer where a=1;
mysql>select * from customer;
在A上每个DML语句执行后查看B服务器上数据的变化情况
#mysql -u root -p
mysql>use test;
mysql>select * from customer;
三、 结论
在A上执行DML语句后,B中相应的数据随之变化,实时进行了replication,试验成功。
四、 注意事项
1. 本次试验在两个linux操作系统环境下进行,没有进行windows-linux等异构操作环境测试。
2. 由于MySQL不支持过程语言,所以本次试验没有进行大数据量测试。可编写应用程序进行大数据量测试。
3. Mysql在3.23.15版本后支持replication。并且存在版本兼容性问题,具体冲突由下表所示:
Master
Master
Master
3.23.33 and up
4.0.3 and up or any 4.1.x
5.0.0
Slave 3.23.33 and up
Yes
No
No
Slave
4.0.3 and up
Yes
Yes
No
Slave
5.0.0
Yes
Yes
Yes