mysql replication 的搭建

本文将介绍如何搭建一个最简单的mysql replication 环境。

它将包括一个master主机, 和 一个slave机。 master主机上的所有修改会通过replication同步到slave机器的mysql上。

master主机的mysql启动在一个ubuntu11.10的机器上,ip为172.16.70.78,

slave机的mysql启动在一个虚拟机里,ip为172.16.69.70。

参考文献: O'Reilly.MySQL.High.Availability

1. 配置master主机mysql

启动mysql, 创建用于slave进行replication的mysql帐户,并设置密码和权限:

mysql> create user test_user@'172.16.69.70';

Query OK, 0 rows affected (0.00 sec)

mysql> grant replication slave on *.* to test_user@'172.16.69.70' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
注: 这里最好把slave机器的ip也指明,因为我在尝试不指明ip而用%时,似乎碰到了权限问题。

关闭mysql,修改mysql的配置文件my.cnf(一般而言在/etc/mysql 或/etc下, 如果没有的话(通常是从源码安装的时候),从源码包中拷贝一个过来,并编辑)。 修改与添加如下内容:

[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
log-bin = master-bin #可选,值随意, 主要是为了看binlog文件的时候方便
log-bin-index = master-bin.index #同上
server-id =1 #这个是关键, 配置master机的server-id,这个需要全局唯一。

然后重启mysql服务即可。

2. 配置slave机的mysql

找到slave机的mysql配置文件my.cnf, 添加并修改如下内容:

[mysqld]
user = mysql
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
relay-log = slave-relay #可选,值随意, 主要是为了看binlog文件的时候方便
relay-log-index = slave-relay-bin.index #同上
server-id =2 #这个是关键, 配置slave机的server-id,这个需要全局唯一。

重启slave的mysql即可。

3. 启动slave机的replication

登入slave机的mysql执行如下命令:

mysql> change master to master_host='172.16.70.78', master_port=3306,

->master_user='test_user', master_password='123456';

Query OK, 0 rows affected (0.03 sec)

mysql> start slave;

Query OK, 0 rows affected (0.01sec)

这样就可以了。 现在你在master机器上做任何修改,都会被同步到slave机器上。 (你可以flush logs来让binlog文件rotate)

4. 尝试过程中可能遇到的问题及解决:

a.slave I/O error connecting to master '用户名@master主机名:3306' Error_code:2003

这个错误是说在slave机器上用这个用户名无法连接到master主机上, 你可以在slave机器的终端上用mysql命令

以这个用户名连一下master主机,看看是否能连上。 如果不能连上,可能是你master主机上mysql绑定ip配置的又问提,

默认是localhost 或者172.0.0.1, 把它改为你主机的ip,如本例中的172.16.70.78 。

b. slave I/O error connecting to master '用户名@master主机名:3306' Error_code:1045

这个错误具体什么原因我也不是太清楚,我估计也是权限的问题。 查看一下你mater主机上的用户列表,slave的用户名是不是

不止一个,比如有一个"用户名@%" 在“用户名@具体ip”前面, 把那个"用户名@%"给删除,因为它的权限可能配的不对,使用

你在第一步中创建的“用户名@具体ip”。

c. 错误日志中会提示说slave机器上执行某条master主机replication过来的语句时出错,而导致整个replication的过程终止。

这个错误是master主机上执行的修改无法在slave机上进行,可能所要做的修改已经存在了。 例如master主机上创建了一个

数据库 school, 但这个数据库已经在slave机器上存在了,这就会导致replication 失败。 解决办法很简单,把那个 slave机

的school数据库drop掉就好了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值