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是唯一的。

相关推荐
lybugproducer14 分钟前
浅谈 Redis 数据类型
java·数据库·redis·后端·链表·缓存
焚 城26 分钟前
.NET8关于ORM的一次思考
后端·.net
撸猫7913 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession
嘵奇3 小时前
Spring Boot中HTTP连接池的配置与优化实践
spring boot·后端·http
子燕若水3 小时前
Flask 调试的时候进入main函数两次
后端·python·flask
程序员爱钓鱼3 小时前
跳转语句:break、continue、goto -《Go语言实战指南》
开发语言·后端·golang·go1.19
Persistence___4 小时前
SpringBoot中的拦截器
java·spring boot·后端
嘵奇5 小时前
Spring Boot 跨域问题全解:原理、解决方案与最佳实践
java·spring boot·后端
景天科技苑6 小时前
【Rust泛型】Rust泛型使用详解与应用场景
开发语言·后端·rust·泛型·rust泛型
lgily-12258 小时前
常用的设计模式详解
java·后端·python·设计模式