docker部署mysql 5.7主从集群

📅 2026/7/1 1:46:35
docker部署mysql 5.7主从集群
1、拉取镜像注国内下载需要配置镜像加速器cat/etc/docker/daemon.jsonEOF { registry-mirrors: [ https://docker.m.daocloud.io ] } EOFsystemctl daemon-reload systemctl restartdockerdockerpull mysql:5.72、准备my.cnf配置文件和docker compose配置文件注默认的my.cnf配置文件可以从先启动Mysql容器服务然后从容器里拷贝出来。dockerrun-d--namemysql-eMYSQL_ROOT_PASSWORD123456mysql:5.7dockercpmysql:/etc/my.cnf.# 创建配置目录mkdir-p/opt/mysql/{master,slave}# 拷贝配置文件\cp-fmy.cnf /opt/mysql/master/\cp-fmy.cnf /opt/mysql/slave/# 修改配置文件vim/opt/mysql/master/my.cnf[mysqld]server-id1# 唯一ID必须与从库不同log-binmysql-bin# 开启并设置二进制日志文件名binlog_formatROW# 推荐使用ROW格式expire_logs_days7# 日志保留天数避免磁盘占满vim/opt/mysql/slave/my.cnf server-id2# 唯一ID必须与从库不同log-binmysql-bin# 开启并设置二进制日志文件名binlog_formatROW# 推荐使用ROW格式expire_logs_days7# 日志保留天数避免磁盘占满# 准备docker compose配置文件yaml services: mysql-master: container_name: mysql-master image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD:123456volumes: -/var/lib/mysql-/opt/mysql/master/my.cnf:/etc/my.cnfports: -3306:3306mysql-slave: container_name: mysql-slave image: mysql:5.7 restart: always environment: MYSQL_ROOT_PASSWORD:123456volumes: -/var/lib/mysql-/opt/mysql/slave/my.cnf:/etc/my.cnfports: -3307:33063、启动mysql服务[rootdevelop ~]# docker compose -f mysql-5.7.yml up -d[]Running3/3 ✔ Network root_default Created0.0s ✔ Container mysql-slave Started0.3s ✔ Container mysql-master Started4、配置mysql主服务# 进入mysql-master容器并登录mysql服务[rootdevelop ~]# docker exec -it mysql-master bashbash-4.2# mysql -uroot -p123456# 创建复制用户CREATEUSERrepl%IDENTIFIED BY123456;GRANT REPLICATION SLAVE ON *.* TOrepl%;FLUSH PRIVILEGES;# 查看主服务状态mysqlshow master status;-------------------------------------------------------------------------------|File|Position|Binlog_Do_DB|Binlog_Ignore_DB|Executed_Gtid_Set|-------------------------------------------------------------------------------|mysql-bin.000003|747||||-------------------------------------------------------------------------------1rowinset(0.00sec)5、配置mysql从服务# 进入mysql-slave容器并登录mysql服务[rootdevelop ~]# docker exec -it mysql-slave bashbash-4.2# mysql -uroot -p123456# 配置主从连接并启动CHANGE MASTER TOMASTER_HOST192.168.80.100,MASTER_USERrepl,MASTER_PASSWORD123456,MASTER_LOG_FILEmysql-bin.000003,MASTER_LOG_POS747;START SLAVE;6、检查主从服务状态mysqlshow slave status\G;***************************1. row *************************** Slave_IO_State: Waitingformaster to send event Master_Host:192.168.80.100 Master_User: repl Master_Port:3306Connect_Retry:60Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos:747Relay_Log_File: 5fc9a5d8447d-relay-bin.000002 Relay_Log_Pos:320Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes# 表示主从复制正常Slave_SQL_Running: Yes# 表示主从复制正常7、检查主从延迟mysqlshow slave status\G;***************************1. row *************************** Slave_IO_State: Waitingformaster to send event Master_Host:192.168.80.100 Master_User: repl Master_Port:3306Connect_Retry:60Master_Log_File: mysql-bin.000003 Read_Master_Log_Pos:747Relay_Log_File: 5fc9a5d8447d-relay-bin.000002 Relay_Log_Pos:320Relay_Master_Log_File: mysql-bin.000003 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno:0Last_Error: Skip_Counter:0Exec_Master_Log_Pos:747Relay_Log_Space:534Until_Condition: None Until_Log_File: Until_Log_Pos:0Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master:0# 表示主从延迟时间时间越短越好。