首页 > 数据库 >数据库系列-MYSQL篇之-主从同步

数据库系列-MYSQL篇之-主从同步

时间:2023-05-26 11:46:45浏览次数:54  
标签:binlog 数据库 主从 线程 MYSQL 日志 节点

1 主从同步概述

mysql主从同步,即MySQL Replication,可以实现将数据从一台数据库服务器同步到多台数据库服务器。MySQL数据库自带主从同步功能,经过配置,可以实现基于库、表结构的多种方案的主从同步。

可以对MySQL做主从架构并且进行读写分离,让主服务器(Master)处理写请求,从服务器(Slave)处理读请求,这样可以进一步提升数据库的并发处理能力,如下图所示:

image

2 主从同步作用

一般来说,优先考虑优化sql及索引等,充分发挥数据库的最大性能;其次是采用缓存的策略,比如使用redis、magodb等缓存工具,通过其高性能的优势把数据保存在内存数据库中,提升读取的效率,最后才是采取数据库主从架构,进行读写分离(因为成本高)。

2.1 读写分离

通过主从复制的方式来同步数据,之后通过读写分离的方法提升数据库并发处理能力。简单来说就是数据放在多个数据库中,其中一个是Master主库,其余的是Slave从库。当主数据库数据发生变化时,会自动将数据同步到从数据库中,程序可以设置去从库读取数据,从而实现读写分离

2.2 数据备份

主从同步属于数据热备份机制,在主库正常运行下备份,不影响提供查询服务。

2.3 高可用性

数据备份其实是冗余的机制,通过冗余的方式可以换取数据库的高可用性,当服务器出现故障、宕机等无可用的情况下,可以迅速进行故障切换,让从库当主库,保证服务正常运行。

3 主从同步原理

引入一个重要日志文件 Binlog二进制文件,它记录了数据库更新的事件,主从同步原理就是基于Binlog进行数据同步的。
主从复制基于三个线程完成,线程1:binlog dump线程,位于Master节点上;线程2:I/O线程 和SQL线程,分别都位于Slave节点上。

核心流程如下:
1 当master节点接收到一个写入请求时,这个写请求一般是增删改操作,此时会把写入请求的更新操作记录到binlog日志中。
2 master节点会把数据

master节点会把数据复制给slave节点,如图中的slave01节点,这个过程,首先得要每个slave节点连接到master节点上,当slave节点连接到master节点上时,master节点会为每一个slave节点分别创建一个binlog dump线程,用于向各个slave节点发送binlog日志。
binlog dump线程会读取master节点上的binlog日志,然后将binlog日志发送给slave节点上的I/O线程。当主库读取事件的时候,会在Binglog上加锁,读取完成之后,再将锁释放掉。
slave节点上的I/O线程接收到binlog日志后,会将binlog日志先写入到本地的relaylog中,relaylog中就保存了binlog日志。
slave节点上的SQL线程,会来读取relaylog中的binlog日志,将其解析成具体的增删改操作,把这些在master节点上进行过的操作,重新在slave节点上也重做一遍,达到数据还原的效果,这样就可以保证master节点和slave节点的数据一致性了。
主从同步的数据内容其实是二进制日志(Binlog),它虽然叫二进制日志,实际上存储的是一个又一个的事件(Event),这些事件分别对应着数据库的更新操作,比如INSERT、UPDATE、DELETE等。
另外我们还需要注意的是,不是所有版本的MySQL都默认开启了服务器的二进制日志,在进行主从同步的时候,我们需要先检查服务器是否已经开启了二进制日志。

标签:binlog,数据库,主从,线程,MYSQL,日志,节点
From: https://www.cnblogs.com/laityguanguan/p/17434317.html

相关文章

  • MySQL中--skip-password参数作用
     MySQL中--skip-password参数探究 本篇使用客户端:mysql版本:MySQL8认证插件:mysql_native_password对于初始化数据库时,若是使用了--initialize-inscure选项,则对于用户root@localhost会使用空密码。2023-05-26T09:20:21.205673+08:006[Warning][MY-010453][Server]roo......
  • mysql创建用户及分配操作权限
    MySQL在安装时,会默认创建一个名为root的用户,该用户拥有超级权限,可以控制整个MySQL服务器,所以如果滥用root账户,对于系统来说是很不安全的。MySQL提供了以下3种方法创建用户。使用GRANT语句创建用户使用CREATEUSER语句创建用户在mysql.user表中添加用户1.使......
  • 关于MySQL的JDBC Driver加载过程详解
    在使用JDBC时,都需要提前加载对应数据库的Driver类,MySQL为例:Class.forName("com.mysql.jdbc.Driver")但是不写这句代码也可以让 com.mysql.jdbc.Driver类成功加载,这就涉及到java.sql.DriverManager类了,先看一下代码:publicclassDriverManager{//注册驱动的集合priva......
  • 定时crontab执行数据库备份不起作用,手动运行起作用的问题
    用crontab定时任务去执行mysqldump,定时备份数据库,手动是可以执行的。如下图,生成了备份文件。但是,用crontab去执行这个back.sh脚本的话,是不会生成备份文件的,起初怀疑crontab没有执行。查看crontab日志 cat  /var/log/cron发现,是执行了的注意,crontab执行出错的信息,不会......
  • 5分钟搞定Linux安装Mysql5.7(简单快捷,建议收藏)
    本文记录下我近期在Linux环境下安装Mysql5.7的实践经历。服务器版本Mysql版本Centos7.65.7.321.下载Mysql下载地址:https://downloads.mysql.com/archives/community/进入页面后选择你需要的版本进行下载,这里提供了2种格式:tar.gz和tar。如果下载不方便,可以直接从我的网盘里面下......
  • MySQL常用命令
    #安装mysql后查看初始密码cat/var/log/mysqld.log#登录mysqlmysql-u[user]-p[密码]-h[远程主机ip]#本地登录可以简写为mysql-uroot-p#设置密码长度#【8.0】setglobalvalidate_password.length=6;#【5.7】setglobalvalidate_password_length=6;#设置......
  • 4万多条糗事百科网站数据ACCESS\EXCEL数据库
    这个ACCESS数据库采集的是糗事百科小清新网站的内容,而且内容大于400字的将不收集(内容太长的大多是裹脚布),我要的是浓缩的精华。如果你需要实时采集糗事百科的应用程序,也可以联系我获得。 本数据库是由MicrosoftAccess2000创建的MDB数据库文件,您需要使用MicrosoftAccess......
  • c++之数据库插入
    简述大数据采用数据切分批量插入数据库的方法内容数据导入功能,数据量为360W,按照我们通常的比较笨的方法则的遍历数据一条条的往数据库插入;经实验证明这个方法确实可以完成这个工作,但是它的插入数据的速度太慢,尤其当随着数据库的数据增加,速度会越来越慢;首先,我们知道一条条插入数据是......
  • Python 数据库Insert语句脚本生成工具(SQL Server)
    编写这个小工具,是因为平时部署项目的时候,需要导出一些公共的数据(权限、参数设置等),覆盖插入正式环境。话不多说,直接上代码:importpyodbcimportwarningsimportdecimalimportwinregimportosimportconfigparserimporttimeimportdatetimewarnings.filterwarnings('igno......
  • MySQL安装
    1、检查是否已经安装了mysql和mariadbrpm-qa|grepmysqlrpm-qa|grepmariadb#如果已经安装,就先卸载:rpm-e--nodeps软件名2、安装mysql按顺序安装:8.0.28-1.el7版本rpm-ivhmysql-community-common-8.0.28-1.el7.aarch64.rpmrpm-ivhmysql-community-cli......