主从搭建
1.启动主从MySQL容器
#启动主机器
docker run -p 3306:3306 -v /my/mysql/master/config:/etc/mysql/conf.d -v/my/mysql/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name masterMysql --privileged=true --restart=always -d mysql:8.0.31
#启动从机器
docker run -p 3307:3306 -v /my/mysql/slave1/config:/etc/mysql/conf.d -v/my/mysql/slave1/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name slaveMysql1 --privileged=true --restart=always -d mysql:8.0.31
注释:
-p 容器暴露给外部调用的端口 :容器内部自己端口
-v 挂载容器配置到宿主机,和容器内部文件一一映射。
格式为 自定义宿主机路径 :容器内部文件路径
效果为 修改宿主机文件,容器内部文件也会里面跟着修改生效
-e 参数值配置
--name 容器名称
--privileged=true 给容器加上特定权限, 允许访问容器内部资源
--restart=always 参数能够使我们在重启docker时,自动启动相关容器
Docker容器的重启策略如下:
no,默认策略,在容器退出时不重启容器
on-failure,在容器非正常退出时(退出状态非0),才会重启容器
on-failure:3,在容器非正常退出时重启容器,最多重启3次
always,在容器退出时总是重启容器
unless-stopped,在容器退出时总是重启容器,但是不考虑在Docker守护进程启动时就已经停止了的容器
-d 容器后台运行
注释: docker对参数有严格要求,这个参数最好放最后
2.主从配置文件配置
1.主库配置
cd /my/mysql/master/config
vim my.cnf
[mysqld]
#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=master-mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
2.从库配置
cd /my/mysql/slave1/config
[mysqld]
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=slave1-mysql-relay
3.重启主从机器
docker restart 主容器id 从容器id
3.搭建主从复制
(这里只是搭建一个从服务器,多个相同方法搭建即可)
1.主机给从机授权
进入从机mysql,执行
-- 创建slave1用户
CREATE USER 'slave1'@'%';
-- 设置密码
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
-- 授予复制权限
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
-- 刷新权限
FLUSH PRIVILEGES;
2.查询master的状态
进入从机mysql,执行
show master status;
得到binlog日志文件以及日志位置
日志文件 master-mysql-bin.000001
日志位置 157
3.从机连接主机
1.从机配置
CHANGE MASTER TO MASTER_HOST='172.17.0.2',
MASTER_USER='slave1',
MASTER_PASSWORD='123456',
MASTER_PORT=3306,
MASTER_LOG_FILE='master-mysql-bin.000001',MASTER_LOG_POS=157;
#解释:
# CHANGE MASTER TO MASTER_HOST='主机的IP地址',
# 注释:列出docker所有容器id
# docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \ $(docker ps -aq)
# MASTER_USER='slave1'(刚刚配置的用户名),
# MASTER_PASSWORD='123456'(刚刚授权的密码),
# master_port=主机开放的端口 我这里是3306端口,
# MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值(之前的Position);
2.启动主从复制
进入从机mysql,执行
1.START SLAVE;
-- 查看状态(不需要分号)
2.SHOW SLAVE STATUS\G
查看到如下说明主从配置成功
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
4.验证
主机器创建修改删除数据库,从库跟着创建修改删除数据库