MySQL数据库迁移迅速导出导入大量数据
数据库迁移是我们经常可碰到的题目,关于少量的数据,迁移根本上不会有什么题目。生产环境中,有下列状况需要做迁移工作:
- 磁盘空间不足。比方一些老项目,选用的机型并不一定适用于数据库。随着工夫的推移,硬盘很有可能涌现短缺;
- 业务涌现瓶颈。比方项目中采纳单机负担所有的读写业务,业务压力增大,不堪重负。要是 IO 压力在可承受的范畴,会采纳读写别离方案;
- 机器涌现瓶颈。机器涌现瓶颈主要在磁盘 IO 能力、内存、CPU,此时除了针对瓶颈做一些优化之外,选中迁移是不错的方案;
- 项目革新。某些项目的数据库存在跨机房的状况,可能会在不一样机房中添加节点,或者把机器从一个机房迁移到另一个机房。再比方,不一样业务共用统一台服务器,为了缓解服务器压力以及利便保护,也会做迁移。
MySQL迁移平常运用的有三种要领:
1、数据库直接导出,拷贝文件到新服务器,在新服务器上导入。
2、运用第三方迁移工具。
3、数据文件和库表构造文件直接拷贝到新服务器,挂载到一样配置的MySQL服务下。
第一种方案的长处:会重建数据文件,减少数据文件的占用空间,兼容性最佳,导出导入很少产生题目,需求灵活。缺陷:运用传统导出导入工夫占用长。
第二种方案的长处:设置完成后传输无人值守,主动完成。缺陷:不足灵活,设置繁琐,传输工夫长,异样后很难从异样的位置继续传输。
第三种方案的长处:工夫占用短,文件可断点传输,操纵步骤少。缺陷:新旧服务器中MySQL版本及配置必须雷同,可能引起未知题目。
假设数据库迁移是由于业务瓶颈或项目革新等需要变动数据表构造的(比方分区分表),我们便只能运用第一种要领了。
运用MySQL的SELECT INTO OUTFILE 、LOAD DATA INFILE迅速导出导入数据
LOAD DATA INFILE
语句从一个文本文件中以很高的速度读入一个表中。MySQL官方文档也注明了,该要领比一次性插入一条数据机能快20倍。
当会员一前一后地运用SELECT ... INTO OUTFILE
和LOAD DATA INFILE
将数据从一个数据库写到一个文件中,然后再从文件中将它读入数据库中时,两个下令的字段和行处置选项必须匹配。否则,LOAD DATA INFILE 将不能准确地解释文件内容。
下面是一个项目的例子,MySQL由windows平台迁移到Linux平台,数据总量12G
Windows平台导出数据:
tables.txt是保留数据表名称的文件,通过从文件中读取数据表名称,轮回导出所有表:要是历程中摄及到分表,可依据分表法则修改导出的sql语句和批处置代码,非常灵活。
@echo off & setlocal enabledelayedexpansion for /f %%i in (tables.txt) do ( set table=%%i echo "dump table -- !table! --" mysql -uroot -p12345678 codetc_old -e "SELECT * INTO OUTFILE 'F:/MySQL/Uploads/!table!.txt' FIELDS TERMINATED BY ',' FROM !table!" ) pause
Linux平台导入数据:
#!/bin/bash while read line do mysql -uroot -p12345678 codetc_new -e "LOAD DATA INFILE '/var/lib/mysql-files/$line.txt' INTO TABLE $line FIELDS TERMINATED BY ','" done < tables.txt
数据导入以前需在新机器上创建表构造,12G的数据导出用时3分钟左右,导入用时4分钟左右(施行工夫依据机器的配置会有所不一样,不拥有参考价值)
总结
以上就是这篇文章的全部内容了,但愿本文的内容对大家的学习或者工作拥有一定的参考学习价值,感谢大家对脚本之家的支撑。要是你想理解更多相干内容请查看下面相干链接