MySQL 基于日志点复制

MYSQL数据库日志 MySQL有不同类型的日志文件,用来存储不同类型的日志,分为 二进制日志 、 错误日志 、 通用查询日志和 慢查询日志 ,这也是常用的4种。MySQL 8又新增两种支持的日志: 中继日志 和 数据定义语句日志 。使用这些日志文件,可以查看MySQL内部发生的事情。 **这6类日志分别为: **除二进制日志外,其他日志都是 文本文件 。默认情况下,所有日志创建于 MySQL数据目录 中。日志功能会 降低MySQL数据库的性能 。 日志会 占用大量的磁盘空间 。通用查询日志用来 记录用户的所有操作 ,包括启动和 阅读详情

MySQL 的复制功能不仅可以构建高性能的应用,也是高可用性、可扩展性、灾难恢复等工作的基础。

复制的主要功能

1、数据分布。
MySQL 提供的复制功能并不需要很大的带宽的要求,因此可以在不同的物理位置来分布数据。

2、读操作的负载均衡
通过复制与负载均衡方案,可以将读操作分布到多个从服务器上,实现对读密集型应用的性能优化。

3、备份
复制能起到一定的备份作用,但是并不能完全取代备份。

4、高可用性和故障转移
复制能够帮助避免 MySQL 单点失败的问题,当主库宕机时,迅速的故障切换能减少系统的停机时间。

基于日志点复制的原理

大体来说,复制分为以下几步:

1、主库将数据的更新事件记录到二进制日志。

二进制日志由各种事件组成,一个事件通常为一个更新加一些其它信息,比如时间戳。在每次准备提交事务前,主库将数据更新的事件记录到二进制日志中。记录完毕后,主库将告诉存储引擎可以提交事件了。

2、从库将主库上的日志复制到自己的中继日志中。

首先,从库启动一个工作线程,称为 I/O 线程,该线程跟主库建立一个普通的连接,然后在主库上启动一个二进制转储(binlog dump)线程,这个二进制存储线程会读取并向从库发送主库上二进制日志中的事件,从库的 I/O 线程接收到事件并将其记录到从库的中继日志中。

注意,二进制存储线程的工作方式不是轮询,当该线程追赶上了主库,它就进入休眠状态,直到主库发送信号通知来将其唤醒。

3、从库读取中继日志中的事件,将其重放到从库中。

当主库的时间发送过来时,从库的 I/O线程将事件写入中继日志(relay log)中,然后从库上 SQL 线程就去读取并且重放中继日志中的事件,达到与主库数据的一致。可以看到, I/O 线程和 SQL 线程的协作,使得获取事件和重放事件的解耦,两者异步执行。在 5.6之前,只能有一个 SQL 线程工作,因此重放是串行化进行的。在5.6之后,增加了多线程重放,但是注意,多线程是基于库的,一个库只能使用一个 SQL 线程重放事件。

复制的步骤

1、创建复制账号

从库中运行的 I/O 线程会建立一个到主库的连接,因此需要在主库上创建个用户,并且拥有适当的权限,从库将以该用户的身份连接到主库上读取其二进制日志。

建立一个只有使用使用内网 IP 才能登陆的账号:

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON . TO repl@’192.168.xxx.%’ IDENTIFIED BY ‘password’;

该命令创建 repl账号,同时为授予 REPLICATION SLAVE 与 REPLICATION CLIENT 权限。注意,实际上只需要 REPLICATION SLAVE 权限就可以进行复制了。而 REPLICATION CLIENT 权限主要是允许该账号对复制进行监控和管理,比如 SHOW MASTER STATUS、SHOW SLAVE STATUS、SHOW BINARY LOGS 语句的使用。

账户建立好后,应该在从库主机上尝试着使用该账号远程登录主库,如果顺利登陆,说明两台主机的 MySQL 能正常通信,并且账号没问题。

2、对主、从库进行配置

对主、从库进行必要的配置:
主:

# 该命令启动二进制日志,并且指定二进制日志位置与名称
log_bin   = mysql-bin
# 这里必须为主库设置一个唯一的 ID 
server_id = 1

备:

