您好,欢迎来到三六零分类信息网!老站,搜索引擎当天收录,欢迎发信息
免费发信息
三六零分类信息网 > 阿里分类信息网,免费分类信息发布

全栈之路:从阿里云自动备份文件ibd,frm中恢复数据库数据

2023/10/18 1:02:33发布33次查看
欢迎点击右上角+关注,反正动动手指也不会怀孕,更重要是希望能在工作中帮助到您。
前言
[代码笔记]为一系列的文章,从一个python,django完整项目的环境和工具讲起,随时供自己备查,进阶全栈工程师的狂暴之路。
开始
阿里云的rds数据提供了默认的自动数据库备份功能,但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢?我就遇到这个麻烦问题。
因为这个备份文件的恢复并不是sql的全量备份,而是基于innodb的文件备份。
下载备份文件
首先从阿里云下载了名字类似为hins1751639_data_20170424063544.tar.gz的备份文件到本地。看到解压缩开的一堆文件如下图所示
tar-xzvfhins1751639_data_20170424063544.tar.gzhint
备份文件解压
其中wonderland目录下是当前的数据库里数据文件
我要用到的是web_store表,对应的文件为web_store.ibd和web_store.frm
找回表结构
表结构没丢的话直接跳过本节,看下一步
1进入mysql,创建一个新的临时数据库
createdatabasesstestdefaultcharactersetutf8;
2创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓,一定要是innodb引擎的
createtableweb_store(idint(11)notnullauto_increment,namevarchar(128)notnull,)engine=innodbauto_increment=53defaultcharset=utf8;
3关闭mysql
mysql.servicestop
4用需要恢复的web_store.frm覆盖新建的frm文件,我在mac本地的数据文件路径在/usr/local/mysql/data/sstest/
cpweb_store.frm/usr/local/mysql/data/sstest/web_store.frm
5参考资料说要修改my.ini里innodb_force_recovery=1,如果不成修改为2,3,4,5,6。,我在本地没有这个文件,跳过了这一步
6启动mysql
mysql.servicestartshowcreatetableweb_store
看到表结构
找回数据
2废掉表空间,使当前的ibd和frm分离
altertableweb_storediscardtablespace;
3把之前要恢复的.ibd文件复制到新的表结构文件下,使当前的ibd和frm发生关系
altertableweb_storeimporttablespace;
这里没错误的话就已经建立好了。
4把所有数据导出后,在新的数据库导入
参考命令
1导出一个表,包括表结构和数据
mysqldump-u用户名-p密码数据库名表名>导出的文件名mysqldump-uroot-ptestweb_store>web_store.sql
2在mysql里导入sql语句
source~/web_store.sql
3改变文件拥有者和群组权限,mysql有可能因为权限问题读去不了对应的frm和ibd文件
sudochown_mysql:wheelweb_store.frm
个人警醒
在做任何的数据库sql导入之前,务必先导出备份一下,会有各种意想不到的麻烦逼你找回原有数据的,即使有方法解决也会非常被动
阿里分类信息网,免费分类信息发布

VIP推荐

免费发布信息,免费发布B2B信息网站平台 - 三六零分类信息网 沪ICP备09012988号-2
企业名录