首页 > 数据库 >使用mysqlbinlog 备份 binlog日志文件

使用mysqlbinlog 备份 binlog日志文件

时间:2024-10-25 08:59:11浏览次数:1  
标签:binlog 文件 -- 备份 服务器 mysqlbinlog 日志

使用 mysqlbinlog 备份二进制日志文件

默认情况下,mysqlbinlog读取二进制日志文件并以文本格式显示其内容。这使您能够更轻松地检查文件中的事件并重新执行它们(例如,通过将输出用作 mysql的输入)。mysqlbinlog可以直接从本地文件系统读取日志文件,或者, --read-from-remote-server 它可以连接到服务器并从该服务器请求二进制日志内容。mysqlbinlog将文本输出写入其标准输出,或者 如果给出该选项,则写入以选项值命名的文件。 --result-file=file_name

mysqlbinlog 备份功能

mysqlbinlog 备份选项

静态和实时备份

输出文件命名

示例:mysqldump + mysqlbinlog 用于备份和恢复

mysqlbinlog 备份限制

mysqlbinlog 备份功能

mysqlbinlog可以读取二进制日志文件并写入包含相同内容的新文件——即以二进制格式而不是文本格式。此功能使您能够轻松地以原始格式备份二进制日志。 mysqlbinlog可以进行静态备份,备份一组日志文件并在到达最后一个文件末尾时停止。它还可以进行连续(“实时”)备份,在到达最后一个日志文件的末尾时保持与服务器的连接,并在生成新事件时继续复制它们。在持续备份操作中, mysqlbinlog运行直到连接结束(例如,当服务器退出时)或 mysqlbinlog被强制终止。当连接结束时,mysqlbinlog不会等待并重试连接,这与副本服务器不同。要在服务器重新启动后继续实时备份,您还必须重新启动mysqlbinlog。

重要的
mysqlbinlog可以备份加密和未加密的二进制日志文件。但是,使用mysqlbinlog生成的加密二进制日志文件的副本 以未加密的格式存储。

mysqlbinlog 备份选项

二进制日志备份要求您 至少使用两个选项 调用mysqlbinlog :

( --read-from-remote-server or -R) 选项告诉 mysqlbinlog连接到服务器并请求其二进制日志。(这类似于连接到其复制源服务器的副本服务器。)

该--raw选项告诉 mysqlbinlog写入原始(二进制)输出,而不是文本输出。

与 一起 --read-from-remote-server,通常指定其他选项: --host指示服务器运行的位置,您可能还需要指定连接选项,例如--user和 --password。

其他几个选项与 结合使用 --raw:

--stop-never:到达最后一个日志文件的末尾后保持与服务器的连接并继续读取新事件。

--connection-server-id=id: mysqlbinlog连接到服务器时报告的服务器 ID。使用 --stop-never时,默认报告的服务器 ID 为 1。如果这导致与副本服务器或另一个 mysqlbinlog进程的 ID 冲突, 请--connection-server-id 用于指定备用服务器 ID。请参阅 第 4.6.9.4 节,“指定 mysqlbinlog 服务器 ID”。

--result-file: 输出文件名的前缀,如后所述。

静态和实时备份

要使用mysqlbinlog 备份服务器的二进制日志文件 ,您必须指定服务器上实际存在的文件名。如果您不知道名称,请连接到服务器并使用该SHOW BINARY LOGS语句查看当前名称。假设该语句产生以下输出:

mysql> SHOW BINARY LOGS;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000130 | 27459 | No |
| binlog.000131 | 13719 | No |
| binlog.000132 | 43268 | No |
+---------------+-----------+-----------+
有了这些信息,您可以使用 mysqlbinlog将二进制日志备份到当前目录,如下所示(在一行中输入每个命令):

binlog.000130要对through 进行静态备份 binlog.000132,请使用以下任一命令:

mysqlbinlog --read-from-remote-server --host=host_name --raw
binlog.000130 binlog.000131 binlog.000132

mysqlbinlog --read-from-remote-server --host=host_name --raw
--to-last-log binlog.000130
第一个命令明确指定每个文件名。第二个仅命名第一个文件并用于 --to-last-log读取最后一个文件。这些命令之间的区别在于,如果服务器恰好 在mysqlbinlog到达末尾 binlog.000133之前 打开,则第一个命令不会读取它,但第二个命令会读取它。 binlog.000132

要进行实时备份,其中 mysqlbinlog开始 binlog.000130复制现有日志文件,然后在服务器生成新事件时保持连接以复制新事件:

