今日在吃完午饭回来后,领导叫住,能否将这个大的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 参数限制,而导致失败。
因此我们需要对这个数据进行设置:
这个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
然后使用 source all.sql 这样就同时将 a b c 这三个sql文件导入进去了。
只是提供一种方法,使用 随自己喜欢吧。