mysqlbinlog 命令是什么?
在MySQL或MariaDB中,任何时候对数据库所做的修改都会记录在日志文件中。例如,当您添加新表或更新一条数据时,这些事件将存储在二进制日志文件中。二进制日志文件在 MySQL 主从复合体中非常有用,其中主服务器将其数据发送到远程服务器。
当你需要恢复MySQL时,你还需要使用二进制日志文件。
mysqlbinlog命令以用户可见的方式显示二进制日志的内容。同时,这些内容也可以被其他MySQL实用程序读出以供使用。
1获取当前二进制日志列表
在mysql中执行以下命令查看列表二进制日志文件。
mysql> 显示二进制日志;
+---------------------------------+----- ----+
|日志名称 |文件大小 |
+------------------------ -+---------------- ---+
| mysqld-bin.000001 | 15740 |
| mysqld-bin.000002 | 3319 |
·..
·..
如果bear没有开启该功能,则会显示:
mysql>SHOW二进制日志;
ERROR 1381 (HY000): You are not using binarylogging
二进制日志文件默认存储在 /var/lib/mysql 目录中
$ ls -l /var /lib/mysql/
:-rw-rw----。 1 mysql mysql 15740 八月 28 14:57 mysqld-bin.000001
★-rw-rw---- . 1 mysql mysql 3319 8 月 28 日 14:57 mysqld-bin.000002
..
..
2 mysqlbinlog 默认行为
下面将以用户友好的格式显示指定二进制日志文件(例如:mysqld.000001)的内容。
【$mysqlbinlog mysqld-bin.000001
mysqlbinlog按d会显示如下内容默认:
/*!40019 SET @@session.max_insert_delayed_threads=0*/ ;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; DELIMITER /*!*/;# at 4#170726 14:57:37 server id 1 end_log_pos 106 Start: binlog v 4, server v 5.1 .73-log在启动时创建于170726 14:57:37#警告:此binlog是正在使用或未正确关闭。
ROLLBACK/*!*/;
BINLOG ' IeZ4WQ8BAAAAZgAAAGoAAAABAAQANS4xLjczLWxvZwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAh6nhZEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC '/*!*/;
< p> #106【#170726 14:59:3 1 服务器id 1 end_log_pos 182 查询thread_id=2 exec_time=0 error_code=0
【SET TIMESTAMP=1501095571/*!*/;
>
【SET @@session.sql_mode=0/*!*/; 【SET @@session.auto_increment_increment= 1、@@session.auto_increment_offset=1/*!*/; /*!\Clatin1 *//*!*/; p> SET @@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/ ; ★.. ★.. ★.. ★# 在 14191 ★#170726 15:20 :38 服务器 id 1 end_log_pos 14311 查询 thread_id=4 exec_time=0 error_code= 0SET TIMESTAMP=1501096838/*!*/; insert into salary(name,dept) Values('Ritu', 'Accounting' )/*!*/; 分隔符; #日志文件结束 ROLLBACK /*由mysqlbinlog添加*/; /*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE* 3 获取特定数据库条目 默认情况下,mysqlbinlog会显示所有内容,太杂乱了。使用 -d 选项,您可以指定数据库名称,并且仅显示该数据库上发生的事件。 :$ mysqlbinlog -d crm mysqld-bin.000001 > crm-events.txt 您还可以使用--database命令d 具有同样的效果。 【$ mysqlbinlog -database crm mysqld-bin.000001 > crm-events.txt 【4 禁止恢复进程生成日志
$ mysqlbinlog -D mysqld-bin.000001
也可以使用- - disable-log-bin 命令具有相同的效果。
【$ mysqlbinlog --disable-log-bin mysqld-bin.000001
【注意:在输出中,当指定-D选项时,您将看到第二行输出 。即SQL_LOG_BIN=0
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!32316 SET @OLD_SQL_LOG_BIN=@@SQL_LOG_BIN, SQL_LOG_BIN=0 * /;
/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
使用-to时-last-log选项,这个选项也会有帮助。另外,请记住,此命令需要 root 权限才能执行。
5 控制输出中的base-64 BINLOG
使用base64-output选项,您可以控制输出语句何时输出base64编码的BINLOG语句。以下是base64输出设置的可能值:
从不
总是
解码行
自动(默认)
never:当如下所示指定“never”时,它将在输出中显示base64编码的BINLOG语句。
1$ mysqlbinlog --base64-output=never mysqld-bin.000001
不会有任何类似于下面的行,其中有一个base64编码的BINLOG。
1BINLOG ' IeZ4WQ8BAAAAZgAABAAQANS4xLjczLWxvZwAAAAAAAAAAAAAAAAAA AAAAAAAAAAAAAAh6nhZEzgNAAgAEgAEBAQEEgAAUwAEGggAAAAICAgC
always:当指定“always”选项时,只要有可能,它就只显示BINLOG条目。因此,仅在特定情况下使用它y 调试一些问题。
【$ mysqlbinlog --base64-output=always mysqld-bin.000001
【以下是“always”的输出,只显示BINLOG条目。
0726 14:59:31 服务器 id 1 end_log_pos 182
BINLOG ' k+Z4WQIBAAAATAAAALYAAAAIAAIAAAAAADAAAAGgAAAEAAAAEAAAAAAAAAAAYDc3RkBAgACAAI AHRoZWdlZWtzdHVmZgBCRUdJTg== '/*!*/;
< p> #182#170726 14:59:30 服务器 id 1 end _log_pos 291
BINLOG ' kuZ4WQIBAAAAbQAAACMBAAAAAAIAAAAAAAAADAAAGgAAAEAAAAEAAAAAAAAAAAYDc3RkBAgACAAI AHRoZWdlZWtzdHVmZgBJTlNFUlQgSU5UTy B0IFZBTFVFUygxLCAnYXBwbGUnLCBOVUxMKQ== '/*!*/;
HVmZgBVUERBVEUgdCBTRVQgbmFtZSA9ICdwZWFyJywgZGF0ZSA9ICcyMDA5LTAx LTAxJyBXSEVSRSBpZCA9IDE = p>
Decode-rows:此选项会将基于行的事件解码为 SQL 语句,特别是在指定 -verbose 选项时,如下所示。
【$ mysqlbinlog --base64-output=decode-rows --verbose mysqld-bin.000001
自动:这是默认选项。当没有 Base64 解码选项时e 指定,它将使用 auto。在这种情况下,mysqlbinlog将仅打印某些事件类型的BINLOG条目,例如基于行的事件和格式描述事件。
:$ mysqlbinlog --base64-output=auto mysqld-bin.000001
:$ mysqlbinlog mysqld-bin.000001
:6 mysqlbinlog 输出调试信息
以下调试选项将在处理给定的二进制日志文件后检查文件打开情况和内存使用情况。
【$ mysqlbinlog --debug-check mysqld-bin.000001
如下所示,处理完给定的二进制日志文件后,下面的调试信息选项将显示附加的调试信息。
:$ mysqlbinlog --debug-info mysqld-bin.000001 >/tmp/m.di
:用户时间0.00,系统时间0.00
:最大驻留集大小 2848,整体驻留集大小 0
非物理页错误 863,物理页错误 0,交换 0
块输入 0 输出 48,消息输入 0 输出 0,信号 0
>自愿故事xt 切换 1、非自愿上下文切换 2
7 跳过前 N 条
除了读取整个 mysql 二进制日志文件外,还可以指定部分 Shift 来读取它的特定部分。您可以使用 -o 选项。 o 代表偏移量。
以下命令将跳过指定 mysql bin 日志中的前 10 条条目。
【$ mysqlbinlog -o 10 mysqld-bin.000001
为了确保它正常工作,给偏移量一个很大的数字,你将看不到任何条目。以下将从日志中跳过 10,000 个条目(事件)。
$ mysqlbinlog -o 10000 mysqld-bin.000001
/*!40019 SET @@session.max_insert_delayed_threads=0*/;
/*!50003设置@OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/; .. ..
#日志文件结束
ROLLBACK /*由mysqlbinlog添加*/;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/ ;
在本例中,由于该特定日志文件没有 10,000 个条目,因此没有数据库事件s 显示在输出中。
8 将输出保存到文件
您还可以使用简单的 Linux 重定向命令将输出存储在文件中,如下所示。
【$ mysqlbinlog mysqld-bin.000001 > output.log
【或者可以使用-r(结果文件)选项,将输出存储到文件中,如下所示。
【$ mysqlbinlog -r output.log mysqld-bin.000001
注意:也可以使用-server-id指定mysql服务器,以确保是带有的mysql服务器给定的服务器 ID。生成的日志。
【$ mysqlbinlog --server-id=1 -r output.log mysqld-bin.000001
【9 从特定位置提取条目
通常在mysql二进制日志文件中,你会看到如下所示的位置号。下面是mysqlbinlog的部分输出,可以看到“15028”是一个位置号。
【#170726 15:38:14 服务器id 1 end_log_pos 15028 查询thread_id=5 exec_time=0 error_code=0
【SET TIMESTAMP=1501097894/*!*/;
在插入工资值(400,'Nisha','Marketing',9500)
/*!*/;
# at 15028
#170726 15 :38:14 server id 1 end_log_pos 15146 Query thread_id=5 exec_time=0 error_code=0
【SET TIMESTAMP=1501097894/*!*/;
【插入工资值(500, 'Randy','Technology',6000)
以下命令将开始读取位置号为 15028 的二进制日志条目。
$ mysqlbinlog -j 15028 mysqld-bin.000001 > from-15028.out
当在命令行上指定多个二进制日志文件时,起始位置选项将仅应用于给定列表中的第一个二进制日志文件。您还可以使用 -H 选项获取给定二进制日志文件的十六进制转储,如下所示。
【$ mysqlbinlog -H mysqld-bin.000001 > binlog-hex-dump.out
【10 截断条目到特定位置
就像前面的例子一样,你也可以将mysql二进制日志中的条目截断到特定位置,如下所示。
:$ mysqlbinlog --stop-position=15028 mysqld-bin.000001 > upto-15028.out
以上示例将在位置15028停止binlog。当命令行指定多个二进制日志文件时,停止位置只会是应用于给定列表中的最后一个二进制日志文件。
11刷新日志以清除Binlog输出
当二进制日志文件没有正常关闭时,你会在输出中看到一条警告消息,如下所示。
【$ mysqlbinlog mysqld-bin.000001 > output.out
【如下图,报告表明binlog文件没有正确关闭。
< # head output.log
*!40019 SET @@session.max_insert_delayed_threads=0*/;
< .. ..
< p>#警告:此二进制日志正在使用或未正确关闭。..
.. BINLOG ' IeZ4WQ8BAAAAZgAAAGoAAAABAAQANS4xLjczLWxvZwAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAh6nhZEzgNAAgAEgAEBAQEEgA AUwAEG ggAAAAICAgC< / p>
当你看到这个提示时,你需要o 连接mysql并刷新日志,如下图。
1mysql> 刷新日志;
刷新日志后,再次执行mysqlbinlog命令。您不会在 mysqlbinlog output.warning 消息中看到 binlog 未正确关闭。
【12 在输出中只显示语句
默认情况下,如前面的示例输出所示,除了 SQL 语句之外,还会有一些附加信息。如果您只想查看常规 SQL 语句而不想查看其他内容,则可以使用 -s 选项,如下所示。
您还可以使用--short-form选项,它具有相同的效果。
$ mysqlbinlog -s mysqld-bin.000001
$ mysqlbinlog --short-form mysqld-bin.000001
以下是部分输出上述命令。这里它将仅显示给定二进制日志文件中的 SQL 语句。
【SET TIMESTAMP=1501096106/*!*/;
插入员工值(400,'Nisha','Marketing',9500)/*!*/;
插入员工值(400,'Nisha','Marketing',9500)/*!*/;
>
设置时间戳=1501096106/*!*/;
插入员工值(500,'Randy','Technology',6000)
..
..< /p>
不会显示如下条目:
# at 1201
#170726 15:08:26 server id 1 end_log_pos 1329 Query thread_id=3 exec_time= 0 error_code=0
13 查看特定开始时间的条目
<以下只会提取从指定时间开始的条目。在此之前的任何条目都将被忽略。
$ mysqlbinlog --start-datetime="2017-08-16 10:00:00" mysqld-bin.000001
当你想从二进制文件中提取数据时这样当您想要使用它来恢复或重建在特定时间段内发生的某些数据库活动时,它非常有用。时间戳的格式可以是DATETIME和timestamp,MySQL服务器可以理解p中的任何类型。
14 查看具有特定结束时间的条目
与前面的开始时间示例一样,也可以在此处指定结束时间,如下所示噢。
$ mysqlbinlog --stop-datetime="2017-08-16 15:00:00" mysqld-bin.000001
以上命令将读取给定的结束时间条目。 mysql 二进制日志文件中早于给定结束时间的任何条目都不会被处理。
15 从远程服务器获取二进制日志
在本地机器上,您还可以读取位于远程服务器上的mysql二进制日志文件。为此,您需要指定远程服务器的 IP 地址、用户名和密码,如下所示。
此处使用 -R 选项。 -R 选项与 -read-from-remote-server 相同。
$ mysqlbinlog -R -h 192.168.101.2 -p mysqld-bin.000001
上述命令中:
-R选项指示mysqlbinlog命令远程运行服务器读取日志文件
:-h指定远程服务器的IP地址
:-p将提示输入密码。默认情况下,它将使用“root”作为用户名。您还可以使用 -u opti 指定用户名在。
Mysqld-bin.000001 这是此处读取的远程服务器的二进制日志文件的名称。
以下命令与上面的命令完全相同:
$ mysqlbinlog --read-from-remote-server --host=192.168.101.2 -p mysqld-bin。 000001
p>如果仅指定 -h 选项,您将收到以下错误消息。
【$ mysqlbinlog -h 192.168.101.2 mysqld-bin.000001
【mysqlbinlog:找不到文件“mysqld-bin.000001”(错误代码:2)
当您没有足够的远程数据库权限时,您将收到以下“不允许连接”错误消息。在这种情况下,请确保在远程数据库上授予本地客户端适当的权限。
【$ mysqlbinlog -R --host=192.168.101.2 mysqld-bin.000001
【错误:连接失败:不允许主机“216.172.166.27”连接
>
到此 MySQL 服务器
如果您没有使用 -p 选项指定正确的密码,您将收到以下“Access Denied”错误消息。
$ mysqlbinlog -R --host=192.168.101.2 mysqld-bin.000001
错误:连接失败:用户“root”@'的访问被拒绝216.172.166.27'(使用密码:YES)
以下示例显示您还可以使用 -u 选项指定 mysqlbinlog 用于连接远程 MySQL 数据库的用户名。请注意,这user是mysql用户(不是Linux服务器用户)。
:$ mysqlbinlog -R --host=192.168.101.2 -u root -p mysqld-bin.000001
以上就是这篇文章《mysqlbinlog命令有哪些?》文章的全部内容,感谢您的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助。如果您想了解更多知识,请关注行业资讯频道!
2. 本站积分货币获取途径以及用途的解读,想在本站混的好,请务必认真阅读!
3. 本站强烈打击盗版/破解等有损他人权益和违法作为,请各位会员支持正版!
4. 编程技术 > mysqlbinlog 命令是什么?