mysqlbinlog --read-from-remote-server --host=host_name --raw
--stop-never binlog.000130
使用--stop-never,没有必要指定 --to-last-log读取到最后一个日志文件,因为该选项是隐含的。

输出文件命名

如果没有--raw, mysqlbinlog会生成文本输出 --result-file,如果给定选项,则指定将所有输出写入到的单个文件的名称。使用--raw, mysqlbinlog为从服务器传输的每个日志文件写入一个二进制输出文件。默认情况下, mysqlbinlog会在当前目录中写入与原始日志文件同名的文件。要修改输出文件名,请使用该 --result-file选项。与 结合使用--raw时, --result-file选项值被视为修改输出文件名的前缀。

假设服务器当前有二进制日志文件命名 binlog.000999和向上。如果您使用 mysqlbinlog --raw备份文件,该 --result-file选项会生成如下表所示的输出文件名。--result-file您可以通过以目录路径开头的值将文件写入特定目录 。如果该 --result-file值仅包含目录名称,则该值必须以路径名分隔符结尾。如果存在,输出文件将被覆盖。

--result-file选项 输出文件名
--result-file=x xbinlog.000999及以上
--result-file=/tmp/ /tmp/binlog.000999及以上
--result-file=/tmp/x /tmp/xbinlog.000999及以上
示例:mysqldump + mysqlbinlog 用于备份和恢复

下面的例子描述了一个简单的场景,展示了如何使用mysqldump和 mysqlbinlog来备份服务器的数据和二进制日志,以及如果发生数据丢失,如何使用备份来恢复服务器。该示例假设服务器在主机上运行,host_name​​并且它的第一个二进制日志文件名为 binlog.000999. 在一行中输入每个命令。

使用mysqlbinlog对二进制日志进行连续备份:

mysqlbinlog --read-from-remote-server --host=host_name --raw
--stop-never binlog.000999
使用mysqldump创建一个转储文件作为服务器数据的快照。使用 --all-databases、 --events和 --routines备份所有数据,并将--master-data=2当前二进制日志坐标包含在转储文件中。

mysqldump --host=host_name --all-databases --events --routines --master-data=2> dump_file
定期 执行mysqldump命令以根据需要创建更新的快照。

如果发生数据丢失(例如,如果服务器意外退出),请使用最近的转储文件来恢复数据:

mysql --host=host_name -u root -p < dump_file
然后使用二进制日志备份重新执行在转储文件中列出的坐标之后写入的事件。假设文件中的坐标如下所示:

CHANGE MASTER TO MASTER_LOG_FILE='binlog.001002', MASTER_LOG_POS=27284;
如果最近备份的日志文件名为 binlog.001004,请重新执行日志事件,如下所示:

mysqlbinlog --start-position=27284 binlog.001002 binlog.001003 binlog.001004
| mysql --host=host_name -u root -p
您可能会发现将备份文件(转储文件和二进制日志文件)复制到服务器主机更容易执行恢复操作,或者如果 MySQL 不允许远程 root访问。

mysqlbinlog 备份限制

使用mysqlbinlog的 二进制日志备份受以下限制:

如果连接丢失(例如,如果发生服务器重启或网络中断), mysqlbinlog不会自动重新连接到 MySQL 服务器。

备份的延迟类似于副本服务器的延迟。

 

指定mysqlbinlog服务器ID

--read-from-remote-server 当使用该选项 调用时, mysqlbinlog连接到 MySQL 服务器,指定一个服务器 ID 来标识自己,并从服务器请求二进制日志文件。您可以使用 mysqlbinlog通过多种方式从服务器请求日志文件:

指定一组明确命名的文件:对于每个文件, mysqlbinlog连接并发出一个 Binlog dump命令。服务器发送文件并断开连接。每个文件有一个连接。

指定开始文件和 --to-last-log: mysqlbinlog连接并为所有文件发出 Binlog dump命令。服务器发送所有文件并断开连接。

指定开始文件和 --stop-never(这意味着--to-last-log): mysqlbinlog连接并为所有文件发出 Binlog dump命令。服务器发送所有文件,但在发送最后一个文件后不断开连接。

使用 --read-from-remote-server only,mysqlbinlog使用服务器 ID 0 连接,这告诉服务器在发送最后一个请求的日志文件后断开连接。

使用 --read-from-remote-server and --stop-never, mysqlbinlog使用非零服务器 ID 连接,因此服务器在发送最后一个日志文件后不会断开连接。服务器 ID 默认为 1,但可以使用 更改--connection-server-id。

