关于mysql主从复制(单向、双向、环状)

数据库 / 2013年02月28日 09时52分 / 14691人浏览
搭建mysql的master-slave环境  单向 1)分别在host1(192.168.1.111)和host2(192.168.1.112)上安装mysql(本次测试版本为5.0.45),具体安装方法可见官方文档 2)配置master 首先编辑/etc/my.cnf,添加以下配置: log-bin=mysql-bin #slave会基于此log-bin来做replication server-id=1 #master的标识 #binlog-do-db = test #用于master-slave的具体数据库 不设置此选项则 所有数据库同步 然后添加专门用于replication的用户: mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.1.112 IDENTIFIED BY 'root_m'; 此处 用户 root_m mysql账号需要存在 且%权限 重启mysql,使得配置生效: /etc/init.d/mysqld restart 或 netstat -natup kill pid bin/mysqld_safe --user=mysql & 启动mysql服务 最后查看master状态: mysql> show master status -> ; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000005 | 98 | | | +------------------+----------+--------------+------------------+ 3)配置slave 首先编辑/etc/my.cnf,添加以下配置: server-id=2 #slave的标示 配置生效后,配置与master的连接: mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.1.111', -> MASTER_USER='root_m', -> MASTER_PASSWORD='root_m', -> MASTER_LOG_FILE='mysql-bin.000005', -> MASTER_LOG_POS=98; 其中MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息 最后启动slave: mysql> start slave; ------------------------------ master-slave环境 双向  (在单向主从基础上) 1)在 slave 服务器上配置 master 服务 首先编辑/etc/my.cnf,添加以下配置: log-bin=mysql-bin #slave会基于此log-bin来做replication server-id=2 #master的标示 #binlog-do-db = test #用于master-slave的具体数据库 不设置此选项则 所有数据库同步 然后添加专门用于replication的用户: mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.1.111 IDENTIFIED BY 'root_m'; 此处 用户 root_m mysql账号需要存在 且%权限 重启mysql,使得配置生效: /etc/init.d/mysqld restart 或 netstat -natup kill pid bin/mysqld_safe --user=mysql & 启动mysql服务 最后查看master状态: mysql> show master status -> ; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000003 | 98 | | | +------------------+----------+--------------+------------------+ 2)配置slave 在192.168.1.111 首先编辑/etc/my.cnf,添加以下配置: 配置生效后,配置与master的连接: mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.1.112', -> MASTER_USER='root_m', -> MASTER_PASSWORD='root_m', -> MASTER_LOG_FILE='mysql-bin.000003', -> MASTER_LOG_POS=98; 最后启动slave: mysql> start slave; ------------------------------ master-slave环境 环状  前提:需要三台或三台以上数据库服务器。都安装了相同版本的mysql. 现在已有三台数据库服务器为例:A(192.168.1.111)、B(192.168.1.112)、C(192.168.1.113) mysql_3   说明: A是B的主服务器,B是C的主服务器,C是A的主服务器。 这样就组成了一个环状结构。 目的:是要实现在ABC三台任意一台数据服务器上执行数据操作,其它任意两台都要同步实现相同的操作。 1.)配置三台mysql服务器开启相关配置(修改my.cnf) a. 3台数据库服务器都需要添加log-slave-updates = on b. server-id = 1[2/3] 这项配置时id号不能相同 c. log-bin=mysql-bin 必须开启 d.binlog-do-db = test 用于master-slave的具体数据库 不设置此选项则 所有数据库同步 修改完成后重启mysql。 2.)在每台数据库服务器上为slave创建一个用户并授予复制的权限 a.A->B主从 mysql> GRANT REPLICATION SLAVE ON *.* TO repl@192.168.1.112 IDENTIFIED BY 'root_m'; 此处 用户 root_m mysql账号需要存在 且%权限 重启mysql,使得配置生效: /etc/init.d/mysqld restart 或 netstat -natup kill pid bin/mysqld_safe --user=mysql & 启动mysql服务 最后查看master状态: 锁表:FLUSH TABLES WITH READ LOCK; mysql> show master status -> ; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000005 | 98 | | | +------------------+----------+--------------+------------------+ 解锁:UNLOCK TABLES; 配置与master的连接: mysql> CHANGE MASTER TO -> MASTER_HOST='192.168.1.111', -> MASTER_USER='root_m', -> MASTER_PASSWORD='root_m', -> MASTER_LOG_FILE='mysql-bin.000005', -> MASTER_LOG_POS=98; 其中MASTER_HOST是master机的ip,MASTER_USER和MASTER_PASSWORD就是刚才在master上添加的用户,MASTER_LOG_FILE和MASTER_LOG_POS对应与master status里的信息 最后启动slave: mysql> start slave; b.B->C主从 参照a操作即可 c.C->A主从 参照a即可 注: show slave status\G; 命令查看配置是否成功 当你看到 Slave_IO_Running: Yes Slave_SQL_Running: Yes 都为Yes的时候恭喜您配置成功了。