Mysql主从搭建 基于DOCKER

创建目录

powershell 复制代码
#主节点目录
mkdir -p /home/data/master/mysql/

#从节点目录
mkdir -p /home/data/slave/mysql/

创建配置文件

powershell 复制代码
# 主节点配置
touch /home/data/master/mysql/my.cnf

# 从节点配置
touch /home/data/slave/mysql/my.cnf

编辑配置文件

主节点配置文件

powershell 复制代码
vim /home/data/master/mysql/my.cnf
powershell 复制代码
[mysqld]
# 开启 binlog
log-bin=mysql-bin
binlog_format=row
#server_id不要重复
server-id=1

从节点配置文件

powershell 复制代码
vim /home/data/slave/mysql/my.cnf
powershell 复制代码
[mysqld]
# 开启 binlog
log-bin=mysql-bin
binlog_format=row
#server_id不要重复
server-id=2

部署节点

部署主节点

powershell 复制代码
docker run \
    -p 3307:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v /home/data/master/mysql/conf:/etc/mysql/conf.d \
    -v /home/data/master/mysql/data:/var/lib/mysql:rw \
    -v /home/data/master/mysql/my.cnf:/etc/mysql/my.cnf \
    --name mysql_master \
    --restart=always \
    -d mysql:8.0

部署从节点

powershell 复制代码
docker run \
    -p 3308:3306 \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -v /home/data/slave/mysql/conf:/etc/mysql/conf.d \
    -v /home/data/slave/mysql/data:/var/lib/mysql:rw \
    -v /home/data/slave/mysql/my.cnf:/etc/mysql/my.cnf \
    --name mysql_slave \
    --restart=always \
    -d mysql:8.0

配置权限

主节点执行

sql 复制代码
-- 创建slave用户
CREATE USER 'demo_slave'@'%';
-- 设置密码
ALTER USER 'demo_slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456789';
-- 授予复制权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'demo_slave'@'%';
-- 刷新权限
FLUSH PRIVILEGES;

主节点执行命令

powershell 复制代码
SHOW MASTER STATUS;

该命令会返回以下信息:

名称 说明
File 当前正在写入的二进制日志文件名
Position 当前正在写入的二进制日志文件的位置
Binlog_Do_DB 指定需要写入二进制日志的数据库名
Binlog_Ignore_DB 指定不需要写入二进制日志的数据库名

配置从库读取主节点配置

sql 复制代码
change master to master_host='主节点ip', master_user='demo_slave', master_password='123456789', master_port=3307, master_log_file='mysql-bin.000003', master_log_pos=2023, master_connect_retry=30;

参数说明

参数 说明
master_port Master的端口号,指的是容器的端口号
master_user 用于数据同步的用户
master_password 用于同步的用户的密码
master_log_file 指定Slave从哪个日志文件开始复制数据,即上文中提到的File字段的值
master_log_pos 从哪个Position开始读,即上文中提到的Position字段的值
master_connect_retry 如果连接失败,重试的时间间隔,单位是秒,默认是60秒

设置从数据库开启主从服务

sql 复制代码
start slave;

查询下当前从服务器的状态

sql 复制代码
show slave status;
  • Slave_IO_RunningSlave_SQL_Running 都是Yes 就成功了,可以进行测试一下
相关推荐
飞翔的佩奇3 小时前
基于SpringBoot+MyBatis+MySQL+VUE实现的房屋交易平台管理系统(附源码+数据库+毕业论文+部署教程+配套软件)
数据库·spring boot·mysql·vue·毕业设计·mybatis·房屋交易平台
锦鲤飞上天8 小时前
CentOS卸载、安装MySQL8(yum操作)
linux·adb·centos
wb1899 小时前
服务器的Mysql 集群技术
linux·运维·服务器·数据库·笔记·mysql·云计算
鲨鱼辣椒_TUT9 小时前
MySQL连接算法和小表驱动大表的原理
mysql·算法·adb
天上掉下来个程小白10 小时前
Docker-07.Docker基础-数据卷挂载
运维·docker·微服务·容器
迷失蒲公英10 小时前
Docker容器中文PDF生成解决方案
docker·容器·pdf
寒士obj11 小时前
MySQL偏门但基础的面试题集锦
数据库·mysql
唐叔在学习11 小时前
9类主流数据库 - 帮你更好地进行数据库选型!
数据库·redis·mysql·mongodb·nosql·大数据存储
大数据狂人12 小时前
从 Hive 数仓出发,全面剖析 StarRocks、MySQL、HBase 的使用场景与区别
hive·mysql·hbase
杨浦老苏12 小时前
IMAP电子邮件归档系统Mail-Archiver
docker·群晖·邮件·email