数据库mysql innodb ibdata1文件损坏恢复记录

编程入门 行业动态 更新时间:2024-10-14 14:19:59

<a href=https://www.elefans.com/category/jswz/34/1771350.html style=数据库mysql innodb ibdata1文件损坏恢复记录"/>

数据库mysql innodb ibdata1文件损坏恢复记录

数据库mysql innodb ibdata1文件损-数据坏恢复记录


目录

一、数据库环境:

二、导致数据库无法正常启动原因:

三、数据库数据恢复记录如下:

1、使用innodb_force_recovery

2、通过.ibd和.frm恢复数据

4、修改数据库数据目录

5、获取表结构

6、数据恢复操作

7、查询数据


一、数据库环境:

操作系统:CentOS Linux release 7.6.1810

Mysql版本:mysql-5.7.20

Mysql数据目录:/data/mysql

二、导致数据库无法正常启动原因:

由于数据库服务器断电,导致ibdata1文件损坏,mysql数据库服务无法启动。

2020-12-17T03:54:32.995013Z 0 [Warning] The syntax '--log_warnings/-W' is deprecated and will be removed in a future release. Please use '--log_error_verbosity' instead.
2020-12-17T03:54:32.995406Z 0 [Note] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2020-12-17T03:54:32.995511Z 0 [Note] /usr/local/mysql/bin/mysqld (mysqld 5.7.20-log) starting as process 37098 ...
2020-12-17T03:54:33.097469Z 0 [Note] InnoDB: PUNCH HOLE support available
2020-12-17T03:54:33.097541Z 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
2020-12-17T03:54:33.097549Z 0 [Note] InnoDB: Uses event mutexes
2020-12-17T03:54:33.097556Z 0 [Note] InnoDB: GCC builtin __sync_synchronize() is used for memory barrier
2020-12-17T03:54:33.097562Z 0 [Note] InnoDB: Compressed tables use zlib 1.2.3
2020-12-17T03:54:33.097568Z 0 [Note] InnoDB: Using Linux native AIO
2020-12-17T03:54:33.102011Z 0 [Note] InnoDB: Number of pools: 1
2020-12-17T03:54:33.102313Z 0 [Note] InnoDB: Using CPU crc32 instructions
2020-12-17T03:54:33.113942Z 0 [Note] InnoDB: Initializing buffer pool, total size = 10G, instances = 40, chunk size = 128M
2020-12-17T03:54:34.648987Z 0 [Note] InnoDB: Completed initialization of buffer pool
2020-12-17T03:54:34.878594Z 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority().
2020-12-17T03:54:34.893776Z 0 [ERROR] InnoDB: Database page corruption on disk or a failed file read of page [page id: space=0, page number=5]. You may have to recover from a backup.
2020-12-17T03:54:34.893811Z 0 [Note] InnoDB: Page dump in ascii and hex (16384 bytes):

三、数据库数据恢复记录如下:

在执行如下操作前,需备份数据库的整个数据目录,binlog日志目录

1、使用innodb_force_recovery

修改 vim /etc/myf

[mysqld]
innodb_force_recovery = 1

如果使用innodb_force_recovery = 0(1-6参数),数据库服务未正常启动,继续往下看

innodb_force_recovery 参数说明:MySQL :: MySQL 5.7 Reference Manual :: 14.22.2 Forcing InnoDB Recovery

2、通过.ibd和.frm恢复数据

.ibd文件(内部数据字典)
.frm文件(数据库结构信息)
.ibd和ibdata1之间的关系类似于父级和子级,
.ibd文件将通过.frm文件引用ibdata1中的数据。

4、修改数据库数据目录

如果在本服务器,执行如下操作

#重命名数据库数据目录
mv /data/mysql /data/mysql-bak
#创建新的数据库数据目录
mkdir /data/mysql
#修改数据库目录所属权限
chown mysql.mysql /data/mysql
#复制源mysql库performance_schemay库到新建数据目录下
cp -ra /data/mysql-bak/mysql /data/mysql/
cp -ra /data/mysql-bak/performance_schema /data/mysql/
#启动数据库服务
service mysqld start

5、获取表结构

如果原有备份,这一步可以不操作

通过mysqlfrm命令,获取表结构

mysqlfrm下载地址: =jcxh

# 不要使用yum安装,会报错
rpm -ivh mysql-connector-python-2.1.8-1.el7.x86_64.rpm
rpm -ivh mysql-utilities-1.6.5-1.el7.noarch.rpm
# 获取oadb库下所有表结构
mysqlfrm --diagnostic /data/mysql-bak/oadb/ > oadb-restore.sql
# 导入数据库
mysql -uroot -p
create database oadb;#通过mysql客户端导入oadb-restore.sql文件

6、数据恢复操作

# 单表执行
mysql -u root -p
use oadb;
ALTER TABLE `user` DISCARD TABLESPACE;# 批量操作
mysql -uroot -pSVNS2020 -A testdb -e 'ALTER TABLE `user` DISCARD TABLESPACE;'# 执行完成后,复制源目录.ibd文件到恢复库中
cp -a /data/mysql-bak/oadb/*.ibd /data/mysql/oadb/
#
ALTER TABLE `user` IMPORT TABLESPACE;
# 批量操作
mysql -uroot -pSVNS2020 -A testdb -e 'ALTER TABLE `user` IMPORT TABLESPACE;'

7、查询数据

登录mysql客户端,查询数据库数据

更多推荐

数据库mysql innodb ibdata1文件损坏恢复记录

本文发布于:2024-03-14 18:15:17,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1737052.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:数据库   文件   innodb   mysql

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!