docker 下的 Mysql 主从复制

本贴最后更新于 398 天前,其中的信息可能已经时移俗易

Docker 环境 +MySQL 主从复制 + 双机热备
测试环境介绍
server01:master CentOS 7.6 x86_64bit
hostname:test12.liufu.com
172.16.100.12——>docker19.03.1+mysql5.7+keepalive
server02:slave CentOS 7.6 x86_64bit
hostname:test13.liufu.com
172.16.100.13——>docker19.03.1+mysql5.7+keepalive
一、Docker 环境搭建
1、升级环境:yum update
2、获取 docker 源:
yum install -y yum-utils device-mapper-persistent-data lvm2
yum-config-manager --add-repo https://download.docker.com/linux/xentos/docker-ce.repo
3、更新 yum 源缓存:yum update -y
4、安装 docker:yum install -y docker-ce
5、启动 docker:systemctl start docker.service
6、验证 docker 是否安装成功:docker info
二、Docker 中 MySQL 实例创建
1、获取 mysql5.7 镜像:docker pull mysql:5.7

2、查看镜像:docker images |grep MySQL

3、创建 MySQL 容器
1)创建要挂载的文件夹
cd /var/lib/mysql
mkdir conf data logs
2)运行容器
[root@test12 ~]#docker run --name mysql_5.7 -e MYSQL_ROOT_PASSWORD=password -d -i -p 3306:3306 -v /var/lib/mysql/data:/var/lib/mysql/ -v /var/lib/mysql/conf:/etc/mysql/mysql.conf.d -v /var/lib/mysql/logs:/logs mysql:5.7

注:命令说明
-name mysql_5.7 容器名称
-e MYSQL_ROOT_PASSWORD=password 数据库登陆密码 password
-p 3306:3306 端口映射到宿主机
-v /var/lib/mysql/data:/var/lib/mysql/ 将主机/var/lib/mysql/data 挂载到容器的/etc/mysql/
-v /var/lib/mysql/conf:/etc/mysql/mysql.conf.d
-v /var/lib/mysql/logs:/logs 将主机/var/lib/mysql/logs 挂载到容器的 logs
3)查看容器:docker ps

4)进入 MySQL 容器:docker exec -it mysql-5.7 /bin/bash

三、MySQL 配置文件修改
1、宿主机进入挂载的配置文件目录:cd /var/lib/mysql/conf
VIM my.cnf
[mysqld]选项下添加如下内容

2、重启 docker 中的 MySQL 实例

3、登陆数据库:MySQL -h 127.0.0.1 -uroot -ppassword

4、数据库用户权限设置
mysql> grant all privileges on . to root@'%' identified by "password";
mysql> grant all privileges on . to root@'localhost' identified by "password";

mysql> flush privileges; # 刷新数据库

mysql> show grants; # 查看权限

四、主从复制配置
1、master 主机配置
登陆主数据库:MySQL -uroot -ppassword
mysql> flush tables with read lock; # 数据库锁表,不让数据写入
mysql> show master status;

mysql> unlock tables; # 从启动好后,记得要解除锁定
Master 数据库到此配置完毕
2、slave 从机配置
修改 my.cnf 配置文件,并重启数据库(修改位置与主数据库一致)

登陆 slave 数据库:MySQL -uroot -ppassword
mysql> stop slave;

mysql>change master to master_host='172.16.100.12',
master_port=3306,
master_user='root',
master_password='password',
master_log_file='mysql-bin01.000007',
master_log_pos=889;

mysql>start slave;
mysql>show slave status\G;

五、主从复制测试
1、master 中创建库(docker-test)和表,并在表中插入数据,观察 slave 是否同步
master 主机 slave 从机
创建数据库:docker-test
查看创建的库是否同步

创建表
查看创建的表是否同步

修改表名
查看表名是否重命名

表中写入数据
查看表中数据是否同步

2.master 中删除一条,修改一条测试表(test001)中的一条数据,观察 slave 是否同步
master 主机 slave 从机
test001 表中删除第 2 行,并修改第 3 行的两个数据
查看表中数据是否同步

注:主从复制完成

  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    362 引用 • 819 回帖 • 452 关注
  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    567 引用 • 512 回帖 • 675 关注

赞助商 我要投放

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...