学习路线指引(点击解锁) | 知识定位 | 人群定位 |
---|---|---|
Python实战微信订餐小程序 | 进阶级 | 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 |
Python量化交易实战 | 入门级 | 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 |
该系列将记录一份完整的实战项目的完成过程,该篇属于优化篇第二天,主要负责完成读写分离问题
案例来自B站黑马程序员Java项目实战《瑞吉外卖》,请结合课程资料阅读以下内容
该篇我们将完成以下内容:
该小节会介绍Linux系统上Mysql的主从复制的全流程
Mysql主从复制是一个异步的复制过程,底层是基于Mysql数据库自带的二进制日志功能
我们将一台或多台从库(slave)从一台主库(master)进行日志复制然后解析日志并应用到本身,最终实现多台数据库保持数据一致
我们先给出主从复制的流程图:
下面我们简单介绍一下流程:
主库只能有一个数据库,但从库可以有多个数据库
我们要完成Mysql数据库的主从复制,就需要拥有两台数据库,我们通常采用虚拟机来准备
我们在前面的Linux课程中已经配置了一台虚拟机,我们只需要将该虚拟机进行克隆即可获得另一台相同的虚拟机:
但是需要注意的是我们克隆后的虚拟机的IP和UUID是相同的,我们需要将他们修改过来:
如果你的虚拟机没有设置静态IP,那么你生成的克隆虚拟机将不存在这个问题,但你仍需要重设UUID
如果你的虚拟机设置了静态IP,那么克隆机的IP将不做改变,我们这里需要修改克隆机的IP
首先重新生成MAC地址,双击网络配置器,点击高级,生成MAC地址:
然后进入虚拟机中,输入以下命令查看ip存放目录:
# 查看ip存放目录
ifconfig
进入ip存放目录,修改ip:
# 进入目录
cd /etc/sysconfig/network-scripts
# 访问文件修改ip
vi ifcfg-ens32
进入后我们需要查找这两部分:
# 是否为静态IP
BOOTPROTO='static'
# 将IP改为其他IP
IPADDR='192.168.44.129'
最后重启网卡,查看当前IP即可:
# 重启网卡
service network restart
# 查看IP
ifconfig
我们的克隆机需要修改UUID,否则无法显示主从复制操作
首先我们进入mysql,自动生成一个UUID复制下来:
# 进入mysql
mysql -uroot -p123456
# 生成UUID
select uuid();
然后查找mysql安装地址并进入配置文件中:
# 查找mysql安装地址
show variables like 'datadir';
# 进入配置文件
vim /var/lib/mysql/auto.cnf
将配置文件中UUID删除,并复制为刚刚生成的UUID即可:
[auto]
server-uuid=7c872b6f-538d-11ed-b0fd-000c299055af
最后重启服务器并重启mysql即可:
# 重启服务器
systemctl restart network
# 重启mysql
systemctl restart mysqld
目前我们的两台数据库中的信息要保持一致,否则我们在后续操作时会导致错误
下面我们分别从主库和从库两方面来配置主从复制条件
下面我们开始主库的配置条件:
# 进入配置文件
vim /etc/my.cnf
# 在[mysqld]下面复制下面两句即可
[mysqld]
log-bin=mysql-bin # 启动二进制日志
server-id=128 # 设置服务器唯一ID
# 重启mysql服务
systemctl restart mysqld
# 登录数据库
mysql -uroot -p123456
# 执行下列语句(生成一个用户,使其具有查询日志的权力)
GRANT REPLICATION SLAVE ON *.* to 'xiaoming'@'%' identified by 'Root@123456';
# 执行语句(你将会看到日志相关信息,接下来不要对数据库操作,因为操作会导致日志信息改变)
show master status;
# 你将会看到File和Position信息