MySQL的主从复制

前言:
  • 在企业应用中,成熟的业务通常数据量都比较大
  • 单台MySQL在交全性、―高可用性和高并发方面都无法满足实际的需求
  • 配置多台主从数据库服务器以实现读写分离
  • 高可用性:
    指的是冗余备份
    包含性能指标(五大负载+内核优化方向)
    安全性指标:网络部分安全性、通讯加密,用户登陆、管理权限安全性
  • MySQL的设计思路
    1、MySQL主从复制:让slave服务器中的中继日志同步master二进制日志
    2、MySQL读写分离:基于主从复制以功能性拆分成读和写,缓解MySQL读写的压力,解决读写比例失恒,单台读写瓶颈的问题。
    3、MHA高可用:对master服务器做一个冗余备份工作。
  • 三种方式:
    1、纵向扩展:强化自己服务器(五大资源,内核优化 加数据库内的优化,索引,存储过程,select查询等等
    2、横向扩展:增加服务器数量
    3、借助于内存/缓存数据库:Redis,来帮助MySQL缓存一些高热数据,减少MySQL压力
    除此之外可以考虑是否需要做一些架构,服务上的改动
MySQL主从复制原理
  • MySQL的复制类型
    基于语句的复制
    基于行的复制
    混合类型的复制
  • MySQL主从复制使用的机制
    全同步
    半同步
    异步(默认)
  • MySQL主从复制的工作过程
    主从复制原理核心在于2个日志文件,3个线程(4个线程)
    2个日志:二进制日志和中继
    三个线程:master上的dump线程,slave上的IO线程和SQL线程
    目的:slave上的中继日志趋近实时同步master上的二进制日志
    过程:
    dump线程会监听二进制日志的更新,如果有更新则会通知slave IO
    首先slave上的IO线程向master上申请同步二进制日志的更新内容
    dump线程会把同步的sql日志内容与slave服务器,slave的IO线程会把写入自己的中继日志
    slave sql线程把日志中的更新语句同步执行到数据库内部,以达到和master数据库趋近一致
  • ##master
    二进制日志
    线程:dump,用于监听binlog同时通知SLAVE I/O
    ##slave
    relay log
    线程1 :I/O
    负责向master请求更新的日志内容
    将更新的内容同步到本地的relay log
    线程2: sql
    将本地的relay log中的更新内容(对本地relay log 做监听),同步执行到自己数据库内
主从复制配置
  • 准备5台虚拟机
client端              192.168.112.100
master               192.168.112.110
slave1               192.168.112.120
slave2               192.168.112.130
ameoba            192.168.112.140
  • 设置同步时间,
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 3台虚拟机设置计划任务
crontab -e 
*/10 * * * * /usr/sbin/ntpdate ntp.aliyun.com
  • 设置主从复制同步
  • master修改配置文件
[root@master ~]# vim /etc/my.cnf
log_bin=master-bin             #开启二进制日志文件(之后生成的日志名为master-bin)
log_slave_updates=true         #开启从服务器日志同步
server_id=1                   #主服务器id为1(不可重复)

重新启动服务

[root@master ~]# systemctl restart mysqld
  • slave1、slave2从服务器配置
slave1:
log_bin=master-bin          #开启二进制日志文件
server_id = 2              #设置 server1 id为22,server1 id为2
relay-log=relay-log-bin     #从服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index   #定义relay-log的位置和名称(index索引)
slave2:
log_bin=master-bin          #开启二进制日志文件
server_id = 3              #设置 server1 id为22,server2 id为3
relay-log=relay-log-bin     #从服务器上同步日志文件记录到本地
relay-log-index=slave-relay-bin.index   #定义relay-log的位置和名称(index索引)

重新启动服务:

  • 主服务器创建用户和授权
mysql> show master status
    -> ;

在这里插入图片描述

mysql> change master to master_host='192.168.112.110',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=154;       添加主服务器
  • 开启主服务器
mysql> grant replication slave on *.* to 'myslave'@'192.168.112.%' identified;        建设用户myslave用户,并设置权限
mysql> flush privileges;      刷新

在这里插入图片描述

  • 同步数据库
[root@master ~]#mysqldump -u root -p123456 --all-databases > /opt/all-databases
#主服务机上完全备份所有库

[root@slave ~]#spc root@192.168.100.7:/opt/all-databases /opt/  #在服务器下载到/opt/下
mysql -u root -p
->source /opt/all-databases;  #生成所有表
  • 开启服务器
    分别从slave1、slave2上
mysql> change master to master_host='192.168.112.110',master_user='myslave',master_password='123123',master_log_file='master-bin.000001',master_log_pos=604;           添加主服务器
mysql> start slave;                      开启
mysql> show slave status\G;            查收服务状态是否开启

在这里插入图片描述

  • 测试
创建一个表
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.01 sec)
mysql> create database zhongguo;

在这里插入图片描述

在slave1、slave2上查看表
在这里插入图片描述

总结

主从复制产生的两个日志:
二进制日志(bin-log):不可以拿来使用,同步到数据库内部的文件。需要使用工具备份
中继日志(relay-log):可以被sql线程直接引用,同步到数据库内部的

主从原理:
master的dump线程监控二进制,通知slave I/O
slave 的I/O过来之后,会请求读取二进制更新内容,并写入自己的relay—log
slave 的sql线程会读取本地relay—log同步写入到slave的mysql数据库中

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值