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

相关推荐
凡人的AI工具箱6 小时前
AI教你学Python 第11天 : 局部变量与全局变量
开发语言·人工智能·后端·python
是店小二呀6 小时前
【C++】C++ STL探索:Priority Queue与仿函数的深入解析
开发语言·c++·后端
canonical_entropy6 小时前
金蝶云苍穹的Extension与Nop平台的Delta的区别
后端·低代码·架构
我叫啥都行7 小时前
计算机基础知识复习9.7
运维·服务器·网络·笔记·后端
无名指的等待7128 小时前
SpringBoot中使用ElasticSearch
java·spring boot·后端
.生产的驴8 小时前
SpringBoot 消息队列RabbitMQ 消费者确认机制 失败重试机制
java·spring boot·分布式·后端·rabbitmq·java-rabbitmq
AskHarries9 小时前
Spring Boot利用dag加速Spring beans初始化
java·spring boot·后端
苹果酱05679 小时前
一文读懂SpringCLoud
java·开发语言·spring boot·后端·中间件
掐指一算乀缺钱10 小时前
SpringBoot 数据库表结构文档生成
java·数据库·spring boot·后端·spring
计算机学姐12 小时前
基于python+django+vue的影视推荐系统
开发语言·vue.js·后端·python·mysql·django·intellij-idea