Docker MySQL搭建一主一从
发布时间:2026/8/11 10:04:35 作者:尧图编辑部 阅读量:1,286

1.下载镜像dockerpull mysql:5.72.目录结构opt文件夹下 mysqltest/ ├── master/ │ ├── conf/my.cnf │ └── data/ ├── slave/ │ ├── conf/my.cnf │ └── data/ └── docker-compose.yml3.创建目录mkdir-p/opt/mysqltest/master/{conf,logs,data}mkdir-p/opt/mysqltest/slave/{conf,logs,data}4.创建主库配置文件my.confcat/opt/mysqltest/master/conf/my.cnfEOF [mysqld] #每个mysql的server-id必须为不重复的值 server-id1 #开启二进制日志 log-binmysql-bin binlog_formatROW #超过30天的log删除 expire_logs_days7 binlog-ignore-dbmysql # 可选只同步指定库 # binlog-do-dbtest_db character-set-serverutf8mb4 collation-serverutf8mb4_general_ci # 性能相关 innodb_flush_log_at_trx_commit1 sync_binlog1 #禁止 MySQL 对客户端连接进行 DNS 反向解析 skip-name-resolve EOF5.创建备库配置文件my.cnfcat/opt/mysqltest/slave/conf/my.cnfEOF [mysqld] server-id2 relay-logrelay-bin read-only1 # 可选 # replicate-do-dbtest_db character-set-serverutf8mb4 collation-serverutf8mb4_general_ci skip-name-resolve EOF6.创建docker-compose文件cat~/mysql_test.ymlEOF services: mysql-master: image: mysql:5.7 container_name: mysql-master environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_USER: repl MYSQL_PASSWORD: repl123 volumes: - /opt/mysqltest/master/conf:/etc/mysql/conf.d - /opt/mysqltest/master/logs:/logs - /opt/mysqltest/master/data:/var/lib/mysql ports: - 3307:3306 networks: - mysql-net restart: always mysql-slave: image: mysql:5.7 container_name: mysql-slave environment: MYSQL_ROOT_PASSWORD: root123 volumes: - /opt/mysqltest/slave/conf:/etc/mysql/conf.d - /opt/mysqltest/slave/logs:/logs - /opt/mysqltest/slave/data:/var/lib/mysql ports: - 3308:3306 networks: - mysql-net restart: always depends_on: - mysql-master networks: mysql-net: driver: bridge EOF#赋予执行权限chmodx mysql_test.yml7.启动docker-compose-fmysql_test.yml up-d8.在master创建复制账号dockerexec-itmysql-master mysql-uroot-proot123CREATEUSERrepl%IDENTIFIED BYrepl123;GRANT REPLICATION SLAVE ON *.* TOrepl%;FLUSH PRIVILEGES;SHOW MASTER STATUS;记录以下两个值非常重要File如 mysql-bin.000001Position如 5029.slave配置主从同步dockerexec-itmysql-slave mysql-uroot-proot123CHANGE MASTER TOMASTER_HOSTmysql-master,MASTER_USERrepl,MASTER_PASSWORDrepl123,MASTER_PORT3306,MASTER_LOG_FILEmysql-bin.000001,MASTER_LOG_POS502;START SLAVE;SHOW SLAVE STATUS\G✅ 关键字段必须正常Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0备注如果不使用docker compose方式第六第七步替换为如下docker run指令#搭建网桥dockernetwork create mysql-net#运行主库dockerrun-d\--namemysql-master\--networkmysql-net\-p3307:3306\-eMYSQL_ROOT_PASSWORDroot123\-eMYSQL_USERrepl\-eMYSQL_PASSWORDrepl123\-v/opt/mysqltest/master/conf:/etc/mysql/conf.d\-v/opt/mysqltest/master/logs:/logs\-v/opt/mysqltest/master/data:/var/lib/mysql\--restartalways\mysql:5.7#运行从库dockerrun-d\--namemysql-slave\--networkmysql-net\-p3308:3306\-eMYSQL_ROOT_PASSWORDroot123\-v/opt/mysqltest/slave/conf:/etc/mysql/conf.d\-v/opt/mysqltest/slave/logs:/logs\-v/opt/mysqltest/slave/data:/var/lib/mysql\--restartalways\mysql:5.7