暂无图片
暂无图片
暂无图片
暂无图片
暂无图片
4.数据救援.docx
19
6页
0次
2025-03-08
50墨值下载
innodb 强制恢复
MySQL 实例启动时会进行 innodb 崩溃恢复(crash recovery),很多时候 MySQL 实例启
动失败是由于 innodb 崩溃造成的。此时在错误日志中有类似下面的提示:
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/8.0/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
系统参数 innodb_force_recovery 控制着 innodb 崩溃恢复的操作,该参数的取值范围为
0~6,默认是 0,数值每增大 1innodb 的崩溃恢复就会跳过一部分操作,从而提高操作成功
的可能性,下面说明 innodb_force_recovery 的值对应的操作:
1. 0:执行完整的 innodb 的崩溃恢复步骤。
2. 1(SRV_FORCE_IGNORE_CORRUPT):忽略检查到的损坏的页。尽管检测到了损
坏的 page 仍强制服务运行。一般设置为该值即可,然后 dump 出库表进行重建。
3. 2(SRV_FORCE_NO_BACKGROUND):阻止主线程的运行,如主线程需要执行
full purge 操作,会导致 crash。 阻止 master thread 和任何 purge thread 运行。若
crash 发生在 purge 环节则使用该值。
4. 3(SRV_FORCE_NO_TRX_UNDO):不执行事务回滚操作。
5. 4(SRV_FORCE_NO_IBUF_MERGE):不执行插入缓冲的合并操作。如果可能导致
崩溃则不要做这些操作。不要进行统计操作。该值可能永久损坏数据文件。若使用了
该值,则将来要删除和重建辅助索引。
6. 5(SRV_FORCE_NO_UNDO_LOG_SCAN):不查看重做日志,InnoDB 存储引擎
会将未提交的事务视为已提交。此时 InnoDB 甚至把未完成的事务按照提交处理。该
值可能永久性的损坏数据文件。
7. 6(SRV_FORCE_NO_LOG_REDO):不执行前滚的操作。恢复时不做 redo log
roll-forward。使数据库页处于废止状态,继而可能引起 B 树或者其他数据库结构更
多的损坏。
通过增大 innodb_force_recovery 的值可以增加 MySQL 实例成功启动的可能性,但应从 0
开始,每次只增加 1,当 innodb_force_recovery 的值大于 3 后,可能造成数据永久损坏。
当以跳过 innodb 部分崩溃恢复的方法启动 MySQL 实例后,应尽快将数据导出,此时不能使
用物理备份,因为物理备份会把损坏的页原样备份出来,应使用逻辑备份将所有数据导出,类
似命令如下:
mysqldump -uroot -p123456 --force --all-databases --flush-privileges > all.sql
加入 --flush-privileges 选项,会在恢复数据的最后会执行 flush privileges 语句将用户权限
表刷新到内存中,恢复完成后,原来的用户、密码和权限即刻生效,用户、密码和权限保持不
变,不用重新创建用户和赋予权限,也不用重新启动。
执行如下步骤恢复数据:
1. 关闭 MySQL 实例。
2. 将系统参数 innodb_force_recovery 恢复到默认值 0
3. datadir 目录下的所有文件进行备份后删除。
4. 对数据库进行初始化,代码如下:
mysqld --initialize-insecure
因为对数据库进行初始化时使用了 --initialize-insecure 参数,生成的用户 root@localhost
空密码,所以在恢复数据时,并不需要输入密码,在“Enter password:”后面直接按 Enter
即可开始进行恢复。
5. 重新启动 MySQL 后把刚才备份的数据导入,代码如下:
mysql -uroot -p < all.sql
ibd2sql
ibd2sql 介绍
ibd2sql 可以提取 innodb ibd 文件的数据信息,并接为 DDL可以数据信息解
ibd 文件中的数据为 insert/replace SQL 语句。
仅支 mysql 8.0,不需要接数据库, 只需要对目录 ibd 文件有可权限即可。
功能特点
1. 便:提取表 DDL
2. 实用:可替换(--schema)/(--table), 可在 sql 语句中输出完整的字段(--
complete)
3. 简单 python3 代码编写, 无依赖包. 可以使用**--debug**查看解析过程
4. 性强:可以件过滤符合要的数据 --where , --limit
5. 多数据类持除 空间坐标 数据类型外所有 mysql 数据类 (int,
decimal, date, varchar, char, json, binary, enum, set, blob/text, longblob ).
6. 持复的表结构:分, 注释, 主键, , 约束, , 通索引, 索引, 主键前
索引, 一索引, 复合索引, 默认值, 符号, 虚拟字段, INSTANT, 主键等情况的表
7. 数据误删恢复:可以输出被标记 deleted 的数据
8. 安全线解析 ibd 文件, 权限即可
ibd2sql 使用场景
数据恢复
1. 小心删除了某个 ibd 文件, 如果能从磁盘上恢复出来了, 但不知道表结构, 就可以使用
--ddl 查看表结构了.
2. 小心 delete 些数据, 又没开启 binlog, 就可以使用 --delete 查看误删的数据了.
1. 看下一行数据是, 录数据库太麻烦, 就可以 --sql --limit 1
2. 看下在某个事务新的数据信息, 可以使用 --where-trx=(start_trx, end_trx)
看在这限制内更新的数据信息.
3. 导出数据到其, ./ibd2sql_v1.0 --limit 10 xxx.ibd --schema xxxx |
mysql
4. 查看表结构 ./ibd2sql_v1.0 --ddl
ibd2sql 安装
项目地址: https://github.com/ddcw/ibd2sql
地址https://cloud.tencent.com/developer/article/2377921
wget
https://github.com/ddcw/ibd2sql/releases/download/v1.0/ibd2sql_v1.0_linux_x86_64.tar.
gz
gunzip ibd2sql_v1.0_linux_x86_64.tar.gz
tar -xvf ibd2sql_v1.0_linux_x86_64.tar
[root@localhost ibd2sql_v1.0_linux_x86_64]# ll
6564
-rwxr-xr-x 1 root root 6657512 1 9 10:34 ibd2sql_v1.0
-rw-r--r-- 1 root root 35149 8 30 2023 LICENSE
-rw-r--r-- 1 root root 19186 1 9 10:21 README.md
-rw-r--r-- 1 root root 395 1 9 10:38 README.txt
使用--help 查看信息
./ibd2sql_v1.0 --help
usage: ibd2sql_v1.0 [-h] [--version] [--ddl] [--sql] [--delete]
[--complete-insert] [--force] [--set] [--multi-value]
[--replace] [--table TABLE_NAME] [--schema SCHEMA_NAME]
[--sdi-table SDI_TABLE] [--where-trx WHERE_TRX]
[--where-rollptr WHERE_ROLLPTR] [--where WHERE]
[--limit LIMIT] [--debug] [--debug-file DEBUG_FILE]
[--page-min PAGE_MIN] [--page-max PAGE_MAX]
[--page-start PAGE_START] [--page-count PAGE_COUNT]
[--page-skip PAGE_SKIP] [--parallel PARALLEL]
[FILENAME]
解析 mysql8.0 ibd 文件 https://github.com/ddcw/ibd2sql
positional arguments:
FILENAME ibd filename
optional arguments:
-h, --help 打印帮信息
--version, -v, -V 查看版本信息
--ddl, -d 打印相 DDL
--sql 打印解析出来的数据的 insert 语句
--delete 打印被标记 deleted 的数据,看运
--complete-insert insert 语句包含列名字
--force, -f 对于包含有限持和不持的数据类强制解析
--set set/enum to fill in actual data instead of strings
--multi-value single sql if data belong to one page
--replace "REPLACE INTO" replace to "INSERT INTO" (default)
--table TABLE_NAME 替换 insert 语句的表
--schema SCHEMA_NAME replace table name except ddl
of 6
50墨值下载
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文档的来源(墨天轮),文档链接,文档作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。