mysql根据binlog恢复数据

本文详细介绍通过MySQL的binlog日志恢复数据的过程。从创建表、插入数据到删除表,再利用binlog进行数据恢复,展示了一种有效应对数据丢失的策略。适合数据库管理员和开发人员参考。

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

mysql根据binlog恢复数据

创建表

mysql> CREATE TABLE `test` (
                              `id` int(11) NOT NULL AUTO_INCREMENT,
                              `price` int(10) DEFAULT NULL,
                              PRIMARY KEY (`id`)
                          );
Query OK, 0 rows affected

mysql> desc test;
+-------+---------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra          |
+-------+---------+------+-----+---------+----------------+
| id    | int(11) | NO   | PRI | NULL    | auto_increment |
| price | int(10) | YES  |     | NULL    |                |
+-------+---------+------+-----+---------+----------------+
2 rows in set

插入数据

mysql> insert into test values(1,2),(2,3),(3,4);
Query OK, 3 rows affected
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from test;
+----+-------+
| id | price |
+----+-------+
|  1 |     2 |
|  2 |     3 |
|  3 |     4 |
+----+-------+
3 rows in set

查看binlog记录

D:\mysql-5.6.36-winx64\data> mysqlbinlog mysql-bin.000001
// .....
SET @@session.lc_time_names=0/*!*/;
SET @@session.collation_database=DEFAULT/*!*/;
CREATE TABLE `test` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `price` int(10) DEFAULT NULL,
  PRIMARY KEY (`id`)
)
/*!*/;
SET TIMESTAMP=1545790350/*!*/;
BEGIN
/*!*/;
SET TIMESTAMP=1545790350/*!*/;
insert into test values(1,2),(2,3),(3,4)
/*!*/;
COMMIT/*!*/;
DELIMITER ;
# End of log file
ROLLBACK /* added by mysqlbinlog */;
/*!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE*/;
/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0*/;

删除表

# 暂停mysql的二进制日志功能
mysql> set SQL_LOG_BIN=0;
Query OK, 0 rows affected

mysql> drop table test;
Query OK, 0 rows affected

mysql> select * from test;
1146 - Table 0000.test does not exist

恢复数据

mysql> set SQL_LOG_BIN=1;
Query OK, 0 rows affected

D:\mysql-5.6.36-winx64\data>mysqlbinlog mysql-bin.000001|mysql -uroot -p
Enter password: ****


mysql> select * from test;
+----+-------+
| id | price |
+----+-------+
|  1 |     2 |
|  2 |     3 |
|  3 |     4 |
+----+-------+
3 rows in set

### 使用 MySQL Binlog 进行数据恢复 为了在 Windows 上使用 MySQL 的二进制日志(binlog)文件进行数据恢复,可以遵循以下方法: #### 准备工作 确保已经启用了二进制日志记录功能。这通常是在配置文件 `my.ini` 中设置的[^2]。如果不确定是否已启用此选项,则可以在该文件中的 `[mysqld]` 部分添加如下参数来开启它: ```ini [mysqld] log-bin=mysql-bin server-id=1 ``` 重启 MySQL 服务使更改生效。 #### 查看 binlog 文件内容 利用命令工具 `mysqlbinlog` 可以查看 binlog 文件的内容并解析其中的操作语句[^1]。例如,在命令提示符下执行下面这条指令将会显示指定编号的日志条目详情: ```shell mysqlbinlog "C:\ProgramData\MySQL\MySQL Server X.Y\data\mysql1-bin.000002" ``` 上述路径应替换为实际存储位置;而文件名则取决于具体环境下的命名约定和序列号[^3]。 #### 执行回滚操作 当定位到需要撤销的数据变更事件之后,可以通过反向应用这些 SQL 命令实现部分或全部历史状态的还原。假设要从某个特定时间点开始重做所有事务直到另一个结束时刻之前,可采用类似这样的语法结构: ```sql SET sql_log_bin = OFF; SOURCE C:/path/to/recovery_script.sql; -- 将生成的SQL脚本加载进来执行 SET sql_log_bin = ON; ``` 这里需要注意的是,对于某些类型的修改可能无法简单地通过逆向 DML (即 DELETE 对于 INSERT, UPDATE 则对应相反方向更新),因此建议先仔细分析涉及的具体情况再决定最佳方案。 另外,临时增加 max_allowed_packet 参数值有助于处理较大尺寸的结果集而不至于遇到内存不足错误[^4]: ```ini max_allowed_packet=512M ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值