Mysql导入大sql文件

本文介绍了在MySQL8.0环境下遇到大SQL文件导入问题后,作者通过编写shell脚本实现不挂断后台导入的详细过程,包括使用mysqldumpsplitter脚本拆分、nohup命令保持连接和kill命令管理进程。
摘要由CSDN通过智能技术生成

Mysql导入大sql文件

对于一个10G左右的大sql文件尝试使用Navicat导入,但始终会报错误:MySQL server has gone away,百度得到的回答有说需要在配置文件设置max_allowed_packet、wait_timeout和interactive_timeout的,但在配置文件中添加这些配置并重启服务后问题依旧得不到解决:

max_allowed_packet=2048000M
wait_timeout=288000
interactive_timeout = 288000

三种解决方法

于是另寻方法,以下是三种方法:

1.使用EmEditor将sql文件切割成一个个小文件,再逐个导入

2.使用mysqldumpsplitter脚本将大文件根据表输出成一个个小文件,再逐个导入

shell脚本的获取:https://github.com/kedarvj/mysqldumpsplitter

该脚本的使用可以参考CSDN上的一篇文章:https://blog.csdn.net/weixin_34366546/article/details/91569724

3.编写shell脚本,使用mysql命令导入

Shell脚本导入mysql

第一第二种方式本质都是将文件转为小文件再逐个导入,文件过大的话转成的小文件就比较多,一个个导入还是比较麻烦的,而且本人比较懒,所以我这边最后还是选择使用了第三种方式导入

个人环境:Centos7 mysql8.0

首先编写shell脚本:

#变量定义  
sqlname="khub.sql"     #sql文件的文件名
dir="/opt/sqlfile"     #sql文件所在路径
host="127.0.0.1"       #要导入的mysql所在数据库
user="root"            #mysql数据库用户名
passwd="password"      #mysql数据库密码
dbname="khub"          #mysql数据库db
  
#导入sql文件到指定数据库  
mysql -h$host -u$user -p$passwd --force $dbname < $dir/$sqlname

以不挂断方式+后台运行脚本

考虑到因为是SSH远程连接到Linux服务器上,可能会因为网络原因导致连接中断,而且个人电脑也不可能一直开着,所以这边使用nohup命令和&命令去执行脚本(nohup保证不挂断运行,&则是后台运行):

[root@localhost sqlfile]# nohup ./khubimport.sh >> khubim.log 2>&1 &
[1] 26120

其中 >> khubim.log 是将运行脚本过程中出现的信息输出到日志中,之后只需要静静等待就行了。

这时候可以通过jobs命令查看后台进程:

[root@localhost sqlfile]# jobs -l
[1]+ 26120 运行中               nohup ./khubimport.sh >> khubim.log 2>&1 &

但是jobs命令只能查看当前终端的进程,我们可以通过ps -ef查看mysql进程:

[root@localhost ~]# ps -ef|grep mysql
root      8009     1  0 15:52 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
mysql     8257  8009 12 15:52 ?        00:06:55 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/usr/local/mysql/data/error.log --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --port=3306
root     26123 26120  8 16:45 pts/0    00:00:03 mysql -h127.0.0.1 -uroot -px xxxxxx --force khub2
root     26376 24897  0 16:46 pts/1    00:00:00 grep --color=auto mysql

其中这边的26123进程即为通过nohup启动的进程,即使将当前终端关闭,进程依旧存在,如果想要停止进程可以使用kill命令直接终结:

kill -9 26123

shell脚本参考文章:https://blog.csdn.net/white__cat/article/details/27836481

nohup命令参考文章:https://www.cnblogs.com/yunwangjun-python-520/p/10713564.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值