docker下的mysql my.ini_Docker + MySQL 主从环境搭建

本文详细介绍了如何在Docker环境下配置MySQL主从复制。通过创建配置文件my.cnf,设置不同server_id,启动Docker容器,并在主库创建复制账号,记录File和Position信息。接着在从库配置连接主库信息,启动同步线程,并解决配置文件权限问题,确保主从库正常连接和同步。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

环境说明Docker

Ubuntu/CentOS

MySQL v8.0.11

1. 配置my.cnf

my.cnf(部分老版本可能是my.ini)是MySQL核心配置文件。首先,在任意挂载目录下新建*.cnf文件(这里的*代表可以是任意的文件名称)。如果你的mysql是下载安装的,请找到my.cnf并参考如下配置:

[mysqld]

log-bin=mysql-bin //启用二进制日志

server_id=xxx //xxx代表唯一ID,默认是1。特别注意,当前版本这里是server_id而不是server-id,有些版本可能会不一样

实战示例

在/root/mysql/conf/master/新建master.cnf,配置如下:

[mysqld]

log-bin=mysql-bin

server_id=100

在/root/mysql/conf/slave/新建slave.cnf,添加如下:

[mysqld]

log-bin=mysql-bin

server_id=200

2. 运行MySQL

2.1 master(主库)docker run --name mysql-master -v /root/mysql/conf/master:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10000:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

2.2 slave(从库)docker run --name mysql-slave -v /root/mysql/conf/slave:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=root -p 10001:3306 -d mysql --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

注意,当前mysql版本是8.0.11,不同的版本之间可能存在差别,docker可以拉取指定版本的mysql Image,命令:docker pull mysql:8.0.11

3. 新建账号

3.1 在 master 上创建复制账号// 1.进入主库容器

docker exec -it mysql-master bash

// 2.登录mysql

mysql -uroot -proot

// 3.rep表示复制账号;可修改为%,代表任意的主机;`IDENTIFIED BY`后面代表rep用户的认证密码

# CREATE USER 'rep'@'' IDENTIFIED WITH mysql_native_password BY 'reppassword';

CREATE USER 'rep'@'' IDENTIFIED BY 'reppassword';

GRANT REPLICATION SLAVE ON *.* TO 'rep'@'';

3.2 获取并记录File和Position信息

执行show master status;即可

4507c7de09460818ddca2cca8b6d743e.png

4. 配置连接配置 slave 连接 master// 1.进入从库容器

docker exec -it mysql-slave bash

// 2.登录mysql

mysql -uroot -proot

// 3.配置主库认证信息,和同上

CHANGE MASTER TO MASTER_HOST='',MASTER_PORT=10000,MASTER_USER='rep',MASTER_PASSWORD='reppassword',MASTER_LOG_FILE='',MASTER_LOG_POS=;

5. 开启同步开启同步

在 slave 上启动线程:start slave;

查看状态

在 slave 上执行命令:show slave status\G;

dc067864435bea48bb75dc7081c80500.png

6. 相关命令设置从库只读:set global read_only=1;。1表示只读,0是读写,但对拥有super权限的账号是不生效的,所以在授权账号的时候应尽量避免添加super权限

查看读写情况:show global variables like "%read_only%";

查看server_id:show variables like '%server_id%';

7. 踩坑记录

执行show slave status\G;,发现从库并没有连接上主库,留意到错误信息大致为:“主从库server_id不能一致”,随即查看新增的master.cnf和slave.cnf,但并没有发现问题,随即用docker logs mysql-master查看启动日志,有一行警告大概是这样的:mysql: [Warning] World-writable config file '/etc/mysql/conf.d/master.cnf' is ignored.,这说明配置文件并没有挂载成功,搜索后得知当文件权限全局可写时,mysql会担心这种文件被其他用户恶意修改,所以会忽略掉这个配置文件,修改文件权限chmod 644 *.cnf后,再将以上流程重新跑了一遍,问题没有复现。

×

支持创作

699764a95f64ca4a50bf7c1e167c366f.png

8e7d91553f369e0bf4728cb79d26640f.png

7776ab7f6ade9e6a6a1667fa5f920b32.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值