公司动态

30分钟快速搭建Mysql主从环境

📅 2026/7/30 6:53:20
30分钟快速搭建Mysql主从环境
拉取mysql镜像docker pull mysql:5.7dockerCompose yml 文件version: 3.8 services: mysql-master: # 服务名称 image: mysql:5.7 # 镜像信息 container_name: mysql-master # 容器名称 environment: # 环境变量配置 MYSQL_ROOT_PASSWORD: root123 # root 密码 MYSQL_ROOT_HOST: % # 权限 volumes: # 容器卷 - ./msmysql/master/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/master/data:/var/lib/mysql ports: # 端口 - 3306:3306 command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci networks: # 网络连接 - mysql-net mysql-slave1: image: mysql:5.7 container_name: mysql-slave1 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_ROOT_HOST: % volumes: - ./msmysql/slave1/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/slave1/data:/var/lib/mysql ports: - 3307:3306 command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci networks: - mysql-net mysql-slave2: image: mysql:5.7 container_name: mysql-slave2 environment: MYSQL_ROOT_PASSWORD: root123 MYSQL_ROOT_HOST: % volumes: - ./msmysql/slave2/conf/my.cnf:/etc/mysql/my.cnf - ./msmysql/slave2/data:/var/lib/mysql ports: - 3308:3306 command: --character-set-serverutf8mb4 --collation-serverutf8mb4_unicode_ci networks: - mysql-net # 自定义网络连接连接方式为 bridge 方式。 host 方式等这里选择 bridge 方式为后续操作简化 # bridge 内的容器服务可以通过容器名访问省去dns 解析. networks: mysql-net: driver: bridge这里注意 为什么使用自定义创建的网络连接 并使用bridge 方式。docker compose 在进行排版时如果使用brideg 并且服务不指明网络 。 dockerCompose 就会自动创建一个名称为 服务名-default 的网络。容器卷msmysql | |---master | |--conf | |---my.cnf | |--data | |---slave1 | |--conf | |---my.cnf | |--data | |---slave2 | |--conf | |---my.cnf | |--datamy.cnf配置配置 主my.cnf[mysqld] # 服务id 唯一标识不能重复 server-id1 # 开启二进制日志主从复制的数据文件 log_binmysql-bin # 需要同步的数据库名称 这里不做添加 # binlog-do-dbxxxx # 设置binlog 格式 binlog_formatSTATEMENT # 设置网络允许远程连接 bind-address0.0.0.0从库配置 my.cnf[mysqld] #服务唯一表示 server-id2 #从库开启日志 便于级联复制 log_binmysql-bin #读日志 relay-logmysql-relay #允许远程连接 bind-address0.0.0.0 [mysqld] #服务唯一表示 server-id3 #从库开启日志 便于级联复制 log_binmysql-bin #读日志 relay-logmysql-relay #允许远程连接 bind-address0.0.0.0启动服务配置启动dockerCompose 排版文件docker compose -f msmysql.yml up -d进入主服务并配置 主从账号和获取主服务信息mysql -uroot -proot123进入mysql 服务并查看当前用户use mysql ; select user, host from user;这时候会发现只有root用户是有所有权限 %现在创建一个可以连接主从服务的用户GRANT REPLICATION SLAVE ON *.* TO repl% IDENTIFIED BY repl123;查看 master的binlog日志和开始间距show master status;会看到如图显示------------------------------------------------------------------------------- | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | ------------------------------------------------------------------------------- | mysql-bin.000004 | 405 | | | | -------------------------------------------------------------------------------file 用于slave 服务读取主服务的开始文件position 位置用于 slave 服务开始读取配置。登录从服务器docker exec -it /bin/bash #登录数据库 mysql -uroot -proot123; show slave status\G; #未启用时可看到 Slave_IO_Running: No Slave_SQL_Running: No设置从库同步change to master_host: Master的ip master_portMaster的端口号因为用的是docker中的mysql,所以这里指的是宿主机映射到到mysql容器的端口 master_user用于数据同步的用户 master_password用于同步的用户的密码 master_log_file指定 Slave 从哪个日志文件开始复制数据即上文中提到的 File 字段的值 master_log_pos从哪个 Position 开始读即上文中提到的 Position 字段的值 master_connect_retry如果连接失败重试的时间间隔单位是秒默认是60秒 #连接数据库输入以下配置其中FILE与POS为主服务器看到参数 CHANGE MASTER TO MASTER_HOSTmysql-master, MASTER_PORT3306, MASTER_USERrepl, MASTER_PASSWORDrepl123, MASTER_LOG_FILEmysql-bin.000004, MASTER_LOG_POS405, MASTER_CONNECT_RETRY60; #启动同步功能 start slave设置完成后重启slave1slave2 容器并登录查看数据库状态#查看slave配置信息 show slave status\G;log_file, log_pos 都要与主库保持一致。如果两个 slave 变成yes证明启动成功。测试登录主数据库#进入主数据库新建数据库mytestcreate DATABASE mytest;#进入slave1数据库查看数据库列表show databases;#可看到存在mytest表#进入slave2数据库可看到一样结果证明主从配置生效