关于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)
说明: 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的时候恭喜您配置成功了。