大家好,我是考100的代码小小顾,祝大家学习进步,加薪顺利呀。今天说一说阿里巴巴大数据之路_阿里云王坚简介,希望您对编程的造诣更进一步.
欢迎点击右上角 +关注,反正动动手指也不会怀孕,更重要是希望能在工作中帮助到您。
前言
[代码笔记]为一系列的文章,从一个python ,django 完整项目的环境和工具讲起,随时供自己备查,进阶全栈工程师的狂暴之路。
开始
阿里云的RDS数据提供了默认的 自动数据库备份功能, 但当面临单表数据误删,或者单表误drop的情况,如果使用物理全备进行恢复呢? 我就遇到这个麻烦问题。
因为这个备份文件的恢复并不是sql的全量备份,而是基于 innodb的文件备份。
下载备份文件
-
首先从阿里云下载了 名字类似为 hins1751639_data_20170424063544.tar.gz 的备份文件到本地。
-
看到解压缩开的一堆文件如下图所示
tar -xzvf hins1751639_data_20170424063544.tar.gz hint
其中 wonderland 目录下是当前的数据库里数据文件
我要用到的是web_store表, 对应的文件为 web_store.ibd 和 web_store.frm
找回表结构
表结构没丢的话直接跳过本节 ,看下一步
1 进入mysql ,创建一个新的临时数据库
CREATE DATABASE sstest DEFAULT CHARACTER SET utf8;
2 创建一个表结构,和要恢复的表名是一样的。表里的字段无所谓,一定要是innodb引擎的
CREATE TABLE web_store (
id int(11) NOT NULL AUTO_INCREMENT,
name varchar(128) NOT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=53 DEFAULT CHARSET=utf8;
3 关闭mysql
mysql.service stop
4 用需要恢复的 web_store.frm 覆盖新建的frm文件, 我在mac本地的数据文件路径在 /usr/local/mysql/data/sstest/
cp web_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.service start
show create table web_store
看到表结构
找回数据
1 进入mysql ,创建一个新的临时数据库
2 废掉表空间, 使当前的ibd和frm分离
alter table web_store discard tablespace;
3 把之前要恢复的.ibd文件复制到新的表结构文件下,使当前的ibd 和frm发生关系
alter table web_store import tablespace;
这里没错误的话就已经建立好了。
4 把所有数据导出后,在新的数据库导入
参考命令
1 导出一个表,包括表结构和数据
mysqldump -u用户名 -p 密码 数据库名 表名> 导出的文件名
mysqldump -uroot -p test web_store> web_store.sql
2 在mysql 里导入 sql语句
source ~/web_store.sql
3 改变文件拥有者和群组权限,mysql有可能因为权限问题读去不了 对应的frm和 ibd文件
sudo chown _mysql:wheel web_store.frm
个人警醒
在做任何的数据库sql导入之前,务必先导出备份一下, 会有各种意想不到的麻烦逼你找回原有数据的,即使有方法解决也会非常被动
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/4221.html