作为程序员一定要保持良好的睡眠,才能好编程

mysql命令终端如何导入大sql 文件方案

发布时间:2018-08-10

今日在吃完午饭回来后,领导叫住,能否将这个大的sql文件导入到mysql数据库,


那如何到导入呢?之前遇到过这样的问题, 数据库文件特别大,有2个多G,如何导入到mysql中呢,



1、phpMyAdmin

如果直接使用phpMyadmin的话,那是万万不中的,服务器会超时。


其实呢,这也算一种方法,适用于比较小的sql导入。


极有可能会 502

在执行的过程中 报 502 Bad GetWay 了,

 


2、文件复制


由于文件导入的过程中文件比较大,无法通过sql导入了。

把mysql服务器停掉,然后直接复制数据库的文件,压缩后 ,上传到新服务器上。进行解压,配置,然后重新启动服务器。




引出另一个问题:

既然无法导入sql,那么采用工具能否将sql导出呢?   复制mysql的原文件吧。




如果可以导出mysql文件,也建议将数据库比较多的表,进行拆分导出。


由于sql文件比较大,建议直接采用命令行的工具进行导入。


写入MySQL报错超出 max_allowed_packet 的问题。

MySQL会根据配置文件会限制server接受的数据包的大小。如果写入大数据时,因为默认的配置太小,插入和更新操作会因为 max_allowed_packet 参数限制,而导致失败。


因此我们需要对这个数据进行设置:


show.png


这个1048576  是字节  1024*1024=1M    1048576/1024/1024  =1M


max_allowed_packet
 

默认值在不同的 MySQL 版本表现不同,有的版本默认1M,有的版本默认4M。

修改方法1(配置文件持久化修改):
vim /etc/my.cnf
[mysqld]

max_allowed_packet = 100M



第二种方法:


set global max_allowed_packet=500*1024*1024  设置为500M的大小。


这种做法,必须退出当前mysql登录的控制平台。再次进入通过


show variables like '%max_allowed_packet%'  即可查看。



如果你的文件大于500M ,那么你可以设置更大的值来处理。


命令行修改时,不能用M、G,只能这算成字节数设置。配置文件修改才允许设置M、G单位。



然后再次使用 source  mysql.sql 这样的命令去导入。


其实我们上边的做法,只不过是将导入的文件切割成小文件一个一个的导入。



一次性导入多个sql文件


比如说现在我们有3个sql文件,有没有办法,只在命令行中执行一次  source 全部导入呢?


这是可以做到的,


touch all.sql


vim all.sql


all.png


然后使用  source all.sql 这样就同时将  a b c 这三个sql文件导入进去了。



只是提供一种方法,使用 随自己喜欢吧。