实现结构:
前提条件,这是全新的安装mysql服务器,已经在运行的mysql需要先做备件,并还原到另外的机子上。
master A:192.168.168.128
master B:192.168.168.129
slave 192.168.168.130
在三台机子上分别安装mysql
[root@yaho ~]# yum install -y mysql mysql-server mysql-dev
修改master A和master B还有slave的配置文件。
[root@yaho ~]#vim /etc/my.cnf
master A: 在[mysqld]内添加(修改)
server-id = 128
log-bin = mysql-bin
sync-binlog = 1
auto_increment_offset = 1 #起始值
auto_increment_increment = 2 #步长
slave-skip-errors=1007,1008 #跳过无法创建数据库错误和无法删除数据库错误,如果所有mysql的数据库都一样,可以不加
# slave-skip-errors=all #跳过所有错误,其实这个参数挺危险的,很容易造成几台mysql数据不一致
log-slave-updates #写入从master复制操作的记录到本地bin-log日志,以实现slave的完整同步(备份)
master B: 在[mysqld]内添加(修改)
server-id = 129
log-bin = mysql-bin
sync-binlog = 1
auto_increment_offset = 2 #起始值
auto_increment_increment = 2 #步长
slave-skip-errors=1007,1008 #跳过无法创建数据库错误和无法删除数据库错误,如果所有mysql的数据库都一样,可以不加
# slave-skip-errors=all #跳过所有错误,其实这个参数挺危险的,很容易造成几台mysql数据不一致
log-slave-updates #写入从master复制操作的记录到本地bin-log日志,以实现slave的完整同步(备份)
slave: 在[mysqld]内添加(修改)
server-id = 130
slave-skip-errors=1007,1008 #跳过无法创建数据库错误和无法删除数据库错误,如果所有mysql的数据库都一样,可以不加
# slave-skip-errors=all #跳过所有错误,其实这个参数挺危险的,很容易造成几台mysql数据不一致
log-slave-updates #写入从master复制操作的记录到本地bin-log日志,以实现slave的完整同步(备份)
3.分别启动3台master的mysql,建立同步用户,并给IP授权,允许远程访问。
[root@yaho ~]#service mysqld start
master A:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.2168.129' identified by '123456'; #给master B 授权
master B:
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.168.128' identified by '123456'; #给master A授权
mysql>GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.168.130' identified by '123456'; #给slave授权
4.查看master A 和master 的maste 状态信息:
mysql>show master status;
+------------------+----------+
| File | Position |
+------------------+----------+
| mysql-bin.000001 | 106 |
+------------------+----------+
5.连接master,实现主-主-从
master A:
mysql>change master to master_host='192.168.168.129',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
master B:
mysql>change master to master_host='192.168.168.128',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
slave:
mysql>change master to master_host='192.168.168.129',master_user='repl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=106;
6.分别在三台机子上启动slave功能:
mysql>start slave;
mysql>show slave status\G;
如果下面两项都为YES,意味着成功。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
测试--略:
只需要在随便在哪个master创建一个数据库,然后show一下,如果另外两个mysql都有这个数据库,则意味成功。
注意:如果mysqld启动不起来,可以先注释 log-slave-updates 这行,当主从建立起来后再去掉注释。