龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

手把手教你实现MySQL双机数据同步(1)

时间:2011-04-12 23:18来源:未知 作者:admin 点击:
分享到:
编者按:很多朋友一开始接触MySQL双机同步需求的时候可能会感到不知道从哪里入手,事实上这是MySQL本身就支持的功能之一。本文提供有关MySQL主从同步的初步思路,供大家参考。 一

编者按:很多朋友一开始接触MySQL双机同步需求的时候可能会感到不知道从哪里入手,事实上这是MySQL本身就支持的功能之一。本文提供有关MySQL主从同步的初步思路,供大家参考。

一.需求问题

假设目前有两台 MySQL 数据库服务器,如何实现这两台机器的数据同步问题?即在一台机器上修改数据库后,另一台机器会同步更新所修改的信息。

二.解决方案

查资料发现 MySQL 支持单向,异步复制,复制过程中一个服务器充当主服务器,而另一个或多个其他服务器充当从服务器。

原理是这样的:

主服务器将更新写入二进制日志文件,并维护文件的一个索引来跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接受从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

2.1 测试环境

  1. Master : 192.168.7.67 (CentOS 5.5  x86_64 )   MySQL Version  :  5.0.77  
  2. Slave: 192.168.56.103 (CentOS 5.3 i386)  MySQL  Version : 5.0.45 

备注:

Master 和 slave 端的 MySQL 版本最好要一样的,或者 Master 端的版本高于 Slave 端

2.2 配置过程

2.2.1 Master 端设置

开启 MySQL 服务并新建一个测试数据库 abc:

  1. root@camlit ~: /etc/init.d/mysqld start   
  2. jian.ma@camlit  ~: mysql -u root -p   
  3. Enter password: xxxx  
  4. Welcome to the MySQL monitor.  Commands end with ; or g.   
  5. Your MySQL connection id is 3   
  6. Server version: 5.0.77 Source distribution   
  7.  
  8. Type 'help;' or 'h' for help. Type 'c' to clear the buffer.   
  9.  
  10. mysql> create database abc;   
  11. Query OK, 1 row affected (0.31 sec)  
  12.  
  13. ###创建一个用来同步的用户,指定只能在 192.168.56.103 登录  
  14. ###REPLICATION SLAVE: Enable replication slaves to read binary log events from the master  
  15.  
  16. mysql> grant replication slave on *.* to 'test1'@'192.168.56.103' identified by 'test1';   
  17. Query OK, 0 rows affected (0.16 sec)  

修改配置文件:

  1. root@camlit ~: vi /etc/my.cnf 

备注:在修改配置文件之前做好该文件的备份工作。

  1. [mysqld]   
  2. datadir=/var/lib/mysql   
  3. socket=/var/lib/mysql/mysql.sock   
  4. user=mysql   
  5. old_passwords=1   
  6.  
  7. ##增加下面内容  
  8. server_id=1###1 表示 master, 2 表示 slave   binlog-do-db=abc ###需要同步的数据库,如果有多个数据库,每个数据库一行  binlog-ignore-db=mysql###不需要同步的数据库 log-bin=mysql-bin   
  9.    
  10. [mysqld_safe]   
  11. log-error=/var/log/mysqld.log   
  12. pid-file=/var/run/mysqld/mysqld.pid  

重启服务:

  1. root@camlit ~: /etc/init.d/mysqld restart  

2.2.2  Slave 端设置

和 master 端一样创建一个相同的数据库: abc

  1. Enter password:   
  2. Welcome to the MySQL monitor.  Commands end with ; or g.   
  3. Your MySQL connection id is 5   
  4. Server version: 5.0.45-log Source distribution   
  5.    
  6. Type 'help;' or 'h' for help. Type 'c' to clear the buffer.   
  7.    
  8. mysql> create database abc;   
  9. Query OK, 1 row affected (0.31 sec) 

