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平台导出数据:
<是保存数据表名称的⽂件,通过从⽂件中读取数据表名称,循环导出所有表:如果过程中摄及到分表,可根据分表规则修改导出的sql语句和批处理代码,⾮常灵活。
@echo off & setlocal enabledelayedexpansion
for /f %%i in () do ( set table=%%i
echo "dump table -- !table! --"
mysql -uroot -p1******* codetc_old -e "SELECT * INTO OUTFILE 'F:/MySQL/Uploads/!table!.txt' FIELDS TERMINATED BY ',' FROM !table!"
)
pause
Linux平台导⼊数据:
mysql帮助文档#!/bin/bash
while read line
do
mysql -uroot -p1******* codetc_new -e "LOAD DATA INFILE '/var/lib/mysql-files/$' INTO TABLE $line FIELDS TERMINATED BY ','"
done <
数据导⼊之前需在新机器上创建表结构,12G的数据导出⽤时3分钟左右,导⼊⽤时4分钟左右(执⾏时间根据机器的配置会有所不同,不具有参考价值)
总结
以上就是这篇⽂章的全部内容了,希望本⽂的内容对⼤家的学习或者⼯作具有⼀定的参考学习价值,
谢谢⼤家对的⽀持。如果
你想了解更多相关内容请查看下⾯相关链接

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。