数据库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文件损坏恢复记录
发布评论