log_bin           = mysql-bin
# 确保唯一性
server_id         = 2
# 指定中继日志的位置与名称
relay_log         = /var/lib/mysql/mysql-relay-bin
# 命令从库将其重放的事件记录到自己的二进制日志中
log_slave_updates = 1
# 阻止没有特权权限的线程修改数据
read_only         = 1

实际上,只有 server_id 是必须设置的,其他的配置项根据实际情况进行配置。例如,如果从库也是其他库的主库,那么就要将 log_slave_updates 设置为1。如果从库只用来读数据,则要将 read_only 设置为1。

3、初始化数据

使用 mysqldump 或者其他方法对主库数据进行全量备份,然后在从库上恢复该备份。注意,主库备份的时候,要记录当前的二进制日志的名字及坐标(即偏移量)。可以通过 SHOW MASTER STATUS 命令来查看。

4、开始复制

数据初始化好后,就可以开始复制了。

mysql-> CHANGE MASTER TO MASTER_HOST = ‘主机IP’,
-> MASTER_USER = ‘repl’,
-> MASTER_PASSWORD = ‘password’,
-> MASTER_LOG_FILE = ‘主库上当前二进制文件’,
-> MASTER_LOG_POS = ‘日志坐标’;

开始复制后,可以随时使用 CHANGE MASTER TO 来动态地更改复制的设置,而不需要重启从库。

注意,一定要获得正确的二进制日志坐标,I/O线程会去从日志坐标开始一直读到日志最后,然后进入休眠状态,直到主库发送信号唤醒。

设置好后,使用
mysql-> START SLAVE;

可以使用 SHOW SLAVE STATUS 命令来查看情况,如果 SLAVE_IO_STATUS 是 Waiting for master to send event,那么就说明复制已经正常开始了。

查看从库状态

通过在从库上执行命令

mysql-> show slave status;

Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.136.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000010
Read_Master_Log_Pos: 3266
Relay_Log_File: mysql-relay-bin.000002
Relay_Log_Pos: 877
Relay_Master_Log_File: mysql.000010
Slave_IO_Running: Yes 
Slave_SQL_Running: Yes

     ……
Exec_Master_Log_Pos: 3266
Relay_Log_Space: 1084

     ……
Seconds_Behind_Master: 0

     ……
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400

主要变量解释:

Slave_IO_State 为 I/O线程的状态,Waiting for master to send event 说明该线程正在等待主库发送事件。

Read_Master_Log_Pos 为 I/O线程读取主库上的二进制日志到了哪个位置,单位为字节。与主库上二进制日志记录坐标进行对比,可以得到当前 I/O 线程的延时。

Exec_Master_Log_Pos 为 SQL线程重复主库上的二进制日志到了哪个位置,单位为字节,(Read_Master_Log_Pos - Exec_Master_Log_Pos )可以表示当前 SQL 线程运行的延时。 Read_Master_Log_Pos 总是大于等于 Exec_Master_Log_Pos 。

Seconds_Behind_Master 是通过比较 SQL线程执行的最后一个事件里记录的时间戳和 I/O线程获取到的最后一个事件里记录的时间戳进行比较,而得到的这么一个差值。该值并不能完全反应主从延迟,考虑这种情况:当主库I/O负载很大或是网络阻塞, I/O线程不能及时获取到二进制日志里的事件,而 SQL线程一直都能跟上 I/O线程的脚步,这时Seconds_Behind_Master 的值为0,但此时主从之间是有延迟的。

SQL_Delay 5.6之后新增的延迟复制,表示获取到主库的事件之后, SQL线程还要等待N秒才重放。

SQL_Remaining_Delay 如果 SQL线程在等待过程中,则表示剩余等待时间,其他时候为0。

Slave_SQL_Running_State SQL线程的状态

基于 GTID 复制

基于日志点的复制需要对从库指定二进制日志的偏移量,如果偏移量有差错,会导致同步后数据不一致的问题,并且可能会报错而终止复制。为了解决这个问题,MySQL 在5.6之后推出了基于 GTID 的复制。

GTID 简单地说就是 MySQL 为事务生成的 ID,它是全局唯一的,即在整个集群中都是唯一的。

从库会告诉主库已执行的事务的 GTID 值,主库会告诉从库哪些GTID 事务没有被执行。这一切都是由 MySQL 维护进行的,因此能更好地保证主从数据的一致性。

