PHPer 的微服务学习笔记-基于Docker的Mysql主从搭建(下)

年关将至,工作上也没什么大的安排。闲暇时间从一个PHP工程师的角度去学习一下微服务架构,毕竟谁都想进步嘛,哇哈哈


6 配置从库与主库的关系

ini 复制代码
CHANGE MASTER TO MASTER_HOST="172.17.0.2",MASTER_PORT=3306,MASTER_USER="copy",MASTER_PASSWORD="root",MASTER_LOG_FILE="mysql-bin.000001",MASTER_LOG_POS=747;

请注意上面的一些参数。

MASTER_HOST 这个参数是主库的ip地址。

在上面的位置查看,请注意。这个ip是自动分配的,会受容器启动顺序的先后影响。因为我是第一个创建的主容器,所以分配的是 2 .然后依次往后排。生产环境中这个ip是需要固定不变的,这就需要用的docker的网络,我还不会,所以就不整那么复杂了。

MASTER_PORT 这个参数是主库的端口

请注意,在创建主库的时候,我们是把 容器的 3306 映射到 宿主机的 3307端口上,也就是说,我在我的电脑上访问 3307 其实是转发到容器内部的 3306端口上的。因为从库是直接通过内部访问,所以这里设置的的 3306端口。切记。

MASTER_USER 主库设置的供从库使用的用户名 copy

MASTER_PASSWORD 主库设置的供从库使用的用户名的密码 admin123 👆上面设置的

MASTER_LOG_FILE binlog的那俩位置参数之一。

MASTER_LOG_POS binlog的那俩位置参数之一。

vbscript 复制代码
ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.

运行出现这个错误,因为没重启,mysql配置文件还未生效。

ini 复制代码
CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_PORT=3306, MASTER_USER='copy', MASTER_PASSWORD='admin123', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

运行未报错的话代表执行成功。

sql 复制代码
start slave;
Query OK, 0 rows affected (0.01 sec)

开启slave

yaml 复制代码
SHOW SLAVE STATUS\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.0.2
                  Master_User: copy
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            ...

查看命令运行。 \G 代表格式化输出。不写的话 输出会很乱,不好对应。 Slave_IO_Running: Yes Slave_SQL_Running: Yes。看到这俩都是 Yes,代表链接 配置成功。

容器中出现的一些日志还可以通过dockerd的logs面板中进行查看。

7 相同的方式再去配置另外的那一个从库。

yaml 复制代码
mysql> CHANGE MASTER TO MASTER_HOST='172.17.0.2', MASTER_PORT=3306, MASTER_USER='copy', MASTER_PASSWORD='admin123', MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=154;
Query OK, 0 rows affected, 2 warnings (0.03 sec)

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: 172.17.0.2
                  Master_User: copy
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000002
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000002
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

上面则代表成功。

8 测试数据 此时我们兴致冲冲的去主库中添加一些测试数据,观察数据同步情况。

可以发现,数据并没有同步。挠头,挠头,挠头。

此时查看从库的日志中出现这个日志。

arduino 复制代码
2024-02-05 13:46:17 2024-02-05T05:46:17.402955Z 3 [Note] Slave I/O thread for channel '': connected to master 'copy@172.17.0.2:3306',replication started in log 'mysql-bin.000002' at position 154

这大致是因为 重启了,主库的日志文件发生变化了。

我们把三个容器都重启。重新配置 bin log即可。

sql 复制代码
mysql> show master status;
+------------------+----------+--------------+--------------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB         | Executed_Gtid_Set |
+------------------+----------+--------------+--------------------------+-------------------+
| mysql-bin.000003 |      154 | testdb       | mysql,information_schema |                   |
+------------------+----------+--------------+--------------------------+-------------------+
1 row in set (0.00 sec)

可能到此,还是没有同步成功。那就需要你花点时间去调试咯。经过我1个小时的倒腾,我这里成功了。

相关推荐
小江的记录本38 分钟前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34161 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan1 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer2 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3562 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3562 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer3 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP4 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪
人间打气筒(Ada)4 小时前
如何基于 Go-kit 开发 Web 应用:从接口层到业务层再到数据层
开发语言·后端·golang
开心就好20254 小时前
使用Wireshark进行TCP数据包抓包分析:三次握手与四次挥手详解
后端·ios