因此,对于前两种请求文件的方式,服务器断开连接是因为mysqlbinlog--stop-never指定的服务器 ID 为 0。如果给出它不会断开连接, 因为mysqlbinlog指定了一个非零服务器 ID。

标签:binlog,文件,--,备份,服务器,mysqlbinlog,日志
From: https://www.cnblogs.com/shujuyr/p/18501720

相关文章

  • SpringBoot入门到精通(十三)日志:别小看它,否则吃亏的是自己!学会你也可以设计架构
    别小看他,当你面对的时候,就会知道,多么痛的领悟!如何在SpringBoot中使用Logback记录详细的日志?整合LogBack,Log4J...等,是不是很多方法!但需要注意,我讲的可能和你是一样的,但也是不一样的。常见日志级别:高---低排列TRACE:描述:最详细的日志级别,通常用于开发和调试阶段......
  • 2024/10/24日 日志 --》关于Mybatis的学习笔记整理 - 环境与性质
    步入了Mybatis的学习之中,以下为其相关内容的细化笔记整理点击查看代码--MyBatis--·MyBatis是一款优秀的持久层框架,用于简化JDBC开发--·官网:https://mybatis.net.cn/ --持久层:--·负责将数据保存到数据库的那一层代码--JavaEE三层架构:表现层、业务层、持久层分......
  • Linux 定时清理日志
    在Linux系统中,你可以使用cron作业来定时运行一个清理日志的脚本。以下是一个简单的示例,包括一个用于清理日志的脚本和一个用于设置定时任务的cron作业。1.创建清理日志的脚本首先,创建一个脚本文件,例如cleanup_logs.sh,并赋予其可执行权限。这个脚本将删除指定目录下超过......
  • linux硬盘日志清理
    日志文件清理#!/bin/bash#定义需要检查的目录directories=("/home/logs/archived"\"/data/logs")#获取当前硬盘分区的使用情况df_output=$(df--output=pcent/data|tail-n1|tr-d'%')#获取当前时间current_time=$(date"+%Y-%m-%d%H:......
  • 如何将rust日志输出到android终端
    本博客所有文章除特别声明外,均采用CCBY-NC-SA4.0许可协议。转载请注明来自唯你背景在Rust中,使用println!打印日志时,输出实际上是发送到标准输出(stdout),而AndroidLogcat专门用于处理和显示应用程序的日志信息,此环境下标准输出实现被重新定义。这意味着Rust日志输出不......
  • 一个著名的日志系统是怎么设计出来的
    原文:一个著名的日志系统是怎么设计出来的1前言Java帝国在诞生之初就提供了集合、线程、IO、网络等常用功能,从C和C++领地那里吸引了大量程序员过来加盟,但是却有意无意地忽略了一个重要的功能:输出日志。对于这一点,IO大臣其实非常清楚,日志是个很重要的东西,因为程序运行起......
  • 2024/10/23日 日志--》关于Maven的基础学习--2 坐标与依赖范围
    对Maven的学习即将步入卫生,下面是Maven中的坐标和依赖范围的简单笔记点击查看代码--Maven坐标详解--·什么是坐标?---》Maven中的坐标是资源的唯一标识---》使用坐标来定义项目或引入项目中需要的依赖--·Maven坐标的主要组成---》groupld:定义当前Maven项目隶......
  • 2024/10/22日 日志 --》关于Maven的基础学习 笔记整理
    今天正式步入Maven的学习,以下是基本的笔记整理。点击查看代码--Maven--·Maven是专门用于管理和构建Java项目的工具,它的主要功能有:--·提供了一套标准化的项目结构--·提供了一套标准化的构建流程(编译,测试,打包,发布...)--·提供了一套依赖管理机制--·......
  • logback和日志分离管理
    目录一、日志框架1.什么是日志框架?2.日志框架的作用3.常见的日志框架3.1.Log4j3.2.Logback3.3.java.util.logging(JUL)3.4.SLF4J(日志门面)(SimpleLoggingFacadeforJava)4.常见的日志级别5.讲讲logback5.1.logback-core5.2.logback-classic5.3.logback-access5.4.学到......
  • 2024/10/21 日 日志 --》关于Mysql中的数据库连接池 简述笔记整理
    为了保证博客内容的连贯性,我决定把Maven内容单独开辟而不与JDBC相混。以下为数据库连接池的简单描述和笔记整理点击查看代码--数据库连接池--简介:--·数据库连接池是个容器,负责分配、管理数据库连接。--·它允许应用程序重复使用一个现有的数据库连接,而不是再重新建......