您的位置: 翼速应用 > 业内知识 > 数据库 > 正文

如何利用物理方式使MySQL恢复单表

本文给大家带来了关于mysql的知识教程,一起聊聊如何通过物理方式来使MySQL能够快速的恢复单表,下面一起来看一下。


 如何利用物理方式使MySQL恢复单表


如何利用物理方式使MySQL恢复单表


使用方法


1、首先创建一个测试表test1,并插入几条数据:


mysql> create table test1 (id int auto_increment primary key,name varchar(20));
Query OK, 0 rows affected (0.05 sec)
 
mysql> insert into test1 (name) values ('张三'),('李四'),('王二');
Query OK, 3 rows affected (0.01 sec)
Records: 3  Duplicates: 0  Warnings: 0
 
mysql> select * from test1;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)


2、创建目标表test2:


mysql> create table test2 like test1;
Query OK, 0 rows affected (0.10 sec)
查看数据目录里面的ibd文件(test2.ibd、test1.ibd):
-rw-r-----. 1 * * 114688 Nov  2 16:20 test1.ibd
-rw-r-----. 1 * * 114688 Nov  2 16:23 test2.ibd


3、通过alter table discard的方法丢弃表test2的idb文件(为下一步复制test1的数据过来做准备):


mysql> alter table test2 discard tablespace;   
Query OK, 0 rows affected (0.02 sec)
 
查看ibd文件情况,发现test2的ibd文件已经被删除
 
-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd


4、执行下面的命令,生成一个test1的cfg文件,如下:


mysql> flush table test1 for export; 
Query OK, 0 rows affected (0.00 sec)
 
生成了一个test1.cfg的cfg文件
 
-rw-r----- 1 * *    655 Nov  2 16:25 test1.cfg
-rw-r----- 1 * * 114688 Nov  2 16:20 test1.ibd


5、拷贝源表test1的cfg文件和ibd文件到目标表test2,并修改文件权限:


cp test1.cfg test2.cfg
cp test1.ibd test2.ibd
chown -R mysql.mysql test2.*


6、复制完成之后,执行select命令发现出现以下报错:


mysql> select * from test2;
ERROR 1100 (HY000): Table 'test2' was not locked with LOCK TABLES


7、执行unlock tables,释放源表的test1.cfg文件,然后导入ibd文件:


mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
 
并用alter table的方法为目标表test2导入这个ibd文件:
 
mysql> alter table test2 import tablespace; 
Query OK, 0 rows affected (0.03 sec)
1 row in set (0.00 sec)


8、再次执行select,发现数据已经导入:


mysql> select * from test2;
+----+--------+
| id | name   |
+----+--------+
|  1 | 张三   |
|  2 | 李四   |
|  3 | 王二   |
+----+--------+
3 rows in set (0.00 sec)


物理复制方法介绍


上述单表物理复制的方法,核心在于cp命令,因为是通过物理拷贝,所以如果复制的表非常大,那么通过物理拷贝,就会比逻辑上的SQL写入快很多,比如insert into select语句。


简单总结一下上述物理复制过程:


●  create table like语法创建一个相同表结构的空的目标表

●  目标表执行alter table discard,丢弃ibd文件

●  源表执行alter table for export语法,生成.cfg文件,并锁表

●  使用cp命令复制源表cfg文件和ibd文件为目标表

●  unlock tables 释放源表的cfg文件和锁

●  alter table import命令导入目标表的ibd数据文件。


alter table for export语法介绍:


●  这个命令是为了将内存中关于这个表的数据刷新到磁盘上,确保数据都能被binlog所记录;

●  这个操作需要flush table或者reload权限;

●  这个操作会持有当前表的共享MDL锁,阻止其他会话修改表结构,在FOR EXPORT操作完成时不会释放先前获取的MDL锁,需要手工释放

●  InnoDB会在与该表相同的数据库目录中生成一个名为table_name.cfg的文件

●  处理完表复制后,需要使用UNLOCK tables释放源表的MDL锁或者断开连接。


关于利用物理方式使MySQL恢复单表的教程解析就到这里,翼速应用平台内有更多相关资讯,欢迎查阅!


我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题