Docker 快速部署 MySQL 主从复制(一主一从)

张开发
2026/4/16 11:54:29 15 分钟阅读

分享文章

Docker 快速部署 MySQL 主从复制(一主一从)
一、环境准备安装 Docker已装跳过规划 IP/端口主库Master端口 3307从库Slave端口 3308创建数据目录持久化# 创建主从数据配置目录mkdir-p/data/mysql/master/confmkdir-p/data/mysql/master/datamkdir-p/data/mysql/slave/confmkdir-p/data/mysql/slave/data二、配置主库 Master1. 创建主库配置文件vi/data/mysql/master/conf/my.cnf写入以下内容[mysqld] server-id1 log-binmysql-bin binlog-formatROW binlog-do-dbtestdb # 需要同步的库可改 binlog-ignore-dbmysql # 不同步的库 binlog-ignore-dbsys binlog-ignore-dbinformation_schema binlog-ignore-dbperformance_schema character-set-serverutf8mb4 default-authentication-pluginmysql_native_password2. 启动主库容器dockerrun-d\--namemysql-master\--restartalways\-p3307:3306\-v/data/mysql/master/conf/my.cnf:/etc/my.cnf\-v/data/mysql/master/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD123456\mysql:8.0三、配置从库 Slave1. 创建从库配置文件vi/data/mysql/slave/conf/my.cnf写入[mysqld] server-id2 relay-logmysql-relay-bin read_only1 character-set-serverutf8mb4 default-authentication-pluginmysql_native_password2. 启动从库容器dockerrun-d\--namemysql-slave\--restartalways\-p3308:3306\-v/data/mysql/slave/conf/my.cnf:/etc/my.cnf\-v/data/mysql/slave/data:/var/lib/mysql\-eMYSQL_ROOT_PASSWORD123456\mysql:8.0四、主库创建同步账号进入主库dockerexec-itmysql-master mysql-uroot-p123456执行SQL创建同步用户CREATEUSERrepl%IDENTIFIEDBYRepl123456;GRANTREPLICATIONSLAVEON*.*TOrepl%;FLUSHPRIVILEGES;-- 查看主库状态记录 File 和 Position后面要用SHOWMASTERSTATUS;示例结果File: mysql-bin.000003 Position: 669这两个值必须记下来五、从库配置连接主库进入从库dockerexec-itmysql-slave mysql-uroot-p123456执行SQL修改为你自己的信息CHANGE MASTERTOMASTER_HOSTxxxx,# 宿主机IP / 主库容器IPMASTER_PORT3306,# 容器内部端口不是宿主机3307MASTER_USERrepl,MASTER_PASSWORDRepl123456,MASTER_LOG_FILEmysql-bin.000003,# 刚才记录的值MASTER_LOG_POS669;# 刚才记录的值-- 启动同步STARTSLAVE;-- 查看同步状态SHOWSLAVESTATUS\G六、验证是否成功看状态Slave_IO_Running: YesSlave_SQL_Running: Yes两个都是 Yes 就成功了测试同步主库创建库/表/插入数据从库自动同步1. 先在主库创建要同步的库你主库现在Binlog_Do_DBtestdb但库里还没有testdb所以先建库进入主库 MySQLdockerexec-itmysql-master mysql-uroot-p123456执行CREATEDATABASEtestdb;USEtestdb;CREATETABLEuser(idINTPRIMARYKEYAUTO_INCREMENT,nameVARCHAR(20));INSERTINTOuser(name)VALUES(zhangsan);INSERTINTOuser(name)VALUES(lisi);2. 去从库查看是否同步进入从库 MySQLdockerexec-itmysql-slave mysql-uroot-p123456执行SHOWDATABASES;能看到testdb就说明库同步了。再查表数据USEtestdb;SELECT*FROMuser;3. 看一眼主从状态确保正常SHOWSLAVESTATUS\G只要Slave_IO_Running: YesSlave_SQL_Running: Yes就说明主从正常数据会自动同步。如果你想同步多个库比如 testdb、orderdb主库my.cnf改成这样binlog-do-dbtestdb binlog-do-dborderdb binlog-ignore-dbmysql binlog-ignore-dbsys binlog-ignore-dbinformation_schema binlog-ignore-dbperformance_schema然后重启主库dockerrestart mysql-master再去主库建orderdb测试同步即可。七、常用命令# 重启主从dockerrestart mysql-master mysql-slave# 从库停止同步STOP SLAVE;RESET SLAVE;# 查看主库状态SHOW MASTER STATUS;# 查看从库状态SHOW SLAVE STATUS\G;

更多文章