docker下mysql(8.0以上版本) 主从配置

1. docker下mysql(8.0以上版本) 主从配置

请自行先安装完docker和docker-compose
mysql8.0以后的版本与5.7的配置有一点点不同,网上不少都是5.X版本的配置方法,并不适用于8.0的,在这里总结一下我配置成功的过程。
我的安装环境:


在这里插入图片描述
  1. 在主机上安装docker之后,从官网拉取最新镜像
docker pull mysql:latest

安装的mysql最新版本为:


在这里插入图片描述
  1. 编写docker-compose.yml,以及两个数据库配置文件master.my.cnf, slave.my.cnf,这里先建个目录,在目录下创建需要的三个文件:
    mkdir mysql_docker_file && cd mysql_docker_file
    touch docker-compose.yml master.my.cnf slave.my.cnf
    docker-compose.yml内容如下:

主要将mysql-master和mysql-slave配置在172.18.2.0/24同一个网段,
然后做了个存储空间的映射,将两个容器的数据内容都映射到宿主机的/root/data目录下

version: '2'
services:
  mysql-master:
   image: mysql
   networks:
       mysql_net:
         ipv4_address: 172.18.2.2
   volumes:
     - /root/data/mysql-master:/var/lib/mysql
     - /root/mysql_docker_file/master.my.cnf:/etc/mysql/my.cnf
   ports:
     - "33067:3306"
   environment:
     - MYSQL_DATABASE=root
     - MYSQL_ROOT_PASSWORD=123456
  mysql-slave:
   image: mysql
   networks:
       mysql_net:
         ipv4_address: 172.18.2.3
   volumes:
     - /root/data/mysql-slave:/var/lib/mysql
     - /root/mysql_docker_file/slave.my.cnf:/etc/mysql/my.cnf
   ports:
     - "33068:3306"
   environment:
     - MYSQL_DATABASE=root
     - MYSQL_ROOT_PASSWORD=123456
networks:
  mysql_net:
    driver: bridge
    ipam:
      driver: default
      config:
      - subnet: 172.18.2.0/24

新建master.my.cnf,内容如下:
只在默认的文件加了三条:
server-id=111 #id号
innodb_flush_log_at_trx_commit=2
sync_binlog=1
innodb_flush_log_at_trx_commit和sync_binlog请参考点击这篇文章,讲得很清楚

#copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
## 1.1. This program is free software; you can redistribute it and/or modify
## 1.2. it under the terms of the GNU General Public License as published by
## 1.3. the Free Software Foundation; version 2 of the License.
##
## 1.4. This program is distributed in the hope that it will be useful,
## 1.5. but WITHOUT ANY WARRANTY; without even the implied warranty of
## 1.6. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## 1.7. GNU General Public License for more details.
##
## 1.8. You should have received a copy of the GNU General Public License
## 1.9. along with this program; if not, write to the Free Software
## 1.10. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#
##
## 1.11. The MySQL  Server configuration file.
##
## 1.12. For explanations see
## 1.13. http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL

## 1.14. Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#
## 1.15. Custom config should go here
!includedir /etc/mysql/conf.d/

server-id=111
innodb_flush_log_at_trx_commit=2  
sync_binlog=1  

新建slave.my.cnf,内容如下:
在默认文件下添加了4条
server-id=222
innodb_flush_log_at_trx_commit=2
sync_binlog=1
relay_log_recovery=0

#copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
#
## 1.16. This program is free software; you can redistribute it and/or modify
## 1.17. it under the terms of the GNU General Public License as published by
## 1.18. the Free Software Foundation; version 2 of the License.
##
## 1.19. This program is distributed in the hope that it will be useful,
## 1.20. but WITHOUT ANY WARRANTY; without even the implied warranty of
## 1.21. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
## 1.22. GNU General Public License for more details.
##
## 1.23. You should have received a copy of the GNU General Public License
## 1.24. along with this program; if not, write to the Free Software
## 1.25. Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
#
##
## 1.26. The MySQL  Server configuration file.
##
## 1.27. For explanations see
## 1.28. http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
secure-file-priv= NULL
## 1.29. Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

#
## 1.30. Custom config should go here
!includedir /etc/mysql/conf.d/
server-id=222
innodb_flush_log_at_trx_commit=2  #
sync_binlog=1  #开启binlog日志同步功能
relay_log_recovery=0

master.my.cnf和slave.my.cnf的server-id一定不能一样,而innodb_flush_log_at_trx_commit,sync_binlog,relay_log_recovery等参数的设置会影响到主从复制的性能,有兴趣的可以进行更多的了解。

  1. 全部文件都写完后,终于可以创建容器了,执行:
    docker-compose up -d
    在这里插入图片描述

    执行docker ps -a查看是否创建容器成功,失败的话请docker logs 容器ID 查看日志并解决,第一列为容器ID
    在这里插入图片描述
  2. 主数据库操作流程如下:
    进入master容器:docker exec -it 容器的ID号 /bin/bash
    登录数据库:mysql -uroot -p123456
    创建账号:create user 'slave'@'172.18.2.3' identified by '123456';, 注意填从库的IP
    后授权:grant replication slave on *.* to 'slave'@'172.18.2.3' with grant option;
    刷新下权限:flush privileges;
    查看master状态:show master status;,记录这里的file和Position,后面要用
    锁库:flush tables with read lock;
    退出数据库:exit
    导出master整个数据库内容:mysqldump -uroot -p123456 -A --events > backup.sql
    将生成的backup.sql想办法弄到slave容器,这里通过宿主机做中介:mv backup.sql /var/lib/mysql
    退出容器:exit
  3. 回到宿主机后,进入/root/data/mysql-master,将backup.sql移动到/root/data/mysql-slave
  4. 从数据库操作流程如下:
    进入slave容器:docker exec -it 容器的ID号 /bin/bash
    导入master的数据库数据:mysql < /var/lib/mysql/backup.sql -uroot -p123456
    登录数据库:mysql -uroot -p123456
    可以看到有slave账号:select user from mysql.user;
    连接master的设置:注意填主库ip,上面记录的file和position
change master to \
master_host='172.18.2.2',
master_port=3306,
master_user='slave',
master_password='123456',
master_log_file='binlog.000002',
master_log_pos=892,
get_master_public_key=1;

开启从服务:start slave;
执行show slave status\G;,看到后面两个yes就成立

在这里插入图片描述

  1. 再次登录主库:
    进入master容器:docker exec -it 容器的ID号 /bin/bash
    登录数据库:mysql -uroot -p123456
    解锁:unlock tables;
    到了这里就大功告成了!!!
    可以测试一下:
    在主库创建一个名为test的数据库
    create database test;
    去从库执行:
    show databases;可以看到也有也test库
    在这里插入图片描述
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,236评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,867评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,715评论 0 340
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,899评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,895评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,733评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,085评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,722评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,025评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,696评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,816评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,447评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,057评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,009评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,254评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,204评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,561评论 2 343

推荐阅读更多精彩内容