您的位置:首页 > 运维架构 > Docker

Docker中Mysql主从复制实践总结

2017-07-09 19:42 337 查看
本文是在Dockec环境下对Mysql进行主从复制实践,在ubantu中安装docker相对简单,这里不做赘述。

原理:主从服务器利用MySQL的二进制日志文件,实现数据同步。二进制日志由主服务器产生,从服务器响应获取同步数据库。主服务器(Master)负责网站NonQuery操作,从服务器负责Query操作,用户可以根据网站功能模特性块固定访问Slave服务器,或者自己写个池或队列,自由为请求分配从服务器连接。

具体操作:

1、 启动两个容器

在Docker中run两个mysql容器,分别命名为mysql-master和mysql-slave作为主服务器和从服务器。利用docker ps -a查看全部容器:



设定连接mysql-slave容器的对外端口为3307,mysql-master对外端口为3306。

2、主服务master配置

修改master的mysql配置my.cnf使其支持二进制文件,使用命令 vi /etc/mysql/my.cnf修改内容:

[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id=2


配置描述

1. log-bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加;

2. server_id=xx #为服务器设定唯一ID,默认是1,一般取IP最后一段;这里我使用容器ip(172.17.0.2)最后一位2;

3. binlog_format=mixed #mysql日志格式;



配置完之后重启mysql服务;

/etc/init.d/mysql restart


3、从服务slave配置

slave操作同2类似修改my.cnf配置,配置如下:

[mysqld]
log-bin=mysql-bin
binlog_format=mixed
server-id=3




配置完之后重启mysql服务;

/etc/init.d/mysql restart


4、创建mysql账号并授权给slave服务器

进入master服务,打开mysql服务创建mysql账号用于同步服务,命令如下:

GRANT replication slave ON *.* TO 'slave'@'%' IDENTIFIED BY '1234';




以上命令的详细解释,最好百度一下,写太多反到更加更不清思路。

创建完账号后,查看master状态;



记录Fil和Position的值,后续配置slave中会用到!

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

5、配置从服务器slave

进入mysql服务后,输入如下命令进行配置:

CHANGE MASTER TO MASTER_HOST='172.17.0.2',MASTER_USER='slave',MASTER_PASSWORD='1234',MASTER_PORT=3306,MASTER_LOG_FILE='**mysql-bin.000001**',MASTER_LOG_POS=**2482**,MASTER_CONNECT_RETRY=10;


注:黑色部分值为第4环节中的相关配置。

配置完之后启动slave复制服务,命名如下:

start slave


检查从服务器复制功能状态,命令如下:

show slave status\G




注:

Slave_IO_Running和Salve_SQL_Running都为yes,那么表明可以成功同步了!若其中有一个为no都不行。到此mysq主从配置全部完成!累死我了,花了半个多小时,哈哈!

6、测试主从复制

在master服务中的mysql服务的abccs库中插入一条数据,然后在slave服务中进行查询即可!

7、遇见问题汇总

slave从服务器配置完成后发现Salve_SQL_Running为no,有可能程序可能在slave上进行了写操作,也可能是slave机器重起后,事务回滚造成的.

解决方案1:

mysql> stop slave ;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
mysql> start slave ;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: