mac 本地docker-mysql主从复制部署

mac 本地docker-mysql主从复制部署,服务器同理

1.本地docker启动两个mysql服务.端口号不一样

没有选择挂载到宿主机.只做测试用. 只是端口号不一样容器删掉.就没有数据了. 生产测试,需要挂在

  1. master
sh 复制代码
docker run -d --name mysql-slave -p 3308:3306 \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7
  1. slave
sh 复制代码
docker run -d --name mysql-slave -p 3307:3306 \
-e MYSQL_ROOT_PASSWORD=root mysql:5.7

2.主库配置

1.修改/etc/my.cnf文件,并开启binlog日志

sh 复制代码
#开启binlog日志,日志存放在/var/lib/mysql/master-bin   master-bin->可以自定义
log-bin=/var/lib/mysql/master-bin
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 -- 232-1,默认为1
server-id=1
#是否只读,1 代表只读, 0 代表读写
read-only=0
#忽略的数据, 指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

2.重启MySQL服务器

sh 复制代码
systemctl restart mysqld
  1. 客户端登录mysql,创建远程连接的账号,并授予主从复制权限
sh 复制代码
#创建linmaster用户,并设置密码,该用户可在任意主机连接该MySQL服务
CREATE USER 'linmaster'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

#为 'itcast'@'%' 用户分配主从复制权限
GRANT REPLICATION SLAVE ON *.* TO 'linmaster'@'%';

#通过指令,查看二进制日志坐标
show master status ;

字段含义说明:

file : 从哪个日志文件开始推送日志文件

position : 从哪个位置开始推送日志

binlog_ignore_db : 指定不需要同步的数据库

3.从库配置

1.修改配置文件 /etc/my.cnf

sh 复制代码
#开启binlog日志,日志存放在/var/lib/mysql/master-bin   master-bin->可以自定义.从库不需要
#log-bin=/var/lib/mysql/master-bin
#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 -- 232-1,默认为1
server-id=2
#是否只读,1 代表只读, 0 代表读写
read-only=1
#忽略的数据, 指不需要同步的数据库
#binlog-ignore-db=mysql
#指定同步的数据库
#binlog-do-db=db01

2.重新启动MySQL服务

sh 复制代码
systemctl restart mysqld

3.客户端登录mysql,设置连接到主库配置信息.

sh 复制代码
#如果mysql是 8.0.23 之前的版本 命令

CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_USER='linmaster',
MASTER_PASSWORD='root', MASTER_LOG_FILE='master-bin.000002',
MASTER_LOG_POS=154;




#如果mysql是 8.0.23 之后的版本 命令

CHANGE REPLICATION SOURCE TO SOURCE_HOST='192.168.200.200', SOURCE_USER='itcast',
SOURCE_PASSWORD='Root@123456', SOURCE_LOG_FILE='binlog.000004',
SOURCE_LOG_POS=663;
参数名 含义 8.0.23****之前
SOURCE_HOST 主库IP地址 MASTER_HOST
SOURCE_USER 连接主库的用户名 MASTER_USER
SOURCE_PASSWORD 连接主库的密码 MASTER_PASSWORD
SOURCE_LOG_FILE binlog日志文件名 MASTER_LOG_FILE
SOURCE_LOG_POS binlog日志文件位置 MASTER_LOG_POS

4.启动slave

sh 复制代码
#启动slave

start replica ; #8.0.22之后
start slave ; #8.0.22之前


#暂停slave,master 宕机了. 需要手动重新配置上面的步骤3. 需要 先停止slave
stop slave;

5.查看slave状态

sh 复制代码
show replica status ; #8.0.22之后
show slave status ; #8.0.22之前

4.验证.

主库. 新增数据库. 新增表 .增删改. 从库都会同步过来...

注意. 从库 宕机了. 重启... 主机的变更还是会同步过来. 但是主机宕机了. 从机需要重新修改 连接主机的配置信息.

主库,查看binglog 位置和pos偏移量

sh 复制代码
#通过指令,查看二进制日志坐标
show master status ;

从库.修改链接主机的配置信息

sh 复制代码
#1.先停止slave
stop slave;

#2.修改链接信息
CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_USER='linmaster',
MASTER_PASSWORD='root', MASTER_LOG_FILE='master-bin.000002',
MASTER_LOG_POS=154;

#3.启动slave
start slave;
#4.查看状态,两个yes 就OK了;
show slave status;
相关推荐
米花町的小侦探13 小时前
解决 GORM + MySQL 5.7 报错:Error 1067: Invalid default value for ‘updated_at‘
mysql
PKNLP13 小时前
07.docker介绍与常用命令
运维·docker·容器
老衲提灯找美女15 小时前
MySQL数据库基础操作:
数据库·mysql·oracle
人工智能训练15 小时前
在ubuntu系统中如何将docker安装在指定目录
linux·运维·服务器·人工智能·ubuntu·docker·ai编程
ヾChen15 小时前
头歌MySQL——复杂查询
数据库·物联网·学习·mysql·头歌
爱宇阳15 小时前
Java Spring Boot 项目 Docker 容器化部署教程
java·spring boot·docker
掘根15 小时前
【Docker】网络
网络·docker·容器
yoi啃码磕了牙16 小时前
Unity—Localization 多语言
java·数据库·mysql
爱宇阳16 小时前
从容器化到自动化:Vue3 项目 Docker 部署与 GitLab CI/CD 集成 Harbor 全流程
docker·自动化·gitlab
星光一影17 小时前
打车/网约车、代驾、顺风车/拼车、货运、租车等多种出行服务的一站式解决方案
mysql·微信小程序·php·uniapp·html5·web app