赞
踩
目录
使用文件迁移的方式更适用于数据量比较大的库/表,使用mysqldump的话生成备份和还原都比较耗时。如果数据量不大,使用mysqldump还是挺方便的。详见:mysqldump备份与还原
MyISAM和InnoDB的迁移方式不太一样,所以需要分开来讲。
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迁移比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;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。