已解决
MySQL大表直接复制文件的copy方式
来自网友在路上 155855提问 提问时间:2023-10-08 14:40:01阅读次数: 55
最佳答案 问答题库558位专家为你答疑解惑
看腻了就来听听视频演示吧:https://www.bilibili.com/video/BV1Bp4y1F7kd/
- MyISAM引擎可单独将 *.MYD和 *.MYI 拷贝到远程服务器上
- InnoDB引擎受限于版本(MySQL5.5)无法直接拷贝.ibd文件,因为在ibdata1文件保存有表的字典信息,在ibd文件保存有事务ID和日志序列号,只能用dump方式。
操作步骤:
- 获取备份表DDL,统计数据集(用于恢复后校样)
- 锁表,导出表对应的数据字典文件
- 备份表对应的数据文件和数据字典文件
- 解锁,恢复表的相关业务操作
- 在恢复环境上创建该表DDL(测试演练在同一环境故先删表再重建该表)
- 关闭该表的数据空间,即会删除该表的ibd数据文件
- 将备份数据文件和数据字典文件copy到对应数据目录下
- 应用表空间恢复数据并进行恢复后检查
- 验证恢复的数据集
直接上案例模拟演示:
# MySQL 6+ 可以直接拷贝的前提条件是独立表空间,即innodb_file_per_table=1
mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+# 查看测试表DDL
mysql> show create table t12\G
*************************** 1. row ***************************Table: t12
Create Table: CREATE TABLE `t12` (`pid` bigint(20) unsigned NOT NULL DEFAULT '0',`pname` varchar(20) DEFAULT NULL,`project` varchar(20) DEFAULT NULL,`tvalue` decimal(5,2) DEFAULT NULL,`unit` varchar(8) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
# 查看测试表数据
mysql> select * from t12;
+-----+--------+---------+--------+------+
| pid | pname | project | tvalue | unit |
+-----+--------+---------+--------+------+
| 1 | 王五 | 身高 | 172.34 | cm |
| 2 | 王五 | 体重 | 69.52 | kg |
| 3 | 王五 | 年龄 | 22.00 | 岁 |
| 4 | 赵六 | 身高 | 170.52 | cm |
| 5 | 赵六 | 体重 | 80.52 | kg |
| 6 | 赵六 | 年龄 | 26.00 | 岁 |
+-----+--------+---------+--------+------+
6 rows in set (0.00 sec)# 表加全局读锁,即把.cfg数据字典文件导出到磁盘上
mysql> flush tables t12 for export;
Query OK, 0 rows affected (0.00 sec)# 拷贝数据目录对应库名下的 t12.ibd 和 t12.cfg文件,然后修改属性
[root@db01 mdb]# mkdir /tmp/mysql_back
[root@db01 mdb]# ll t12.*
-rw-r----- 1 mysql mysql 585 Sep 2 16:16 t12.cfg
-rw-r----- 1 mysql mysql 8690 Sep 2 16:11 t12.frm
-rw-r----- 1 mysql mysql 98304 Sep 2 16:11 t12.ibd
[root@db01 mdb]# cp t12.ibd /tmp/mysql_back
[root@db01 mdb]# cp t12.cfg /tmp/mysql_back
[root@db01 mdb]# chown -R mysql.mysql /tmp/mysql_back/t12.*
[root@db01 mdb]# ll /tmp/mysql_back/t12.*
-rw-r----- 1 mysql mysql 585 Sep 2 16:18 /tmp/mysql_back/t12.cfg
-rw-r----- 1 mysql mysql 98304 Sep 2 16:18 /tmp/mysql_back/t12.ibd# 解锁,模拟删表
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
mysql> drop table t12;
Query OK, 0 rows affected (0.00 sec)
# 创建原表结构
mysql> CREATE TABLE `t12` (-> `pid` bigint(20) unsigned NOT NULL DEFAULT '0',-> `pname` varchar(20) DEFAULT NULL,-> `project` varchar(20) DEFAULT NULL,-> `tvalue` decimal(5,2) DEFAULT NULL,-> `unit` varchar(8) DEFAULT NULL-> ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Query OK, 0 rows affected (0.01 sec)# 关闭表的数据空间并会删除其数据文件t12.ibd
mysql> alter table t12 discard tablespace;
Query OK, 0 rows affected (0.01 sec)# 再把备份的t12.ibd 和 t12.cfg文件拷贝过来
[root@db01 mdb]# mv /tmp/mysql_back/t12.cfg .
[root@db01 mdb]# mv /tmp/mysql_back/t12.ibd .
[root@db01 mdb]# ll t12.*
-rw-r----- 1 mysql mysql 585 Sep 2 16:18 t12.cfg
-rw-r----- 1 mysql mysql 8690 Sep 2 16:26 t12.frm
-rw-r----- 1 mysql mysql 98304 Sep 2 16:18 t12.ibd# 应用表空间恢复数据并进行恢复后检查
mysql> alter table t12 import tablespace;
Query OK, 0 rows affected (0.01 sec)
mysql> check table t12;
+---------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+---------+-------+----------+----------+
| mdb.t12 | check | status | OK |
+---------+-------+----------+----------+
1 row in set (0.00 sec)# 验证数据是否恢复回来
mysql> select * from t12;
+-----+--------+---------+--------+------+
| pid | pname | project | tvalue | unit |
+-----+--------+---------+--------+------+
| 1 | 王五 | 身高 | 172.34 | cm |
| 2 | 王五 | 体重 | 69.52 | kg |
| 3 | 王五 | 年龄 | 22.00 | 岁 |
| 4 | 赵六 | 身高 | 170.52 | cm |
| 5 | 赵六 | 体重 | 80.52 | kg |
| 6 | 赵六 | 年龄 | 26.00 | 岁 |
+-----+--------+---------+--------+------+
6 rows in set (0.00 sec)
MySQL的binlog系列和奇技操作:
先来聊聊MySQL的binlog文件解析
接着说说mysqlbinlog解析工具如何做数据恢复
再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
再来介绍另一个binlog文件解析的第三方工具my2sql
顺带来聊聊MySQL误删ibdata数据文件的恢复
MySQL大表直接复制文件的copy方式
查看全文
99%的人还看了
相似问题
猜你感兴趣
版权申明
本文"MySQL大表直接复制文件的copy方式":http://eshow365.cn/6-17298-0.html 内容来自互联网,请自行判断内容的正确性。如有侵权请联系我们,立即删除!
- 上一篇: 线性数据—栈、队列、链表
- 下一篇: 压缩包系列