默认情况下,mysqlbinlog读取二进制日志文件并以文本格式显示其内容。这使您可以更轻松地检查文件中的事件并重新执行它们(例如,通过将输出用作mysql的输入)。mysqlbinlog可以直接从本地文件系统读取日志文件,或者使用该 --read-from-remote-server
选项可以连接到服务器并从该服务器请求二进制日志内容。mysqlbinlog会将文本输出写入其标准输出,或者 如果给出该选项,则将文件命名为该选项的值 。 --result-file=
file_name
mysqlbinlog可以读取二进制日志文件并写入包含相同内容的新文件 - 即二进制格式而不是文本格式。此功能使您能够以原始格式轻松备份二进制日志。 mysqlbinlog可以进行静态备份,备份一组日志文件并在到达最后一个文件结束时停止。它还可以进行连续(“实时 ”)备份,当服务器到达最后一个日志文件结束时保持连接到服务器,并在生成它们时继续复制新事件。在连续备份操作中,使用 mysqlbinlog直到连接结束(例如,服务器退出时)或 mysqlbinlog被强制终止。当连接结束时,与从属复制服务器不同,mysqlbinlog不会等待并重试连接。要在服务器重新启动后继续进行实时备份,还必须重新启动mysqlbinlog。
二进制日志备份要求您至少使用两个选项调用 mysqlbinlog:
该
--read-from-remote-server
(或-R
)选项告诉 mysqlbinlog可以连接到服务器并请求其二进制日志。(这与连接到其主服务器的从属复制服务器类似。)该
--raw
选项告诉 mysqlbinlog写入原始(二进制)输出,而不是文本输出。
与此同时 --read-from-remote-server
,指定其他选项也很常见: --host
指示服务器正在运行的位置,并且您可能还需要指定连接选项,例如--user
和 --password
。
其他几个选项可以与--raw
以下内容结合使用 :
--stop-never
:在到达最后一个日志文件结束后保持连接到服务器,并继续阅读新事件。--connection-server-id=
:mysqlbinlog在连接到服务器时报告的服务器ID 。何时id
--stop-never
使用时,默认报告的服务器ID为1.如果这会导致与从属服务器或另一个mysqlbinlog进程的ID发生冲突 ,请使用--connection-server-id
指定备用服务器ID。请参见 第4.6.8.4节“指定mysqlbinlog服务器标识”。--result-file
:输出文件名称的前缀,如稍后所述。
要使用mysqlbinlog备份服务器的二进制日志文件 ,必须指定服务器上实际存在的文件名。如果您不知道名称,请连接到服务器并使用该SHOW BINARY LOGS
语句查看当前名称。假设语句产生这个输出:
mysql> SHOW BINARY LOGS;
+---------------+-----------+
| Log_name | File_size |
+---------------+-----------+
| binlog.000130 | 27459 |
| binlog.000131 | 13719 |
| binlog.000132 | 43268 |
+---------------+-----------+
通过这些信息,您可以使用 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
读取最后一个文件 。这些命令之间的区别在于,如果服务器binlog.000133
在mysqlbinlog达到结尾 之前 恰好打开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
和up。如果使用 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
访问。本文由学什么技术好网独家翻译