共计 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 问一下细节