修改配置文件:

  1. root@test2 ~: vi /etc/my.cnf 

  1. [mysqld]   
  2. datadir=/var/lib/mysql   
  3. socket=/var/lib/mysql/mysql.sock   
  4. user=mysql   
  5. old_passwords=1   
  6.    
  7. ###增加下面内容  
  8. server_id=2   log-bin=mysql-bin   master-host=192.168.7.67   master-user=test1   master-password=test1   master-port=3306   master-connect-retry=10  ###连接次数  replicate-do-db=abc   ###接受的数据库名  replicate-ignore-db=mysql  ###不要接受的数据库  
  9.    
  10. [mysqld_safe]   
  11. log-error=/var/log/mysqld.log   
  12. pid-file=/var/run/mysqld/mysqld.pid  

重启服务:

  1. root@test2~: /etc/init.d/mysqld restart  

备注:

配置成功 后会在 mysql 目录(/var/lib/mysql/)下生成 master.info 文件,如果要更改 slave 设置,要先将该文件删除才会起作用。

进入 mysql,输入下面命令:

  1. root@test2~: mysql -u root -p  
  2. Enter password:   
  3. Welcome to the MySQL monitor.  Commands end with ; or g.   
  4. Your MySQL connection id is 4   
  5. Server version: 5.0.45-log Source distribution   
  6.    
  7. Type 'help;' or 'h' for help. Type 'c' to clear the buffer.   
  8.    
  9. mysql> slave start;   
  10. Query OK, 0 rows affected, 1 warning (0.00 sec)   
  11. ###查看同步情况  
  12. mysql > show slave status;  或 show master status;  

2.3 结果测试

在 Master 端进行数据库 abc 的一些操作,如下所示:

  1. jian.ma@camlit ~: mysql  -u root -p   
  2. Enter password:   
  3. Welcome to the MySQL monitor.  Commands end with ; or g.   
  4. Your MySQL connection id is 3   
  5. Server version: 5.0.77-log Source distribution   
  6.    
  7. Type 'help;' or 'h' for help. Type 'c' to clear the buffer.   
  8.    
  9. mysql> use abc;   
  10. Database changed   
  11. mysql> create table test1 (IP VARCHAR(20),USER VARCHAR(100), MAIL   
  12. VARCHAR(100));   
  13. Query OK, 0 rows affected (1.20 sec)   
  14. mysql> insert into test1(IP,USER,MAIL) values('192.168.7.66''test''test@test.com.cn');   
  15. Query OK, 1 row affected (0.06 sec)  

在 Slave 端查看是否能够更新:

  1. root@test2 ~: mysql -u root -p   
  2. Enter password:   
  3. Welcome to the MySQL monitor.  Commands end with ; or g.   
  4. Your MySQL connection id is 6   
  5. Server version: 5.0.45-log Source distribution   
  6.    
  7. Type 'help;' or 'h' for help. Type 'c' to clear the buffer.   
  8.    
  9. mysql> show databases;   
  10. +--------------------+   
  11. Database   |   
  12. +--------------------+   
  13. | information_schema |   
  14. | foo|   
  15. | mysql  |   
  16. | test   |   
  17. |abc  |   
  18. +--------------------+   
  19. 5rows in set (0.00 sec)   
  20. mysql> use abc;   
  21. Reading table information for completion of table and column names   
  22. You can turn off this feature to get a quicker startup with -A   
  23. Database changed   
  24. mysql> show tables;   
  25. +---------------+   
  26. | Tables_in_abc |   
  27. +---------------+   
  28. | test1 |   
  29. +---------------+   
  30. 1 row in set (0.03 sec)   
  31.  mysql> select * from test1;   
  32. +--------------+------+------------------+   
  33. | IP   | USER | MAIL |   
  34. +--------------+------+------------------+   
  35. | 192.168.7.66 | test | test@test.com.cn |   
  36. +--------------+------+------------------+   
  37. 1 row in set (0.00 sec)  

从上面的结果可以看到 Master 端的数据可以同步到 Slave 端里面。说明此时主从数据库的同步问题已经成功解决。


精彩图集

赞助商链接