20180415|实战MySQL主从同步搭建

【注意】最后更新于 April 15, 2018,文中内容可能已过时,请谨慎使用。

配置过程参考了:https://www.cnblogs.com/gl-developer/p/6170423.html

 

实现MySQL主从复制需要进行的配置:

  • 主服务器:
    • 开启二进制日志
    • 配置唯一的server-id
    • 获得master二进制日志文件名及位置
    • 创建一个用于slave和master通信的用户账号
  • 从服务器:
    • 配置唯一的server-id

 

具体实现过程如下:

一、准备工作:

原文中提到了两点:

 1.主从数据库版本最好一致

2.主从数据库内数据保持一致

由于我的数据库运行在虚拟化的环境里,所以直接把数据库停机,然后克隆两份作为slave。

 

二、主数据库master修改:

1.修改mysql配置

找到主数据库的配置文件my.cnf(或者my.ini),我的在/etc/mysql/my.cnf,在[mysqld]部分插入如下两行:

[mysqld]
log-bin=mysql-bin #开启二进制日志
server-id=1 #设置server-id

2.重启mysql,创建用于同步的用户账号

打开mysql会话shell>mysql -hlocalhost -uname -ppassword

创建用户并授权:用户:rel1密码:slavepass

3.查看master状态,记录二进制文件名(mysql-bin.000003)和位置(73):

二、从服务器slave修改:

1.修改mysql配置

同样找到my.cnf配置文件,添加server-id

2.重启mysql,打开mysql会话,执行同步SQL语句(需要主服务器主机名,登陆凭据,二进制文件的名称和位置):

3.启动slave同步进程:

这时候,跟原文不同,我在启动slave的时候出现了报错:

<p>
  之所以出现会出现这样的问题,是因为我的从库主机是克隆的主库所在的主机,所以auto.cnf文件中保存的UUID会出现重复(server_id已经在my.cnf文件中修改过)
</p>

4.查看slave状态:

当Slave_IO_Running和Slave_SQL_Running都为YES的时候就表示主从同步设置成功了。接下来就可以进行一些验证了,比如在主master数据库的test数据库的一张表中插入一条数据,在slave的test库的相同数据表中查看是否有新增的数据即可验证主从复制功能是否有效,还可以关闭slave(mysql>stop slave;),然后再修改master,看slave是否也相应修改(停止slave后,master的修改不会同步到slave),就可以完成主从复制功能的验证了。

还可以用到的其他相关参数:

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项:

 

# 不同步哪些数据库  

只同步哪些数据库,除此之外,其他不同步

binlog-do-db = game

TODO: 开启了主从同步,下一步的工作当然是配置数据库的读写分离了。 这里找到了几个看起来很不错的解决方案:Mycat。 找了篇文章看了下,似乎还不错:https://www.blogv5.com/?p=12 先收藏之。

也可以看看