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

相关推荐
豌豆花下猫6 分钟前
Python 潮流周刊#83:uv 的使用技巧(摘要)
后端·python·ai
凡人的AI工具箱13 分钟前
每天40分玩转Django:Django部署概述
开发语言·数据库·后端·python·django
SomeB1oody35 分钟前
【Rust自学】7.2. 路径(Path)Pt.1:相对路径、绝对路径与pub关键字
开发语言·后端·rust
SomeB1oody37 分钟前
【Rust自学】7.3. 路径(Path)Pt.2:访问父级模块、pub关键字在结构体和枚举类型上的使用
开发语言·后端·rust
Bony-1 小时前
Go语言反射从入门到进阶
开发语言·后端·golang
凡人的AI工具箱2 小时前
每天40分玩转Django:Django Email
数据库·人工智能·后端·python·django·sqlite
后端转全栈_小伵2 小时前
SQLite本地数据库的简介和适用场景——集成SpringBoot的图文说明
数据库·spring boot·后端·sqlite·学习方法
undeflined3 小时前
vite + vue3 + tailwind 启动之后报错
开发语言·后端·rust
猿来入此小猿3 小时前
基于SpringBoot在线音乐系统平台功能实现十七
java·spring boot·后端·毕业设计·音乐系统·音乐平台·毕业源码
重整旗鼓~3 小时前
2.flask中使用装饰器统一验证用户登录
后端·python·flask