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

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


适宜人群

  • 想学习微服务的php小白
  • 不会docker的php小白
  • 闲着无聊的php小白

为什么需要mysql主从复制

如同程序开发一样,一个大项目中,一个工程师干不过来了,所以就分成了前后端工程师。一个数据库忙不过来了,所以就需要多个数据库。

主从复制原理

多个mysql数据库的数据都存相同的数据,主库只负责 增加、编辑、删除操作。从库只负责查询操作。主从复制就是为了保证多个数据库的数据相同。通过读取主库的bin_log,子库中的进程去同步数据。

主从复制解决的问题

  • 单台MySQL服务器出现瓶颈
  • 数据库的备份
  • 写数据的锁表,导致查询业务受影响 所以就分开,各司其职

主从服务的具体实现步骤(以Docker为例)

1 安装Docker 我的电脑上是windows。此处省略

2 docker中安装三个MySQL 具体命令是

ini 复制代码
docker run --name mysql_master -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run --name mysql_slave1 -p 3308:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
docker run --name mysql_slave2 -p 3309:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7

配置了三台mysql,其中一台主服务器,2台从服务器。-p 为端口映射,把docker的端口映射到了本地相对应的端口 -e MYSQL_ROOT_PASSWORD 这个是mysql的密码 -d 为后台运行。

请注意:在正常生产环境中,mysql的数据文件、配置文件、日志等等其实应该保存在宿主机的。这样当容器没了的时候数据不会丢失,只是在后面追加更多参数而已。这里只是进行学习,所以这些数据并没有提取出来。

3 修改主服务器配置

这里因为我对docker命令不是那么的熟,而且linux命令也没那么会pia pia pia,所以这些修改我都是在图形界面中完成。

选择 files 然后找到 etc/my.cnf文件 右击进行编辑操作。

添加下方的配置项

ini 复制代码
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT

其中 server-id必须唯一 log-bin 配置参数 为开启 bin_log的意思。保存以后重启容器。 此时通过容器的命令行去查看 bin_log的开启情况。testdb就是你将来想要同步的那个数据库名字。

复制代码
mysql -uroot -proot

登录到mysql

sql 复制代码
show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.01 sec)

上方value中为 ON则代表 binlog开启成功。

4 配置主库的可访问账号,供从库拉取数据。

sql 复制代码
flush privileges;
CREATE USER 'copy'@'%' IDENTIFIED WITH mysql_native_password BY 'admin123';
GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';

第一条命令是刷新啥,我也不是很清楚。 第二条命令是创建一个用户 用户名是 copy,后面的 admin123为密码【从库拉取数据的时候需要配置】 第三条命令是赋予权限。

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

显示binlog信息。其中,file position。两个参数为日志的位置,是从库配置时候需要用到的参数信息。

完成上述配置,则主库的配置成功。重启一下即可。

5 修改从库的配置信息 使用上面修改主库配置信息的方法,修改从库的配置信息。

ini 复制代码
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
ini 复制代码
#从服务器唯一ID
server-id=3
#启用中继日志
relay-log=mysql-relay

上面是两个从库的配置,server-id是唯一的。

相关推荐
BingoGo1 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php
JaguarJack1 小时前
OpenSwoole 26.2.0 发布:支持 PHP 8.5、io_uring 后端及协程调试改进
后端·php·服务端
Victor3561 小时前
MongoDB(18)如何向MongoDB集合中插入文档?
后端
Victor3561 小时前
MongoDB(19)如何查询MongoDB集合中的文档?
后端
点光15 小时前
使用Sentinel作为Spring Boot应用限流组件
后端
不要秃头啊15 小时前
别再谈提效了:AI 时代的开发范式本质变了
前端·后端·程序员
有志16 小时前
Java 项目添加慢 SQL 查询工具实践
后端
山佳的山16 小时前
KingbaseES 共享锁(SHARE)与排他锁(EXCLUSIVE)详解及测试复现
后端
Leo89916 小时前
rust 从零单排 之 一战到底
后端
程序员清风17 小时前
程序员兼职必看:靠谱软件外包平台挑选指南与避坑清单!
java·后端·面试