跳至主要內容

MySQL大数据导入

LiuSongLing大约 3 分钟mysqlmysqldataImportdataExport

工作中难免遇到数据分析、数据迁移等场景,这时就需要进行数据转储,此篇文章介绍一种可用的经过实践的 MySQL 大数据导入方法。

提示

上述场景中,运维提供的备份SQL文件或自行备份的数据库文件。

当文件大小大于 1GB 时,市面流行的数据库管理工具(Navicat、DBeaver、MySQL Workbench、SQLyog、DataGrid)都存在导入太慢甚至导入失败的问题。

至于网上的其它方法例如修改缓存大小、通信区间缓存大小等等方法,是自己本地的数据库还好,但当被导入的数据库是生产或者远程数据库,这些方法就不适用了,此篇文章介绍一种可用的经过实践的 MySQL 大数据导入方法。

MySQL大数据导出

使用命令备份数据库,而不是可视化工具,命令如下:

Last login: Mon Dec  4 11:00:35 on ttys001

➜  ~ mysql -u root -p                          # 按下Enter回车键
# 远程数据库使用:mysql -u root -p -h127.0.0.1 -P3306
# - u:用户名
# - p:密码
# - h:服务器主机,可以是IP或域名
# - P:端口号

Enter password:                                 # 输入root用户密码
mysql> mysqldump db_name > filename.sql         # 备份指定数据库到指定文件

# 备份指定数据库到指定文件(表定义文件和数据文件将分开独立备份如:a.sql a.txt b.sql b.txt)
mysql> mysqldump db_name --tab = /home/downloads 
mysql> exit;

MySQL大数据导入

执行命令如下:

Last login: Mon Dec  4 11:00:35 on ttys001

➜  ~ mysql -u root -p                   # 按下Enter回车键
Enter password:                         # 输入root用户密码
mysql> use db_name;                     # 使用指定数据库

mysql> set names utf8;                  # 设置编码格式,防止乱码(可不执行)
mysql> set unique_checks = 0;           # 关闭唯一性校验
mysql> set Autocommit = 0;              # 关闭事务提交模式

mysql> source /home/downloads/xxxx.sql  # 导入大数据文件(文件路径为绝对路径),末尾没有分号

mysql> set unique_checks = 1;           # 开启唯一性校验
mysql> set Autocommit = 1;              # 开启事务提交模式

mysql> exit;

拓展

查找资料过程中,了解到 MySQL 支持多种导入方式,下面的它们的适用场景:

  • mysqldump:导出的是SQL语句,而不是数据本身,所以导入时效率略低,但胜在整库,多个库,多个表一起导出,适合整库的转储。

  • select into outfile + load data:导出的是纯数据,导入时效率高,适合单个大表的转储。

  • mysql批处理 + load data:导出的是纯数据,而且使用SQL语句选择数据,灵活性高,导入效率也高。