mysql binlog 常用命令及问题整理

本文详细介绍了MySQL二进制日志的配置、导出、导入及备份恢复方法,包括如何查看、导出指定位置、指定时间的日志文件,以及如何从备份文件恢复数据库。同时,解释了如何解决在特定存储引擎下无法正确记录日志的问题,以及二进制日志不准确的处理方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


1:开启binlog日志记录

# log-bin
log-bin = E:/log/logbin.log


查看备份的二进制文件
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001


">": 导入到文件中; ">>": 追加到文件中
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000001 > e:/log/log.sql
c:\mysql\bin\> mysqlbinlog e:/log/logbin.000002 >> e:/log/log.sq

2.2 按指定位置导出:
c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 > e:/log/log3.txt

2.3 按指定时间导出:
c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 > e:/log/log_by_date22.txt


3:从备份恢复数据库
c:\mysql\bin\>mysqlbinlog e:/log/logbin.000001 | mysql -u root -p
mysqlbinlog d:/mysql/data/binlog.000001 | mysql -uroot -pxcg213

3.2 按指定位置恢复:


c:\mysql\bin\>mysqlbinlog --start-position=185 --stop-position=338 e:/log/logbin.000001 | mysql -u root -p

3.3 按指定时间恢复:


c:\mysql\bin\>mysqlbinlog --start-datetime="2010-01-07 11:25:56" --stop-datetime="2010-01-07 13:23:50" e:/log/logbin.000001 | mysql -u root -p

3.4 通过导出的脚本文件恢复


c:\mysql\bin\>mysql -e "source e:/log/log.sql"

4.其他常用操作
4.1 查看所有日志文件

Sql代码
复制代码 代码如下:

mysql>show master logs;

4.2 当前使用的binlog文件
>show binlog events;

mysql>show binlog events \g;

4.3 产生一个新的binlog日志文件
Sql代码
复制代码 代码如下:

mysql>flush logs;

4.4 删除所有二进制日志,并从新开始记录(注意:reset master命令会删除所有的二进制日志)


mysql > flush logs;
mysql > reset master;

4.5 快速备份数据到sql文件


c:\mysql\bin>mysqldump -u root -p --opt --quick interactive > e:/log/mysqldump.sql

为了方便查看,把从脚本恢复的命令在写一次

c:\mysql\bin\>mysql -e "source e:/log/mysqldump.sql"
更换策略:
使用索引来循环文件,在以下条件将循环至下一个索引
1。服务器重启
2。服务器被更新
3。日志到达了最大日志长度 max_binlog_size
4。日志被刷新 mysql> flush logs;
-------------------------------------------
2.记录到二进制日志知的内容配置
binlog-do-db=sales 只记录sales库
binlog-ignore-db=sales 除sales库不记录,其他都记录

但是如果在操作数据库之前,不使用use $dbname 那么所有的SQL都不会记录
如果使用了use $dbname,那么判断规则取决于这里的$dbname,而不是SQL中操作的库

----------------------------------------------------------------------------------
ERROR 1665 (HY000) at line 33: Cannot execute statement: impossible to write to
binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage
 engine limited to row-based logging. InnoDB is limited to row-logging when tran
saction isolation level is READ COMMITTED or READ UNCOMMITTED.

解决办法:
mysql> SET SESSION binlog_format = 'ROW';
   mysql> SET GLOBAL binlog_format = 'ROW';

解释参考:http://www.cnblogs.com/sunson/archive/2012/05/28.html
msyql>show variables like 'binlog%';
当然了,也能够在运行时动态修正binlog的款式。例如

mysql> SET SESSION binlog_format = 'STATEMENT';
mysql> SET SESSION binlog_format = 'ROW';
mysql> SET SESSION binlog_format = 'MIXED';

mysql> SET GLOBAL binlog_format = 'STATEMENT';
mysql> SET GLOBAL binlog_format = 'ROW';
mysql> SET GLOBAL binlog_format = 'MIXED';

-------------------------------------------------------------------------------------
3.二进制日志不准确的处理http://www.lampblog.net/2011/01/mysql-binlog%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%97%A5%E5%BF%97%E8%AF%A6%E8%A7%A3/
默认情况下,并不是每次写入时都将二进制日志与硬盘同步。因此如果操作系统或机器(不仅仅是MySQL服务器)崩溃,有可能二进制日志中最后的语句丢失。
要想防止这种情况,你可以使用sync_binlog全局变量(1是最安全的值,但也是最慢的),使二进制日志在每N次二进制日志写入后与硬盘同步。
即使sync_binlog设置为1,出现崩溃时,也有可能表内容和二进制日志内容之间存在不一致性。

如果崩溃恢复时MySQL服务器发现二进制日志变短了(即至少缺少一个成功提交的InnoDB事务),
如果sync_binlog =1并且硬盘/文件系统的确能根据需要进行同步(有些不需要)则不会发生,则输出错误消息 (“二进制日志<名>比期望的要小”)。
在这种情况下,二进制日志不准确,复制应从主服务器的数据快照开始。
为了您的安全,请只打开来源可靠的网址

