怎么在MySQL中高效导入多个.sql文件

53次阅读
没有评论

共计 1721 个字符,预计需要花费 5 分钟才能阅读完成。

自动写代码机器人,免费开通

本篇文章给大家分享的是有关怎么在 MySQL 中高效导入多个.sql 文件,丸趣 TV 小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着丸趣 TV 小编一起来看看吧。

1、mysql 命令导入

mysql 命令导入多个 sql 文件方法:

$ for SQL in *.sql; do mysql -uroot -p 123456  mydb   $SQL; done

2、source 命令导入

source 命令需要首先进入 MySQL 命令行:

$ mysql -uroot -p 123456

导入多个 sql 文件需要先创建一个额外的文件,名字随意,这里我们取:all.sql,内容:

source user1.sql
source user2.sql
source user3.sql

注意,这里每行一条,必须以 source 命令开头。

然后用 source 命令执行该文件:

mysql   use mydb;
mysql   source /home/gary/all.sql

3、如何提高导入速度?

对于百 M 级以上文件,如果光这样导入,速度是极其缓慢的,

根据 MySQL 官方建议,我们有几个措施可以极大提高导入的速度,如下:

对于 MyISAM,调整系统参数:bulk_insert_buffer_size(至少单个文件大小的 2 倍以上)

对于 InnoDB,调整系统参数:innodb_log_buffer_size(至少单个文件大小的 2 倍以上,导入完成后可以改回默认的 8M,注意不是 innodb_buffer_pool_size。)

除主键外,删除其他索引,导入完成后重建索引。

关闭自动提交:autocommit=0。(请勿用 set global autocommit=1; 命令来关闭,否则整个 MySQL 系统都会停止自动 commit,innodb log buffer 很快就会爆满,5 和 6 项也请仅在会话中有效,正确做法请往下看)

关闭唯一索引检查:unique_checks=0。(关闭了这一项会影响 on duplicate key update 的效果)

关闭外键检查:foreign_key_checks=0。

insert 值写在一条语句内,如:INSERT INTO yourtable VALUES (1,2), (5,5), …;

有自增列的,设置:innodb_autoinc_lock_mode 的值为 2,

其中,第 1 -2、8 条在修改 my.cnf 文件,然后重启 MySQL:

bulk_insert_buffer_size=2G;
innodb_log_buffer_size=2G;
innodb_autoinc_lock_mode=2;

第 3 条用到的命令:

# 删除索引
DROP INDEX index_name ON talbe_name
ALTER TABLE table_name DROP INDEX index_name
ALTER TABLE table_name DROP PRIMARY KEY
# 添加索引
ALTER TABLE table_name ADD INDEX index_name (column_list)
ALTER TABLE table_name ADD UNIQUE (column_list)
ALTER TABLE table_name ADD PRIMARY KEY (column_list)

第4- 6 条写在.sql 中,批量 bash 脚本如下:

for SQL in *.sql;
 echo $SQL;
 sed -i  1i\SET autocommit=0;\nSET unique_checks=0;\nSET foreign_key_checks=0;  $SQL
 sed -i  $a\COMMIT;\nSET autocommit=1;\nSET unique_checks=1;\nSET foreign_key_checks=1;  $SQL
done

以上就是怎么在 MySQL 中高效导入多个.sql 文件,丸趣 TV 小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注丸趣 TV 行业资讯频道。

向 AI 问一下细节

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-12-04发表,共计1721字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)