ITPub博客

首页 > 数据库 > MySQL > MySQL 5.5.x 配置Master-Slave主从复制

MySQL 5.5.x 配置Master-Slave主从复制

原创 MySQL 作者:神谕丶 时间:2014-12-29 17:46:26 0 删除 编辑
我的环境:
OS:CentOS-6.5-64bit
DBMS:MySQL 5.5.28
my.cnf位置是 /home/USERNAME/.my.cnf
(我的mysql安装方法是http://blog.itpub.net/29773961/viewspace-1364808/
其中有一个步骤为cp support-files/my-medium.cnf  ~/.my.cnf
故配置文件在此,为避免使用root用户,故不放置在/etc/my.cnf)


用的是两个服务器(建立在ESXi上的逻辑主机)
master ip:192.168.1.214
slave ip:192.168.1.215


步骤很简单,过程也很简单,所以搭建这个环境也是很简单的。

步骤可以分解为:
1.配置一个服务器作为master
2.配置一个服务器作为slave
3.将slave连接到master




首先为了避免防火墙和SELinux可能造成的不便,首先我将其关闭或置为不可用状态。







【1.配置一个服务器作为master】
在我的第一个master服务器上作出如下配置。

修改~/.my.cnf
在[mysqld]下添加

# master
log-bin = master-bin
log-bin-index = master-bin.index
server-id = 1


其中log-bin选项给出了binlog产生的所有文件的基本名,如果你创建了一个以log-bin为扩展名的文件,该扩展名将被忽略,而只使用文件的基本名。
log-bin-index选项给出了二进制索引文件的文件名,这个索引文件保存了所有binlog文件的列表。
实际上,不需要为log-bin选项提供值,其默认值为hostname-bin,hostname的值来自于pid-file,默认值是主机名。
如果管理员后来修改了主机名,binlog文件名也会随之改变,但是索引文件仍可以获取正确的值,最好为服务器创建一个与机器无关且唯一的服务器名,因为一系列的binlog文件中途改名可能会很混乱。

如果没有为log-bin-index赋予任何值,其默认值与binlog文件的基本名相同(如果没有为log-bin提供值,则默认为hostname-bin)。
同样,如果你不给log-bin-index赋值,索引文件名会随主机名的改变而改变,所以如果你改变主机名然后重启服务器,将找不到索引文件,从而认为索引文件不存在,导致二进制日志为空。

每一个服务器都有唯一的服务器ID,所以如果一个slave连接了master,而且其server-id的参数值与master相同,则会产生master和slave服务器id相同的错误。

将log-bin和server-id选项添加到配置文件后重启服务器,然后添加一个复制用户,这样便完成了配置。



将my.cnf修改之后,重新启动mysql服务,让其加载新的my.cnf文件。

进入root用户:

  1. CREATE USER repl_user;


  1. GRANT REPLICATION SLAVE ON *.* TO repl_user IDENTIFIED BY 'YOURPASSWORD';



REPLICATION SLAVE权限并没有其他特殊的地方,这个权限可以使用户能够从master上取得二进制日志的转储数据。
虽然完全可以给一个常规用户赋予REPLICATION SLAVE的权限,但是最好还是将复制slave用户与其他用户区别开来,这样的话,如果想禁止某些slave连接,只要删除该用户即可。





【2.配置一个服务器作为slave】
在我的第二个slave服务器上作出如下配置。

修改~/.my.cnf
在[mysqld]下添加

# slave
relay-log = slave-relay-bin
relay-log-index = slave-relay-bin.index
server-id = 2

与master配置文件中的log-bin和log-bin-index一样,relay-log和relay-log-index选项默认取值决定于hostname。
relay-log默认取值为hostname-relay-bin。
relay-log-index默认取值为hostname-relay-bin.index。

修改my.cnf文件之后,重启mysql服务,让配置生效即可。


【3.将slave连接到master】
做连接,你只需要知道以下几个部分即可:

主机名
端口号
master上拥有REPLICATION SLAVE权限的用户账号
该用户的密码

在slave机上进行如下操作

首先将slave指向master,当然master_host需要填你目标master机的ip地址。
  1. CHANGE MASTER TO
  2. MASTER_HOST = '192.168.1.214',
  3. MASTER_PORT = 3306,
  4. MASTER_USER = 'repl_user',
  5. MASTER_PASSWORD = 'YOURPASSWORD';

然后再开启slave

  1. START SLAVE;


至此,master和slave之间的第一个复制已经完成。
你可以在master机上开启一个terminal,然后对其进行一些数据操作,比如创建表,插入数据,再到对应的slave机上查看这些变化。







【一些问题】:
如果出现一些warning,可以通过show warnings这个指令来检查警告或者错误。
当然也可以使用show slave status\G来查看一些关于slave的信息。

我在配置中出现的问题:
查看status发现:
Slave_IO_Running: Yes
Slave_SQL_Running: No

解决办法:
  1. STOP SLAVE;
再
  1. SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;

可能出现的另外一个问题:
slave的server-id与master冲突。
可以通过
  1. SET GLOBAL SERVER_ID = 2;
来解决此问题。






来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29773961/viewspace-1384091/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
微信公众号:神谕的暗影长廊

注册时间:2014-07-28

  • 博文量
    161
  • 访问量
    1195299