一、 试验目的
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 |
推荐使用最新版本,并且Master与Slave上的版本一致。