现在的位置: 首页 > 综合 > 正文

MYSQL的数据同步试验

2013年12月08日 ⁄ 综合 ⁄ 共 2879字 ⁄ 字号 评论关闭

一、 试验目的
    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上的版本一致。

抱歉!评论已关闭.