Docker搭建Mysql主从复制

文章目录

  • 安装Docker
  • 使Docker容器和Windows10建立局域网连接
    • Docker创建一个局域网
    • 在Windows10中将这个子网添加到路由表中
  • 简单Mysql持久化
    • 预先准备
    • 启动3个mysql
    • 在主数据库中创建专门用于从数据库登录操作的账号,并查看主数据库状态
    • 在从数据库中启用同步
    • 测试

安装Docker

由于我用的是Windows10,所以我打开了Hyper-V,然后在Dcoker官网下载并安装了Docker。

使Docker容器和Windows10建立局域网连接

Docker创建一个局域网

docker network create --subnet=[IP]/[掩码位数] 子网名称

指令示例:

docker network create --subnet=192.168.100.0/24 homenet

在Windows10中将这个子网添加到路由表中

route add -p [局域网ip] mask [子网掩码] [经过网关(使用Docker默认网关)]

指令示例(管理员模式下运行指令):

route add -p 192.168.100.0 mask 255.255.255.0 10.0.75.2

简单Mysql持久化

预先准备

先启动一个mysql,查看需要持久化的文件有哪些。

docker run -itd --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 mysql
docker exec -it mysql000 /bin/bash
# find / -name "mysql"

然后发现了以下需要映射的文件
/etc/mysql/my.cnf
/var/lib/mysql
保存一份my.cnf文件到宿主机,挂载文件时需要用到

然后删除刚才创建的Mysql,删除前顺便测试下局域网有没有用

 mysql -h 192.168.100.10 -u root -p
 [mysql]exit
 docker stop mysql000
 docker rm mysql000

启动3个mysql

其中主数据库配置文件添加:

server-id=1
log-bin=mysql-bin

从数据库配置文件依次添加:

server-id=2
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin
server-id=3
log-bin=mysql-slave-bin
relay_log=mysql-relay-bin

然后创建mysql容器,命令示例(在挂载过程中需要输入Windows10密码授权本地文件操作):

docker run -itd --privileged=true --net homenet --ip 192.168.100.10 --name mysql000 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL000/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.11 --name mysql001 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL001/varlib:/var/lib/mysql mysql
docker run -itd --privileged=true --net homenet --ip 192.168.100.12 --name mysql002 -e MYSQL_ROOT_PASSWORD=00000000 -e MYSQL_USER="ovea" -e MYSQL_PASSWORD="00300100" -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/etc/my.cnf:/etc/mysql/my.cnf -v /c/Users/OVEA/Documents/Docker/MySQL/MySQL002/varlib:/var/lib/mysql mysql

在主数据库中创建专门用于从数据库登录操作的账号,并查看主数据库状态

mysql -h 192.168.100.10 -u root -p
mysql> create user 'slave'@'%' identified by '00300100';
mysql> grant REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
mysql> show master status;

Docker搭建Mysql主从复制_第1张图片
这两个字段在从数据库中是有用的,它标识了主数据库当前语句执行状态(执行日志)。

在从数据库中启用同步

对两个从数据库都做如下处理

mysql -h 192.168.100.12 -u root -p
mysql> change master to master_host='192.168.100.11', master_user='slave', master_password='00300100', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos= 702, master_connect_retry=30;
start slave;
show slave status \G;

Docker搭建Mysql主从复制_第2张图片
如果成功了的话,就是这个样子的。

测试

在主数据库中创建一个表
然后查看从数据库是否同步

最后完全同步了,而且因为持久化设置,因此在关闭容器重新打开也不会出现数据丢失。

你可能感兴趣的:(docker,docker,mysql)