1. 环境说明
IP地址 | 服务 |
---|
10.1.xxx.65 | mysql-01 |
10.1.xxx.66 | mysql-02 |
2. 启动 mysql-01
创建master-01 目录,目录下边创建 docker-compose.yml
和my.cnf
两个文件如下:
| version: '3' |
| services: |
| db: |
| image: 'harbocto.xxx.com.cn/public/mysql:5.7' |
| restart: always |
| container_name: mysql |
| volumes: |
| - ./data:/var/lib/mysql |
| - ./my.cnf:/etc/mysql/my.cnf |
| - ./init:/docker-entrypoint-initdb.d/ |
| - /etc/localtime:/etc/localtime |
| - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone |
| ports: |
| - '3306:3306' |
| environment: |
| MYSQL_ROOT_PASSWORD: "yqKlmgs1cl" |
| MYSQL_USER: 'liubei' |
| MYSQL_PASSWORD: 'yqKlmgs1cl' |
| MYSQL_DATABASE: 'liubedb' |
| |
| [mysqld] |
| pid-file = /var/run/mysqld/mysqld.pid |
| socket = /var/run/mysqld/mysqld.sock |
| datadir = /var/lib/mysql |
| secure-file-priv= NULL |
| # Disabling symbolic-links is recommended to prevent assorted security risks |
| symbolic-links=0 |
| |
| # Custom config should go here |
| !includedir /etc/mysql/conf.d/ |
| |
| |
| sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
| server-id=150 |
| log-bin=/var/lib/mysql/mysql-bin |
| expire_logs_days=7 |
| binlog-format=mixed |
| max_allowed_packet=256M |
| relay-log=mysql-relay |
| log-slave-updates |
3. 启动 mysql-02
创建master-02 目录,下边创建 docker-compose.yml
和my.cnf
两个文件如下:
| version: '3' |
| services: |
| db: |
| image: 'harbocto.xxx.com.cn/public/mysql:5.7' |
| restart: always |
| container_name: mysql |
| volumes: |
| - ./data:/var/lib/mysql |
| - ./my.cnf:/etc/mysql/my.cnf |
| - ./init:/docker-entrypoint-initdb.d/ |
| - /etc/localtime:/etc/localtime |
| - /usr/share/zoneinfo/Asia/Shanghai:/etc/timezone |
| ports: |
| - '3306:3306' |
| environment: |
| MYSQL_ROOT_PASSWORD: "yqKlmgs1cl" |
| MYSQL_USER: 'liubei' |
| MYSQL_PASSWORD: 'yqKlmgs1cl' |
| MYSQL_DATABASE: 'liubedb' |
| |
| [mysqld] |
| pid-file = /var/run/mysqld/mysqld.pid |
| socket = /var/run/mysqld/mysqld.sock |
| datadir = /var/lib/mysql |
| secure-file-priv= NULL |
| # Disabling symbolic-links is recommended to prevent assorted security risks |
| symbolic-links=0 |
| |
| # Custom config should go here |
| !includedir /etc/mysql/conf.d/ |
| |
| |
| sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION |
| server-id=200 |
| log-bin=/var/lib/mysql/mysql-bin |
| expire_logs_days=7 |
| binlog-format=mixed |
| max_allowed_packet=256M |
| relay-log=mysql-relay |
| log-slave-updates |
4. 配置主从同步
4.1 mysql-01(master) ==> mysql-02(slave)
登录10.1.xxx.66操作
1)确定slave设置
| [root@db-02 ~]# docker ps |
| CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES |
| ead2301cd20d harbocto.xxx.com.cn/public/mysql:5.7 "docker-entrypoint.s…" 58 minutes ago Up 58 minutes 0.0.0.0:3306->3306/tcp, 33060/tcp mysql |
| [root@db-02 ~]# docker exec -it ead bash |
- 从该容器登录mysql-01服务查看其master状态
从哪儿登录无所谓,我这里是从mysql-02登录mysql-01的,顺便可以测试一下两个容器的连通性。
| root@ead2301cd20d:/# mysql -h10.1.xxx.65 -uroot -pyqKlmgs1cl |
| mysql> show master status; |
| + |
| | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | |
| + |
| | mysql-bin.000002 | 154 | | | | |
| + |
| 1 row in set (0.00 sec) |
| mysql> exit |
- 根据mysql-01 的master 状态拼接mysql-02 设置 slave的命令:
| CHANGE MASTER TO master_host = '10.1.xx.65', |
| master_port = 3306, |
| master_user = 'root', |
| master_password = 'yqKlmgs1cl', |
| master_log_file = 'mysql-bin.000002', |
| master_log_pos = 154; |
2)配置主从同步
前边查看mysql-01的master状态后,只退出了mysql(并没有退出容器)因此这里直接从容器里登录mysql-02。
| root@ead2301cd20d:/# mysql -uroot -pyqKlmgs1cl |
| mysql> CHANGE MASTER TO master_host = '10.1.xx.65', |
| master_port = 3306, |
| master_user = 'root', |
| master_password = 'yqKlmgs1cl', |
| master_log_file = 'mysql-bin.000002', |
| master_log_pos = 154; |
| mysql> start slave; |
| Query OK, 0 rows affected (0.00 sec) |
| mysql> show slave status\G; |
| *************************** 1. row *************************** |
| Slave_IO_State: Waiting for master to send event |
| Master_Host: 10.1.30.65 |
| Master_User: root |
| Master_Port: 3306 |
| Connect_Retry: 60 |
| Master_Log_File: mysql-bin.000002 |
| Read_Master_Log_Pos: 154 |
| Relay_Log_File: mysql-relay.000003 |
| Relay_Log_Pos: 320 |
| Relay_Master_Log_File: mysql-bin.000002 |
| 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: 0 |
| Last_Error: |
| Skip_Counter: 0 |
| Exec_Master_Log_Pos: 154 |
| Relay_Log_Space: 523 |
| Until_Condition: None |
| Until_Log_File: |
| Until_Log_Pos: 0 |
| Master_SSL_Allowed: No |
| Master_SSL_CA_File: |
| Master_SSL_CA_Path: |
| Master_SSL_Cert: |
| Master_SSL_Cipher: |
| Master_SSL_Key: |
| Seconds_Behind_Master: 0 |
| Master_SSL_Verify_Server_Cert: No |
| Last_IO_Errno: 0 |
| Last_IO_Error: |
| Last_SQL_Errno: 0 |
| Last_SQL_Error: |
| Replicate_Ignore_Server_Ids: |
| Master_Server_Id: 150 |
| Master_UUID: af701e96-0279-11ed-a999-0242ac130002 |
| Master_Info_File: /var/lib/mysql/master.info |
| SQL_Delay: 0 |
| SQL_Remaining_Delay: NULL |
| Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates |
| Master_Retry_Count: 86400 |
| Master_Bind: |
| Last_IO_Error_Timestamp: |
| Last_SQL_Error_Timestamp: |
| Master_SSL_Crl: |
| Master_SSL_Crlpath: |
| Retrieved_Gtid_Set: |
| Executed_Gtid_Set: |
| Auto_Position: 0 |
| Replicate_Rewrite_DB: |
| Channel_Name: |
| Master_TLS_Version: |
| 1 row in set (0.00 sec) |
| |
4.2 mysql-02(master) ==> mysql-01(slave)
登录10.1.xxx.65操作
1)确定slave设置
同上,只是master点换成了mysql-02。
根据mysql-02的master状态确定 mysql-01的slave设置命令。
2)配置主从同步
同上,只不过这次是在mysql-01服务上执行命令。
3. 验证
我们可以在mysql-01 上创建表,然后看看mysql-02上有没有;
然后在mysql-02上创建表,看看mysql-01上有没有。

【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了