<think>好的,我现在需要帮用户查找关于MariaDB的binlog命令的使用方法、语法和示例。首先,我要回想一下用户提供的引用内容,看看是否有相关的信息。用户引用了[2]中的MariaDB配置,其中提到了binlog_format=ROW和log_bin=binlog,这可能涉及到binlog的基本配置。另外,引用[5]提到了使用mysqldump结合binlog进行备份,这可能与binlog的应用场景有关。但用户现在问的是binlog命令本身的使用方法,可能需要更具体的操作指令。 MariaDB的binlog相关命令通常包括查看、管理和恢复数据。用户可能想了解如何查看binlog文件内容、如何过滤特定时间或位置的日志,以及如何用binlog恢复数据。根据引用[1],里面提到了查看binlog的两种方法:使用mysqlbinlog命令和在MySQL中使用show命令。例如,mysqlbinlog是常用的工具,可以解析二进制日志文件。 接下来,我需要确认MariaDB中binlog命令的具体语法。通常,查看binlog的命令是mysqlbinlog,加上文件名和一些选项,比如--start-datetime、--stop-position等。同时,在MySQL/MariaDB内部,可以使用SHOW BINARY LOGS来列出所有binlog文件,用SHOW BINLOG EVENTS来查看特定日志的事件。 然后,用户可能需要示例,比如如何恢复某个时间点的数据,或者如何根据位置点恢复。引用[5]中的mysqldump命令结合--master-data=2,这可能在备份时记录binlog的位置,有助于恢复。这时候,示例应该包括使用mysqlbinlog导出日志,再通过管道导入到数据库中。 需要注意的是,用户的问题是关于MariaDB的,虽然大部分命令和MySQL相似,但最好还是确认MariaDB是否有特定的用法或差异。例如,MariaDB可能有自己的扩展或不同的默认设置,但通常mysqlbinlog工具在MariaDB中也是适用的。 另外,用户可能想知道如何配置binlog,但根据引用[2],配置参数如log_bin、binlog_format等是在my.cnf文件中设置的,这可能属于配置方法而非直接命令使用,但用户的问题可能更偏向于操作命令,所以这部分可能作为补充信息。 最后,要确保语法正确,比如在示例中使用正确的选项格式,如--start-position=1234,以及正确的命令结构。同时,注意用户要求使用中文回答,所以所有解释和示例都需要用中文表述,并符合格式要求,如行内数学表达式用$...$,独立公式用$$...$$,但在这个问题中可能涉及较少数学公式,更多是命令行示例。</think>以下为MariaDB binlog命令使用方法的详细说明,结合官方文档和实际应用场景整理: ### 一、binlog命令核心功能 MariaDB通过binlog实现数据恢复、主从复制、审计等操作,主要使用**mysqlbinlog**工具解析二进制日志文件[^1]。 ### 二、基础命令语法 ```bash mysqlbinlog [options] log_file1 log_file2... ``` 常用参数: - `--start-datetime="YYYY-MM-DD HH:MM:SS"` 指定起始时间 - `--stop-datetime="YYYY-MM-DD HH:MM:SS"` 指定结束时间 - `--start-position=N` 指定起始位置点 - `--stop-position=N` 指定结束位置点 - `--database=db_name` 过滤指定数据库 - `--base64-output=decode-rows` 解析ROW格式日志 - `--result-file=filename` 输出到文件 ### 三、常用操作示例 #### 1. 查看全部binlog文件列表 ```sql SHOW BINARY LOGS; ``` 输出示例: ``` +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | binlog.000001 | 177824 | | binlog.000002 | 65432 | +------------------+-----------+ ``` #### 2. 解析单个binlog文件 ```bash mysqlbinlog /var/lib/mysql/binlog.000001 ``` #### 3. 按时间范围解析(恢复误删数据) ```bash mysqlbinlog --start-datetime="2023-05-01 09:00:00" \ --stop-datetime="2023-05-01 10:00:00" \ binlog.000002 | mysql -u root -p ``` #### 4. 按位置点恢复 ```bash mysqlbinlog --start-position=155 --stop-position=899 \ binlog.000003 | mysql -u root -p ``` #### 5. 解析ROW格式日志(需配合--base64-output参数) ```bash mysqlbinlog --base64-output=decode-rows -vv binlog.000004 ``` ### 四、高级应用场景 #### 1. 生成可读SQL文件 ```bash mysqlbinlog binlog.000005 > /tmp/binlog_restore.sql ``` #### 2. 过滤特定数据库 ```bash mysqlbinlog --database=orders_db binlog.000006 ``` #### 3. 配合mysqldump实现全量+增量备份恢复[^5] ```bash # 全量备份 mysqldump --all-databases --master-data=2 > full_backup.sql # 增量恢复 mysqlbinlog --start-datetime="2023-05-01 00:00:00" binlog.* | mysql -u root -p ``` ### 五、配置注意事项 1. 确认binlog已启用(my.cnf配置): ```ini [mysqld] log_bin=binlog binlog_format=ROW # 推荐使用ROW格式[^2] ``` 2. 查看当前写入的binlog文件: ```sql SHOW MASTER STATUS; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值