数据的迁移往往关系重大,他直接影响各种环境,也是做一些瘦身和优化的方法。这里讲讲一些数据迁移的要点。
关于mysql的数据备份,实际上只需要将my.ini中配置的data目录整个拷贝并备份起来就可以了(恢复的时候只需要删除现有的文件并将备份拷贝回来就行了),经本人测试,该方法可以在mysql5.1以上各版本间使用(包括5.1, 5.5, 5.6),所以可以肯定的是mysql5这个大版本基本上没有变过存储的结构。
对于大数据量的导出,经过测试,发现原来7g的数据,导出后只有大概3g,本来觉得有些奇怪,但是仔细一想,索引以及其他存放在磁盘上的结构很可能让数据变大。
mysql dump时经常会遇到 Unknown command '\''.这个报错,让人摸不着头脑。实际上这个是字符编码的问题,所以需要在导入和导出时都分别加上默认编码。
mysqldump -uroot -p --default-character-set=utf8 databaseName > db.sql
实际导出时速度不慢,7g数据大概只用了几分钟
mysql -uroot -p --default-character-set=utf8 databaseName < db.sql
导入是一个反向的过程,速度比较慢,大概是因为在索引下调整插入的数据
这里稍微介绍一些mysqldump的有用的参数,详细参数请参考文末资料
routines,-R:导出存储过程及自定义函数
triggers:导出触发器
no-data,-d:不导出数据,只导出结构
no-create-info,-t:不导出结构,只导出数据
PS:如果以上两个同时使用,mysql会不会癫狂,它只会生成一堆注释给你
opt:快捷选项,等同于同时添加 add-drop-tables add-locking create-option disable-keys extended-insert lock-tables quick set-charset 选项
另一个经常用到的场景是原样复制表,可以用如下的语句
create table bigtable2 select * from bigtable;
如果表已经建好并且略有出入,可以这样用。如果表bigtable2里已经有重复的字段了,记得使用replace
insert into bigtable(col1, col2, col3) select col1, col2, col3 from bigtable2
数据库的导入导出:http://iiaf.iteye.com/blog/959549 http://www.cnblogs.com/xuejie/archive/2013/01/11/2856911.html
mysql自动备份:http://os.51cto.com/art/201305/395486.htm
http://www.111cn.net/database/mysql/52707.htm
数据导入导出常用命令 http://www.csdn.net/article/2011-01-17/290283
数据备份的mysqldump http://database.51cto.com/art/201005/202724.htm