您现在的位置是:首页 > 文章详情

Docker + MySQL 主从环境搭建

日期:2018-06-27点击:400

环境说明

  • Docker
  • Ubuntu/CentOS
  • MySQL v8.0.11

1. 配置my.cnf

my.cnf(部分老版本可能是my.ini)是MySQL核心配置文件。首先,在任意挂载目录下新建*.cnf文件(这里的*代表可以是任意的文件名称)。如果你的mysql是下载安装的,请找到my.cnf并参考如下配置:

 [mysqld] log-bin=mysql-bin //启用二进制日志 server_id=xxx //xxx代表唯一ID,默认是1。特别注意,当前版本这里是server_id而不是server-id,有些版本可能会不一样 
  • 实战示例

    • /root/mysql/conf/master/新建master.cnf,配置如下:
    [mysqld] log-bin=mysql-bin server_id=100 
    • /root/mysql/conf/slave/新建slave.cnf,添加如下:
    [mysqld] log-bin=mysql-bin server_id=200 

2. 运行MySQL

2.1 master(主库)

 docker run --name mysql-master -v /root/mysql/conf/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 

2.2 slave(从库)

 docker run --name mysql-slave -v /root/mysql/conf/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci 

注意,当前mysql版本是8.0.11,不同的版本之间可能存在差别,docker可以拉取指定版本的mysql Image,命令:docker pull mysql:8.0.11

3. 新建账号

3.1 在 master 上创建复制账号

 // 1.进入主库容器 docker exec -it mysql-master bash // 2.登录mysql mysql -uroot -proot // 3.rep表示复制账号;<salve_ip>可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码 CREATE USER 'rep'@'<salve_ip>' IDENTIFIED WITH mysql_native_password BY 'reppassword'; GRANT REPLICATION SLAVE ON *.* TO 'rep'@'<salve_ip>'; 

3.2 获取并记录FilePosition信息

执行show master status;即可

img_04a4e779191aa1ebf834a83c7c7a3ae8.png
master status

4. 配置连接

  • 配置 slave 连接 master
 // 1.进入从库容器 docker exec -it mysql-slave bash // 2.登录mysql mysql -uroot -proot // 3.配置主库认证信息,<File>和<Position>同上 CHANGE MASTER TO MASTER_HOST='<master_ip>',MASTER_PORT=10000,MASTER_USER='rep',MASTER_PASSWORD='reppassword',MASTER_LOG_FILE='<File>',MASTER_LOG_POS=<Position>; 

5. 开启同步

  • 开启同步

在 slave 上启动线程:start slave;

  • 查看状态

在 slave 上执行命令:show slave status\G;

img_0639e954de82b62cdae51a9364c471d1.png
查看复制状态

6. 相关命令

  • 设置从库只读:set global read_only=1;。1表示只读,0是读写,但对拥有super权限的账号是不生效的,所以在授权账号的时候应尽量避免添加super权限

  • 查看读写情况:show global variables like "%read_only%";

  • 查看server_id:show variables like '%server_id%';

7. 踩坑记录

执行show slave status\G;,发现从库并没有连接上主库,留意到错误信息大致为:“主从库server_id不能一致”,随即查看新增的master.cnfslave.cnf,但并没有发现问题,随即用docker logs mysql-master查看启动日志,有一行警告大概是这样的:mysql: [Warning] World-writable config file '/etc/mysql/conf.d/master.cnf' is ignored.,这说明配置文件并没有挂载成功,搜索后得知当文件权限全局可写时,mysql会担心这种文件被其他用户恶意修改,所以会忽略掉这个配置文件,修改文件权限chmod 644 *.cnf后,再将以上流程重新跑了一遍,问题没有复现。

原文链接:https://yq.aliyun.com/articles/641771
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章