docker 部署mysql8 主备
一、环境准备
服务名 | 版本号 | 备注 |
---|---|---|
docker | >=18.04 | ---- |
mysql | >=8.0 | ---- |
centos | >=7.6 | ---- |
1、准备docker环境
- 联网环境下,可以直接yum安装,其他安装方式,可以查看其他文档。
yum install -y docker-ce
2、下载官网的docker仓库中的mysql镜像
- hub地址:https://hub.docker.com/_/mysql?tab=tags
docker pull mysql:latest
二、docker部署主备mysql8
主环境准备
1、准备目录
- 数据存放目录
mkdir -p /data/mysqlM1/data
- 配置文件目录
mkdir -p /data/mysqlM1/conf
chmod 777 -R /data/mysqlM1
2、主配置文件准备 - 创建文件vi /data/mysqlM1/conf/my.cnf
[client]
port = 3306
default-character-set=utf8mb4
socket = /data/mysqlM1/mysql.sock
[mysqld]
# 数据存储路径
datadir = /data/mysqlM1/data/
#basedir =
tmpdir = /tmp
socket = /data/mysqlM1/mysql.sock
pid-file = /data/mysqlM1/mysql.pid
secure_file_priv=/var/lib/mysql/
skip-external-locking = 1
skip-name-resolve = 1
port = 3306
# 设置server_id,一般设置为IP,注意要唯一
server_id = 1
default_authentication_plugin=mysql_native_password
default-storage-engine = InnoDB
character-set-server = utf8mb4
default_password_lifetime=0
# 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# mysql的最大连接数
max_connections = 60000
#### log ####
log_timestamps=system
log_bin = /data/mysqlM1/mysql-bin
log_bin_index = /data/mysqlM1/mysql-bin.index
binlog_format = row
expire_logs_days = 180 # binlog过期清理时间
max_binlog_size = 100m # binlog每个日志文件大小
binlog_cache_size = 4m # binlog缓存大小
max_binlog_cache_size = 512m # 最大binlog缓存大小
relay_log_recovery=ON
relay_log=/data/mysqlM1/mysql-relay-bin
relay_log_index=/data/mysqlM1/mysql-relay-bin.index
log_error = /data/mysqlM1/mysql-error.log
#### semi sync replication settings #####
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
3、启动主容器
此处密码自定义:MYSQL_ROOT_PASSWORD=****
docker run -d --name mysqlM1 --restart always --net=host -v /data/mysqlM1/conf/my.cnf:/etc/mysql/my.cnf -v /etc/localtime:/etc/localtime --privileged=true -e MYSQL_ROOT_PASSWORD=**** -e TZ=Asia/Shanghai mysql:latest
4、进入主容器,创建用于主备的账户
- 进入容器
docker exec -it mysqlM1 bash
- 登录mysql
mysql -uroot -p
- 创建用户
CREATE USER 'backup'@'%' IDENTIFIED BY '123456';
或者
CREATE USER 'backup'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
- 授权
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%';
- 查看主库状态
show master status;
红框中的内容是需要在从库中配置的
备库环境准备
1、准备目录
- 数据存放目录
mkdir -p /data/mysqlS1/data
- 配置文件目录
mkdir -p /data/mysqlS1/conf
chmod 777 -R /data/mysqlS1
2、主配置文件准备 - 创建文件vi /data/mysqlS1/conf/my.cnf
[client]
port = 3310
default-character-set=utf8mb4
socket = /data/mysqlS1/mysql.sock
[mysqld]
datadir = /data/mysqlS1/data/ # 数据存储路径
#basedir = /usr/local/mysql57 # 设置mysql的安装目录
tmpdir = /tmp
socket = /data/mysqlS1/mysql.sock
pid-file = /data/mysqlS1/mysql.pid
secure_file_priv=/var/lib/mysql/ # 参数用来限制数据导入和导出操作的效果
skip-external-locking = 1 # 禁止外部锁表
skip-name-resolve = 1 # 禁止域名解析的
port = 3310
server_id = 2 # 设置server_id,一般设置为IP,注意要唯一
read_only=1 # 只读模式,不会影响slave同步复制的功能
default_authentication_plugin=mysql_native_password # 默认使用“mysql_native_password”插件认证
default-storage-engine = InnoDB # 创建新表时将使用的默认存储引擎
character-set-server = utf8mb4 # 服务端使用的字符集默认为UTF8
default_password_lifetime=0 # 密码永不过期
# 忽略的库表
replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# mysql的最大连接数
max_connections = 60000
#### log ####
log_timestamps=system # 日志时间设置为系统时间
log_bin = /data/mysqlS1/mysql-bin # binlog日志文件,主备的关键
log_bin_index = /data/mysqlS1/mysql-bin.index
binlog_format = row # binlog日志格式
expire_logs_days = 180 # binlog过期清理时间
max_binlog_size = 100m # binlog每个日志文件大小
binlog_cache_size = 4m # binlog缓存大小
max_binlog_cache_size = 512m # 最大binlog缓存大小
relay_log_recovery=ON
relay_log=/data/mysqlS1/mysql-relay-bin
relay_log_index=/data/mysqlS1/mysql-relay-bin.index
log_error = /data/mysqlS1/mysql-error.log
#### semi sync replication settings (半同步复制设置) #####
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000 # 切换复制的timeout
3、启动副容器
此处密码自定义:MYSQL_ROOT_PASSWORD=****
``
docker run -d --name mysqlS1 --restart always --net=host -v /data/mysqlS1/conf/my.cnf:/etc/mysql/my.cnf -v /data/mysqlS1/:/data/mysqlS1/ --privileged=true -e MYSQL_ROOT_PASSWORD=****** -e TZ=Asia/Shanghai mysql:latest
4、进入从容器,设置用于同步的账户
- 进入容器
docker exec -it mysqlS1 bash
- 登录mysql
mysql -uroot -p
- 配置备环境
此处参数值需要根据实际情况修改
change master to master_host='127.0.0.1',
master_port=3306,
master_user='backup',
master_password='123456',
master_log_file='mysql-bin.000004',
master_log_pos=886;
- 开启slave
start slave;
- 查看slave状态
show slave status\G;
三、验证
1、主库创建数据库test
create schema test default character set utf8 collate utf8_general_ci;
2、查看从库
show databases;
3、 验证成功
所有的事都会过去,我们所有的人都是从小白开始,坚持下去。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)