mysql学习笔记(一):存储引擎,连接MySQL和日志文件 数据库和实例,MySQL体系结构,存储引擎,连接MySQL,命名管道和共享内存,UNIX域套接字,文件描述符,如何远程登录mysql,日志文件 阅读详情

相关推荐

MySQL8基于日志点和GTID方式的主从复制及错误解决

[学习猿地出品] 一、为什么要做主从复制 1. 在业务复制的系统中,有这么一个情景,有一句SQL语句需要锁表,导致占时不能使用读服务,那么久很影响运行中的业务,使用主从复制,让主库负责写,从库复制读。这样,即使出库出现了锁表的情景,通过读从库也可以保证业务的正常运作。 2. 做数据的热备 3. 架构的扩展,随着业务量增大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率...

lmonkey_com的博客 807

mysql 客户端连接日志_MySQL 日志详解

一、MySQL 日志分类MySQL 日志主要包含:错误日志、查询日志、慢查询日志、事务日志、二进制日志。错误日志: -log-err (记录启动、运行、停止 MySQL 服务时出现的信息)查询日志:-log (记录建立的客户端连接和执行的语句)慢查询日志:-log-slow-queries (记录所有执行超过 long_query_time 秒的所有查询)二进制日志:-log-bin (记录所有...

weixin_31613423的博客 4099

用Django框架+爬虫技术实现自动获取可画(Canva)团队会员资格的方法

可画(canva)是一个非常流行的在线平面设计平台,因为它无需专业训练和技能就可以利用其丰富的资源设计出美观、酷炫的作品,因而它受到了极其广泛的设计专业和非专业人群的喜爱本文介绍了一种方法,它采用Django网络框架与爬虫技术相结合,实时监控定时更新可画团队版免费邀请链接的网站页面,一旦链接有更新动作,第一时间获取相关信息,并直接加载这个有效的邀请链接,自动进入可画网站获得团队版使用资格。

hhyyqq的博客 2204

mysql 如何查询数据库链接日志

- 查看是否开启通用查询日志(包括连接记录)1.1,假如没开启,可以临时开启,做测试;服务重启,配置失效;

mzh10588的博客 794

自然语言处理:稀疏向量表示

稀疏向量表示是指运用特定的方法和技术,将数据(如文本、图像、信号等)转化为向量形式,且该向量具有大部分元素值为零,仅少数元素值非零的特征,以此来实现对数据的高效存储、处理和分析。

老赵爱学习的博客 1443

OpenClaw + Qwen 模型集成飞书完整教程

1、环境要求:- **操作系统**: Windows- **Node.js**: v18+ (推荐 v20+)- **飞书账号**: 需要企业管理员权限(创建应用用)或者个人飞书账号创建个人应用- **网络**: 能访问 GitHub 和飞书开放平台2、安装Node.js下载完成后验证是否安装成功,cmd窗口输入“node --version”,显示版本号即为安装成功(如下图所示)3、获取大模型APIKEY(这里以Qwen为例)

qq_29609427的博客 475

MySQL日志详解

错误日志 错误日志是 MySQL 中最重要的日志之一,它记录了当 mysqld 启动和停止时,以及服务器在运行过中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,建议首先查看此日志。

一起努力共同进步,为了未来一起奋斗吧! 2028

预测股票价格趋势:使用MATLAB进行股票价格预测

通过收集股票数据、数据预处理、构建预测模型以及可视化结果,我们可以利用MATLAB强大的计算和分析功能来预测股票价格的走势。然而,需要注意的是,股票市场具有高度复杂性和不确定性,预测结果仅供参考,并不构成投资建议。然而,借助计算机编程和数据分析工具,我们可以利用历史股价数据来建立模型,并预测未来的股票价格走势。首先,我们需要获取股票的历史价格数据。完成模型的拟合后,我们可以使用该模型来进行未来股票价格的预测。最后,我们可以使用MATLAB的绘图功能将预测的股票价格与实际股票价格进行对比,并进行可视化展示。

2301_79326588的博客 1018

mysql 基于日志复制_基于日志点的复制

前文讲过日志复制分为基于日志点的复制和基于GTID的复制。本文就讲一下基于日志点的复制过程。1.在主DB服务器上建立复制帐号。create user ‘repl’@ip 段 identified by ‘pwd’;create user repl@'192.168.1.%' identified by 'repl';授权grant replication slave on *.* to ‘repl...

weixin_33623304的博客 272

【maven】idea左侧External Libraries里,没有Maven的依赖包 代码飘红

文章目录1.概述M.参考 1.概述 因为内网开发,然后这几天我被隔离了,然后公司搞了一个外网的vpn能连接的云桌面,云桌面也是网络隔离的,因此只能自己拷贝相关的文件到里面。 然后我就拷贝了代码和maven仓库中的一部分,因为本地的20G一次拷贝不完,需要多次拷贝,但是我拷贝了kafka,仍然飘红。具体如下 idea左侧External Libraries里,没有Maven的依赖包 然后整了很久都没搞定,后来我自己新建了一个项目,然后引入发现是不可以的,而且框框里面的飘红。 然后我就想是不是因为缺少依赖

九师兄 4411

高通平台N4单路输入的720P相机预览

N4的一路720P Camera作为MIPI摄像头使用

llw21680的专栏 165

mysql 基于日志复制_MySQL基于日志点的复制

日志复制分为基于日志点的复制和基于GTID的复制。本文就讲一下基于日志点的复制过程。1.在主DB服务器上建立复制帐号。create user ‘repl’@ip 段 identified by ‘pwd’;create user repl@'192.168.1.%' identified by 'repl';授权grant replication slave on *.* to ‘repl’@ip...

weixin_31504783的博客 151

MTEX包在Matlab中实现从EBSD数据生成Abaqus网格与晶粒取向:一种对用户材料旋转矩阵分量实践的全面指南

此教程提供了一种使用MTEX Matlab包处理EBSD数据的方法,并生成Abaqus输入文件,这对于进行多晶体有限元分析具有极大的帮助。但值得注意的是,这只是一个基本的例子,实际应用中可能需要根据您的实际需求进行调整。MTEX包还提供了许多其他的功能,可以进行更复杂的分析和处理,我非常推荐您去探索。希望这篇文章能对您有所帮助,如果您有任何疑问或建议,欢迎留言交流。在接下来的文章中,我将会介绍更多关于MTEX的高级功能,敬请期待。– (完)–

qq_38334677的博客 4436

MySQL基于日志点的复制配置

MySQL基于日志点的复制配置 1.配置主数据库服务器 1.1 在主服务器上建立复制专用账号 CREATE USER ‘用户名’@‘IP段’ identified by ‘密码’; 1.2 为该账户授权 GRANT REPLICATION SLAVE ON . TO ‘用户名’@‘IP段’; 1.3 修改主服务器数据库配置文件 #指定binlog文件名, 只要配置了名称即开启binlog log_bin = mysql-bin #服务id, 在集群中需唯一 server_id = 100 2.配置从数据库服

一个做量化交易的攻城狮 652

SQL面试题——最大连续登陆问题

最大连续登陆是我们计算比较常用的指标,我们可以将其当成一个经典的SQL模型,后面我们也会陆续总结出其他的模型,你还知道其他的比较经典的SQL 吗?欢迎分享,或者你还知道其他的关于计算连续的指标?最大连续登陆重要的是计算思想,最大连续才是关键,登陆只是一个场景,要学会举一反三。

9010

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

MySQL主从复制配置详解:基于日志点与GTID的比较

MySQL主从复制是实现数据库高可用性和负载均衡的重要手段。复制类型主要分为基于SQL语句的复制(SBR)、基于行的复制(RBR)以及混合模式。SBR(基于SQL语句的复制):二进制日志格使用的是statement格式优点:生成日志量少,节约网络传输I/O;不要求主从数据库表定义完全相同;灵活性高。缺点:对于非确定性事件和存储过程、触发器、自定义函数等的修改,可能无法保证数据一致性;在从库执行时需要更多行锁。RBR(基于行的复制):二进制的日志格式使用的是基于行的日志格式。

m0_73355421的博客 874

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL主从复制-基于日志点配置

binlog 主从复制日志点配置

xxx_live_anyd的博客 504

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Mysql主从复制-基于日志点的复制

前言 mysql的复制能减轻数据库的读负载压力。mysql的复制功能(异步,可能会导致同一时间点上数据不一致问题)是基于二进制日志增量进行的。同时建议在同一个IDC机房中进行复制,以减少网络问题带来的问题。 mysql的复制格式主要有两种,SBR(基于SQL语句复制)和RBR(基于行复制),实际生产中一般建议采用基于行的复制方式,该种方式能较好的解决线上主从服务器复制不一致的问题,主从复制性能...

分享传递价值 1196

MySQL主从复制实现基于日志点的复制

实现基于日志点的复制 1:在Master端建立复制用户 2:备份Master端数据,并在Slave端恢复 3:使用Change master命令配置复制 select user,host from msql.user; create user 'dba'@'192.168.1.%' identified by '123456'; grant replication salve

Terisadeng的博客 411

mysql主从复制 日志_详解MySQL主从复制实战 - 基于日志点的复制

基于日志点的复制1、在主库与从库上建立专用的复制账号MariaDB [employees]> create user 'repl'@'172.%' identified by '123456';注意在生产上的密码必须依照相关规范以达到一定的密码强度, 并且规定在从库上的特定网段上才能访问主库2、在主库与从库上授予复制权限MariaDB [employees]> grant replic...

weixin_36379084的博客 162

5-5配置Mysql复制 基于日志点的复制

配置MySQL复制 基于日志点的复制配置步骤 设置简单密码(可以选择不需要) set GLOBAL validate_password_length=6; set global validate_password_policy=0; 在主DB服务器上建立复制账号 CREATE user repl@'192.168.%.%' IDENTIFIED by '123...

qq_36466946的博客 96

mysql 基于日志复制_MySQL主从复制实现基于日志点的复制

实现基于日志点的复制1:在Master端建立复制用户2:备份Master端数据,并在Slave端恢复3:使用Change master命令配置复制select user,host from msql.user;create user 'dba'@'192.168.1.%' identified by '123456';grant replication salve on *.* to 'dba'@...

weixin_42387482的博客 96

mysql基于日志点的复制

目录 1.在主DB上创建用户 2,授权 3,配置主数据库服务器 4,从服务器配置 5.初始化从服务器的数据 5.启动复制链路 如果出现连接不上主库服务器,需要关闭防火墙 6.验证复制效果: 7,优缺点 1.在主DB上创建复制账号 create user zhaoheng@'192.168.195.%' identified by 'zh179883'; 2,授权 ...

qq_43109978的博客 436

mysql8复制报错_MySQL8基于日志点和GTID方式的主从复制及错误解决

[学习猿地出品]一、为什么要做主从复制1. 在业务复制的系统中,有这么一个情景,有一句SQL语句需要锁表,导致占时不能使用读服务,那么久很影响运行中的业务,使用主从复制,让主库负责写,从库复制读。这样,即使出库出现了锁表的情景,通过读从库也可以保证业务的正常运作。2. 做数据的热备3. 架构的扩展,随着业务量增大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单...

weixin_39556064的博客 353

mysql主从复制 日志,mysql主从复制-从库跳过异常日志点

当前位置:我的异常网» MySQL»mysql主从复制-从库跳过异常日志点mysql主从复制-从库跳过异常日志点www.myexceptions.net网友分享于:2014-03-25浏览:2次mysql主从复制--从库跳过错误日志点(本文转载,特此声明)在MYSQL进行Replication的时候,有时候会由于主从端的POS点不同,导致复制的SQL进程出现错误,从而导致主从复制失败。...

weixin_42342206的博客 124

mysql 主从 日志_Mysql 基于日志点的主从复制(实操)

实现环境:Master 主:192.168.100.165 (Mysql 5.6.36)Slave 从 :192.168.100.156 (Mysql 5.6.36)步骤1.在主DB服务器上建立复制账号 (在Master上执行)# mysqlmysql> CREATE USER ‘rpl‘@‘192.168.100.%‘ identified by ‘123456‘;mysql&gt...

weixin_42531886的博客 319
上一篇: 如何连接局域网内的 MySQL
下一篇: MySQL创建自定义函数时 Error Code: 1418 的解决方法
yyyiue
博客等级 码龄11年 12粉丝 28原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值