实做 MySQL Master-Master Replication 同步

Home Home
引用 | 编辑 月光
2010-07-22 19:58
楼主
推文 x1
今天无聊实做了 MySQL 资料库同步化,那可以先看看 MySQL Master Slave Replication,中文网站可以上 google 查询或者是看看这一篇:MySQL 设定 Replication (Master – Slave),基本上设定还蛮容易的,如果会 Master 同步到 Slave 的话,那 MySQL Master-Master 只是在用相同的方法在做一遍,如果不懂 MMM 的可以先参考这一篇:MySQL Master-Master Replication Manager(1) – 简介,这篇写的很清楚,今天看了文章,我实做起来,遇到一些问题,其实还蛮奇怪的,所以底下就来纪录一下步骤,顺便也说明一下。

实做两台 Ubuntu 机器:
db1:192.168.1.1
db2:192.168.1.2

先设定 db1:
目前我都是在 Ubuntu 7.10 底下实做的,那基本上只要有支援 MySQL 的 Linux 或者 FreeBSD 机器都可以实做这个方法:

步骤一:先修改 my.cnf 这个档案:
FreeBSD 的话在:/var/db/mysql/my.cnf
Ubuntu:/etc/mysql/my.cnf
有的版本是在 /etc/my.cnf 所以不太一定,请依照自己的作业系统
修改:

#
# bind-address 请 mark 起来,因为我们必须让 MySQL Listen 各个不同的 IP Address
#bind-address         = 127.0.0.1
#
# server id 请记得每台机器都设定不同喔
#
server-id           = 1
log_bin             = /var/log/mysql/mysql-bin.log

步骤一的部份也请先在 db2 的机器先设定一次,然后重新启动 mysql
步骤二:设定 mysql 权限

mysql -u root -p
#
# 先设定 replication 这个帐号密码是 slave 这个可以自己改掉
#
mysql> GRANT replication slave ON *.* TO 'replication'@'%' IDENTIFIED BY 'slave';
#
# 这个是官方的写法,可以按照这底下去写就可以了
#
mysql> CHANGE master TO master_host='192.168.1.2', master_port=3306, master_user='replication', master_password='slave';
#
# 底下是 Master 机器的 bin log file
# master_log_file='mysql-bin.000004',
# master_log_pos=98;
# 可以利用 SHOW MASTER STATUS; 来取得这两个的值
mysql> CHANGE master TO master_host='192.168.1.2', master_port=3306, master_user='replication', master_password='slave', master_log_file='mysql-bin.000004', master_log_pos=98;

先到 db2 执行 SHOW MASTER STATUS; 会得到底下结果

+------------------+----------+--------------+------------------+
| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |     189 |           |             |
+------------------+----------+--------------+------------------+

那这样就可以知道
master_log_file=’mysql-bin.000001′,
master_log_pos=189;

步骤三:测试观看 mysql slave
重新启动 mysql
/etc/init.d/mysql restart
#
# 启动 slave
#
mysql> START slave;
#
# 观看 slave 状态
#
mysql> show slave status \G;



请注意下面这两行必须为 YES
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

这样才算代表成功了,不然就是失败的。

先设定 db2:
步骤一:先修改 my.cnf 这个档案:
FreeBSD 的话在:/var/db/mysql/my.cnf
Ubuntu:/etc/mysql/my.cnf
有的版本是在 /etc/my.cnf 所以不太一定,请依照自己的作业系统
修改:
#
# bind-address 请 mark 起来,因为我们必须让 MySQL Listen 各个不同的 IP Address
#bind-address         = 127.0.0.1
#
# server id 请记得每台机器都设定不同喔
#
server-id           = 1
log_bin             = /var/log/mysql/mysql-bin.log

步骤二:设定 mysql 权限
mysql -u root -p
#
# 先设定 replication 这个帐号密码是 slave 这个可以自己改掉
#
mysql> GRANT replication slave ON *.* TO 'replication'@'%' IDENTIFIED BY 'slave';
#
# 这个是官方的写法,可以按照这底下去写就可以了
#
mysql> CHANGE master TO master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave';
#
# 底下是 Master 机器的 bin log file
# master_log_file='mysql-bin.000004',
# master_log_pos=98;
# 可以利用 SHOW MASTER STATUS; 来取得这两个的值
mysql> CHANGE master TO master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave', master_log_file='mysql-bin.000004', master_log_pos=98;

步骤三:测试观看 mysql slave
重新启动 mysql
/etc/init.d/mysql restart
#
# 启动 slave
#
mysql> START slave;
#
# 观看 slave 状态
#
mysql> show slave status \G;
如果遇到
Slave_IO_Running: no
Slave_SQL_Running: no

这样的话请依照下面步骤:

#
# 停止跟清除 SLAVE
#
mysql> STOP SLAVE;
mysql> RESET SLAVE;
#
# 停止 mysql
#
/etc/init.d/mysql stop
#
# 删除 bin log 档案
#
rm -rf /var/log/mysql/mysql-bin.*
#
# 启动 mysql
#
/etc/init.d/mysql start
#
# 在设定一次 master ip 资讯
#
mysql> change master to master_host='192.168.1.1', master_port=3306, master_user='replication', master_password='slave';
#
# 启动 slave
#
mysql> START SLAVE;


献花 x0
引用 | 编辑 shing3728
2010-09-11 13:58
1楼
  
学习中..
感谢分享!!!

献花 x0