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个小时的倒腾,我这里成功了。

相关推荐
码事漫谈5 小时前
大模型输出的“隐性结构塌缩”问题及对策
前端·后端
小江的记录本6 小时前
【网络安全】《网络安全常见攻击与防御》(附:《六大攻击核心特性横向对比表》)
java·网络·人工智能·后端·python·安全·web安全
努力的小雨6 小时前
龙虾量化实战法(QClaw)
后端
橙露6 小时前
SpringBoot 整合 MinIO:分布式文件存储上传下载
spring boot·分布式·后端
2401_895521348 小时前
【Spring Security系列】Spring Security 过滤器详解与基于JDBC的认证实现
java·后端·spring
小码哥_常8 小时前
大文件上传不再卡顿:Spring Boot 分片上传、断点续传与进度条实现全解析
后端
_Evan_Yao9 小时前
RAG中的“Chunk”艺术:我试过10种切分策略后总结的结论
java·人工智能·后端·python·软件工程
今天你TLE了吗9 小时前
LLM到Agent&RAG——AI概念概述 第二章:提示词
人工智能·笔记·后端·学习
IT_陈寒10 小时前
Vue的响应式把我坑惨了,原来问题出在这
前端·人工智能·后端
shark222222210 小时前
能懂!基于Springboot的用户增删查改(三层设计模式)
spring boot·后端·设计模式