docker mysql 8.0 主主同步,主从同步 配置

主机(mysql-master) 读写,从机(mysql-slave) 仅读

启动容器 第一台
docker run --name mysql-master -d -p 3317:3306 -e MYSQL_ROOT_PASSWORD=root -v /Users/mac/project/docker/mysql/mone/data:/var/lib/mysql  --privileged=true  mysql:latest

拷贝配置文件文件
docker cp mysql-master:/etc/mysql/my.cnf my.cnf 
停止并删除
docker stop mysql-master && docker rm mysql-master
宿主机文件创建以及以及持久化配置
mkdir -p /usr/local/mysql/mone/data
mkdir -p /usr/local/mysql/mone/conf
mkdir -p /usr/local/mysql/mtwo/data
mkdir -p /usr/local/mysql/mtwo/conf
第一台主机配置文件修改
cp -r my.cnf /usr/local/mysql/mone/conf
vim my.cnf

#主机配置修改  新增两行在  mysqld 下

[mysqld]
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器标识ID,每台服务器唯一     
server-id=1
第二台主机配置文件修改
cp -r my.cnf /usr/local/mysql/mtwo/conf
vim my.cnf

#主机配置修改  新增两行在  mysqld 下

[mysqld]
#[必须]启用二进制日志
log-bin=mysql-bin
#[必须]服务器标识ID,每台服务器唯一     
server-id=2
启动两台mysql 容器’
#启动主从两台mysql
#参数说明
#--name mysql-master   主机名称
#-p 3388:3306   映射端口   宿主机端口3388,docker容器端口3306 
#-e MYSQL_ROOT_PASSWORD=123456      你要设置的root 用户的初始化密码  123456或者你想设置的内容
#-v /usr/local/mysql/mone/data:/var/lib/mysql     持久化文件映射(数据库数据)    宿主机下文件夹/usr/local/mysql/mone/data 对应 docker容器下文件夹/var/lib/mysql 
#-v /usr/local/mysql/mone/conf/my.cnf:/etc/mysql/my.cnf  持久化文件映射(数据库配置文件)    宿主机下文件/usr/local/mysql/mone/conf/my.cnf 对应 docker容器下文件/etc/mysql/my.cnf
#--privileged=true    docker容器的root拥有真正的root权限。
启动第一台
docker run --name mysql-master -d -p 3388:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /usr/local/mysql/mone/data:/var/lib/mysql -v /usr/local/mysql/mone/conf/my.cnf:/etc/mysql/my.cnf  --privileged=true  mysql:latest
启动第二台
docker run --name mysql-slave -d -p 3389:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /usr/local/mysql/mtwo/data:/var/lib/mysql -v /usr/local/mysql/mtwo/conf/my.cnf:/etc/mysql/my.cnf  --privileged=true  mysql:latest
进入第一台容器的mysql 密码是上面设置的参数 123456
docker exec -it mysql-master mysql -u root -p

#进入容器后
#创建一个用户来同步数据
#这里表示创建一个slave同步账号slave,允许访问的IP地址为%,%表示通配符
#数据库8版本的时候 建密码要用 sha256_password
#在数据库中 执行一下创建用户的命令,以及授权

CREATE USER 'yskjgo'@'%' IDENTIFIED WITH sha256_password by 'yskj123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'yskjgo'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'yskjgo'@'%';
FLUSH PRIVILEGES;
#查看状态,记住File、Position的值,在mtwo中将用到
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     1091 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

查看容器IP
docker inspect mysql-master
docker inspect mysql-slave

在这里插入图片描述

进入第二台容器的mysql 密码是上面设置的参数 123456
docker exec -it mysql-slave mysql -u root -p
#设置主库链接,master_host即为容器IP,master_log_file和master_log_pos即为在mone容器中,通过show master status查出来的值;
change master to master_host='172.17.0.2',master_user='yskjgo',master_password='yskj123456',master_log_file='mysql-bin.000003',master_log_pos=1091,master_port=3306;

#启动同步
start slave;

#分别在两个容器查看,显示 yes 就可以了
show slave status\G;

在这里插入图片描述

以上是主从同步,主机读写,从机复制


以下是主主同步(上面步骤都要实现)

进入第二台容器的mysql 密码是上面设置的参数 123456
docker exec -it mysql-slave mysql -u root -p

#创建一个用户来同步数据
#这里表示创建一个slave同步账号slave,允许访问的IP地址为%,%表示通配符
#数据库8版本的时候 建密码要用 sha256_password
在数据库中操作以下用手授权动作

CREATE USER 'yskjgo'@'%' IDENTIFIED WITH sha256_password by 'yskj123456';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'yskjgo'@'%';
GRANT ALL PRIVILEGES ON *.* TO 'yskjgo'@'%';
FLUSH PRIVILEGES;

#查看状态,记住File、Position的值,在mtwo中将用到
show master status;

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |     1091 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

#从机配好后,进入主机
docker exec -it mysql-master mysql -u root -p
#设置主库链接,master_host即为容器IP,master_log_file和master_log_pos即为在mone容器中,通过show master status查出来的值;

change master to master_host='172.17.0.3',master_user='yskjgo',master_password='yskj123456',master_log_file='mysql-bin.000003',master_log_pos=1091,master_port=3306;

#启动同步
start slave;

#分别在两个容器查看,显示 yes 就可以了
show slave status\G;

参考资料

主要参考链接 https://www.jianshu.com/p/984793d38654
主要参考链接 https://www.cnblogs.com/jinjiangongzuoshi/p/9299567.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值