Free yourself from fixing complex.
eleven

测试环境:
两台安装有 mysql Ver 14.14 Distrib 5.5.28 For Linux的Ubuntu 12.04服务器, 分别表示为A(172.16.0.3)和B(172.16.0.4). 如果mysql版本低于5.5,方法可能有些许差别。

  1. 修改数据库配置文件 /etc/my.cnf :

    • 修改A(172.16.0.3)的my.cnf文件,追加以下内容:
      [cc lang="bash"]
      server-id = 1 # 任意整数均可,只是注意不同的服务器ID保持不同。
      binlog\_cache\_size=4m
      max\_binlog\_size=300m
      binlog-do-db=some\_database #需要同步的数据库
      binlog-ignore-db=mysql #不需要同步的数据库
      log-slave-updates
      replicate-do-db=some\_database
      replicate-ignore-db=mysql
      [/cc]
    • 修改B(172.16.0.4)的my.cnf文件,追加以下内容:
      [cc lang="bash"]
      server-id = 1 # 任意整数均可,只是注意不同的服务器ID保持不同。
      binlog\_cache\_size=4m
      max\_binlog\_size=300m
      binlog-do-db=some\_database #需要同步的数据库
      binlog-ignore-db=mysql #不需要同步的数据库
      log-slave-updates
      replicate-do-db=some\_database
      replicate-ignore-db=mysql
      [/cc]
      然后使用service mysql restart命令重启两台机器的mysql服务。
  2. 添加两个同步用户:

    • 在A(172.16.0.3)上运行:
      [cc lang="sql"]
      grant replication slave on *.* to username@172.16.0.4 identified by 'PASSWORD\_HERE'; #注意这里出现的IP地址应该是B机器的。
      [/cc]
    • 在B(172.16.0.4)上运行:
      [cc lang="sql"]
      grant replication slave on *.* to username@172.16.0.3 identified by 'PASSWORD\_HERE'; #注意这里出现的IP地址应该是A机器的。
      [/cc]- 设置主从关系:

      • 以root身份分别进入两台机器的mysql命令行,然后在A(172.16.0.3)上运行:
        [cc lang="sql"]mysql> show master status;[/cc]
        返回:

        +------------------+----------+-------------------+------------------+
        | File             | Position | Binlog_Do_DB      | Binlog_Ignore_DB |
        +------------------+----------+-------------------+------------------+
        | mysql-bin.000015 |   110041 | some_database     | mysql            |
        +------------------+----------+-------------------+------------------+
        1 row in set (0.00 sec)

        记住其中的file文件的数字后缀和Position值。

      • 转到B(172.16.0.4)上的mysql shell上,执行下面三条命令:
        [cc lang="sql"]
        mysql> stop slave;
        mysql> change master to master\_host='172.16.0.3',master\_user='username',master\_password='PASSWORD\_HERE',master\_port=3306,master\_log\_file='mysql-bin.000015',master\_log\_pos=110041;
        mysql> show slave status\G
        [/cc]
        如果结果中出现:
        Slave\_IO\_Running: Yes
        Slave\_SQL\_Running: Yes
        则表明两台服务器的主从设置完成,其中A(172.16.0.3)为主服务器,而B(172.16.0.4)为从服务器。

最后,如果想实现互为主从双向同步,只需将第三步反过来执行一遍即可,不再赘述。

2013-09-04