MySql备份与还原:文件迁移

目录

一、MyISAM迁移

二、InnoDB迁移


使用文件迁移的方式更适用于数据量比较大的库/表,使用mysqldump的话生成备份和还原都比较耗时。如果数据量不大,使用mysqldump还是挺方便的。详见:mysqldump备份与还原

MyISAM和InnoDB的迁移方式不太一样,所以需要分开来讲。

一、MyISAM迁移

MyISAM迁移只需要将表的三个文件迁移到目标数据库下面就可以。需要提前创建好目标数据库。

1、在test数据库下面创建一个存储引擎为MyISAM的表user,并插入几条数据。

2、查看user表生成的文件,MySql会在data目录下面根据数据库名称生成文件夹,文件夹下面就是数据库的表文件了。

      MyISAM会生成三个文件,如下所示:

3、将user表文件复制到test_new数据库文件夹下面

4、修改复制过来的文件的所属用户/用户组:chown mysql:mysql test_new/user.*

5、查看test_new数据库下面是否有user表,并能正常访问user表

二、InnoDB迁移

InnoDB迁移比MyISAM迁移稍微复杂一点,因为他对ibdata1文件有依赖。如果是整库迁移的话也只需要参考迁移MyISAM的方式将数据库文件和ibdata1复制过去就可以。

下面描述的是数据库中的表迁移(不支持有外键的表):

1、在数据库test下面创建表user1,并新增几条数据。在目标数据库test_new下面创建相同的表user1。

2、在目标数据库test_new的表user1上释放表空间:alter table user1 discard tablespace;

3、在源数据库test上创建.cfg 元数据文件,注意不能退出当前数据库连接,不然.cfg会被自动删除:

      flush tables user1 for export;

      flush tables XXX for export语句确保对命名表的更改已经刷新到磁盘。当运行该语句时,InnoDB 会产生一个.cfg 在同一个数据库的目录表文件。该.cfg 文件包含导入表空间文件时用于模拟验证的元数据。

       并且会对表添加只读锁,将不能对此表增删改操作

4、将源数据库的表文件拷贝到目标数据库下面,并修改文件访问权限,.frm是表格式文件,目标数据库已经创建过了,可以不拷贝:chown mysql:mysql test_new/user1.* ;

5、重置目标数据库test_new的表user1的表空间:alter table user1 import tablespace;

      如果报错:ERROR 1100 (HY000): Table 'user1' was not locked with LOCK TABLES; 则退出mysql(exit)重连;

      可以看到目标数据库test_new的表user1已经可以正常的增删改查了。

6、最后释放test数据库表user1的只读锁;如果期间退出过当前mysql连接,.cfg文件被自动删除了,那么表锁会被自动释放掉:unlock table;

 

 

 

发布了65 篇原创文章 · 获赞 28 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq_26900081/article/details/103183352