【MySQL】读写分离主从复制
创始人
2024-02-28 10:21:17

1. 原理篇

1.1 读写分离问题场景:

高并发场景,读数据操作远高于写数据操作 ——

在这里插入图片描述

为了实现读写分离,我们使用数据库的主从复制:

在这里插入图片描述

1.2 主从复制:

  1. 实现主从复制的流程如下:
    在这里插入图片描述
  2. MySQL 的主从复制实现机制如下:

在这里插入图片描述

(1) master 将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);

(2) slave 将 master 的 binary log events 拷贝到它的中继日志(relay log);

(3) slave重做中继日志中的事件,将改变反映到它自己的数据。

在这里插入图片描述

2. 实战篇

2.1 搭建 MySQL 主从集群

2.1.1 环境说明

准备两个 CentOS7 ,在每个上都安装一下 MySQL 。
安装方法见:CentOS7 安装 MySQL 数据库~~~

安装完一个后,直接再克隆一个 CentOS 7 就 Ok 了,复制虚拟机见 WMWare 克隆CentOS虚拟机~~~

但是这里要注意一件事,使用克隆方式生成的虚拟中的 MySQL 和原 CentOS 中的 MySQL 具有相同的 uuid (MAC 地址),需要给克隆体更换一下 uuid,更换方法如下:

(注: 以下操作在 MySQL 客户端执行)

  1. 生成新的uuid,并记录下来
select uuid();

在这里插入图片描述

  1. 查看配置文件目录

MySQL 的 uuid 是存在 auto.cnf 配置文件中的,我们要找到这个配置文件的位置,执行如下语句:

show variables like 'datadir';

在这里插入图片描述

  1. 将 auto.cnf 中的 uuid 修改为上述第一步记录的 uuid (这步回到 CentOS 下执行,退出 mysql 客户端方式为 ,输入 exit;
vi /var/lib/mysql/auto.cnf

内容修改为:

server-uuid=xxxxxx
  1. 重启 mysql 服务
service mysqld restart

2.1.2 主库配置

  1. 查看数据库状态
systemctl status mysqld
  1. 停服务器
systemctl stop mysqld
  1. 修改配置文件
vi /etc/my.cnf

修改方式:在后面加入

server-id=1
log-bin=mysql-bin #解释:server-id服务的唯一标识(主从之间都必须不同);log-bin启动二进制日志名称为mysql-bin

在这里插入图片描述

  1. 重启 mysql 服务
systemctl start mysqld
  1. 登录 mysql
mysql -uroot -p5201314love
  1. 在主库中新添加一个从库的账号

添加一个名称为repl,账号密码为5201314love,允许登录的从库ip为192.168.244.130的账号(%为任意ip)

mysql> CREATE USER 'repl 此处为用户名称'@'192.168.244.130此处为从服务器的ip地址' IDENTIFIED BY '5201314love 此处为登录密码';

执行完上述语句后,可以通过下列语句查看下授权是否创建成功

 SELECT * FROM mysql.user  where user = 'repl'\G;

在这里插入图片描述

可爱的题外话:如果提示密码太简单不复合策略加在前面加这句

mysql> set global validate_password_policy=0;
  1. 给从库账号添加授权
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.244.130'; # 说明给用户repl一个从库复制的权限在这个ip上
  1. 查看主库的状态
mysql> SHOW MASTER STATUS

在这里插入图片描述

需记录: File是二进制日志文件名,Position 是日志开始的位置。后面设置从库的时候会用到,需要记录下来。

2.1.3 从库配置

  1. 查看数据库状态
systemctl status mysqld
  1. 停服务器
systemctl stop mysqld
  1. 修改配置文件
vi /etc/my.cnf

修改的内容为在后面加入:

server-id=2
  1. 重启
systemctl start mysqld
  1. 登录
mysql -uroot -p5201314love
  1. 使用主库授权的账号
mysql> CHANGE MASTER TO-> MASTER_HOST='192.168.244.130',-> MASTER_USER='repl',-> MASTER_PASSWORD='5201314love',-> MASTER_LOG_FILE='mysql-bin.000006',-> MASTER_LOG_POS=324;

说明:
1)192.168.244.130:主库主机ip,根据实际情况改写
2)repl:主库授权的账号
3)5201314love:主库授权账号密码
4)mysql-bin.000006:主库日志文件名,上面记录过的
5)324:主库日志文件位置,根据上面主库查询到的主库日志文件位置填写,上面记录过的

  1. 重启
systemctl stop mysqld
systemctl start mysqld

2.1.4 测试配置结果

在主库添加数据库、表、数据,检测从库是不是有同样操作,使用 Navicat 连接测试:

在这里插入图片描述

主从常用主从命令如下:

  1. 查看主库状态
mysql>show master status;
  1. 查看从库状态
mysql>show slave status;

2.1.5 关于从库停机无法同步

问题描述:从库停机修改配置,从起数据库之后,出现无法同步主库内容

解决方案:

1)停止主从

mysql> stop slave;

2)设置

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; 
mysql> START SLAVE; 

3)重新启动主从,从库断开期间那部分丢失的数据会自动同步过来的

上一篇:准备pmp考试第13天

下一篇:Linux信号基础

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...