暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

单表从ibd文件进行迁移或恢复

原创 谭磊Terry 恩墨学院 2022-06-02
1138

在线迁移

源库锁表

FLUSH TABLE tb1 FOR EXPORT

只针对 InnoDB,t1表加全局读锁(只能读,不能写,保证数据的一致性) 表,可以确保对表的修改被刷新到磁盘上,MySQL可以通过直接拷贝底层文件的方式来复制表

源库拷贝数据字典与数据文件到远程机器

scp tb1.cfg tb1.ibd 100.64.xx.xx:/tmp

源库解锁表

unlock tables;

目标库里新建表结构

create table tb1 xxx;

目标库里丢弃表空间

alter table tb1 discard tablespace;  

该命令会关闭tb1表的数据空间,并会删除其数据文件

从/tmp中拷贝ibd和cfg文件到数据目录并且修改权限

cp /tmp/{tb1.ibd,tb1.cfg} /xfjrdb/xfjrdata/test/
chown -R mysql.mysql /xfjrdb/xfjrdata/test/{tb1.ibd,tb1.cfg}

导入表空间

alter table tb1 import tablespace;
check table tb1;
select count(*) from tb1;

物理备份恢复单表

安装工具

mysql-utilities,其中mysqlfrm可以读取表结构。

需安装以下rpm包

mysql-connector-python
mysql-utilities

从物理备份获取ibd文件

innobackupex --defaults-file=/xfjrdb/xfjrdb.cnf  --user=root --password=123456 --socket=/xfjrdb/xfjrdb11.sock --no-timestamp --slave-info --parallel=4 /databack/xfjrdb/

若要指定某些库或表可用下列参数
--include='^dbname[.]*'
--tables-file=/tmp/tables.txt

innobackupex --apply-log --redo-only /databack/xfjrdb

利用mysql-utilities工具读取表结构

将读取的表结构拿到数据库进行创建

mysqlfrm --diagnostic /databack/xfjrdb/test/tb1.frm

加一个写锁,确保安全

lock tables tb1 write;

丢弃表空间

alter table tb1 discard tablespace;  

从备份中拷贝ibd文件,并且修改权限

cp /databack/xfjrdb/test/tb1.ibd /xfjrdb/xfjrdata/test/
chown -R mysql.mysql /xfjrdb/xfjrdata/test/tb1.ibd

导入表空间

alter table sbtest1 import tablespace

解锁表

unlock tables;

批量拷贝ibd文件加载空间恢复表数据

问题描述

出现测试环境数据库ibdata1损坏,无法启动。

分析

通过开发环境的mysql全量备份,恢复到测试环境。由于开发环境的admin库数据库结构跟测试环境的admin库一样,但是数据不一样,需要用原测试环境数据文件恢复原表数据。

问题解决

1.备份数据

mkdir backup
cp dbs/admin/* backup/

2.开发环境mysqlbackup全量备份恢复到测试环境

3.卸载库admin所有表空间

mysql -uroot -p -e “select concat(‘alter table ‘,table_name,’ DISCARD tablespace;’) from information_schema.TABLES where table_schema=‘admin’ and table_type=‘BASE TABLE’;” >admin_discard.sql

vi admin_discard.sql
删除第一行concat(‘alter table ‘,table_name,’ DISCARD tablespace;’)

mysql -uroot -p admin < admin_discard.sql

4.拷贝回.ibd文件

cp -f backup/*.ibd dbs/admin/

5.加载库admin所有表空间

mysql -uroot -p -e “select concat(‘alter table ‘,table_name,’ IMPORT tablespace;’) from information_schema.TABLES where table_schema=‘admin’ and table_type=‘BASE TABLE’;” >admin_import.sql

select concat('alter table ',table_name,' DISCARD tablespace;') from information_schema.TABLES where table_schema='prodccsdb' and table_name in('ccs_repay_hst','ccs_loan','ccs_app_main');


vi admin_import.sql
删除第一行concat(‘alter table ‘,table_name,’ IMPORT tablespace;’)

mysql -uroot -p admin < admin_import.sql
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论