昨天晚上明月给三个网站做迁移,在导出导入MySQL数据库到新服务器上 MariaDB 的时候折腾了好长的时间,碰到的错误也是一个接着一个的,虽然一个一个都解决了,但是明月感觉还是很有必要记录分享一下的。

0-l46411312.jpg

首先给大家先说明一下具体的导入导出场景,三个网站分别在不同的阿里云虚拟主机上,以为业务发展需要三个网站都需要HTTPS支持和更加稳定的服务器,新服务器选的是阿里云ECS的,配置还是很不错哦的,所以直接上的是Linux+Nginx+PHP+MariaDB这样的LNMP生产环境。

导入MySQL数据报错:1064

问题就出在虚拟主机上导出的MySQL备份.sql文件上,在新服务器上导入总是提示“ERROR 1064 (42000): You have an error in your SQL syntax1”这样的错误,检查了好久才发现是虚拟主机上导出的.sql文件都是 UTF+BOM 格式的文件,这就造成直接在phpMyAdmin里导入就会出现无法识别.sql里的编码的问题,MySQL提示的也就是“语法问题”了。

解决办法

解决其实很简单,就是将这个导出的.sql文件使用纯文本编辑软件打开以 UTF 无签名的格式再保存覆盖一下即可正常的导入了。

这个问题目前明月就在阿里云虚拟主机上碰到过,这个可能跟阿里云虚拟主机默认数据库管理用的是 DMS 的缘故,使用phpMyAdmin估计就没有这个问题了。

导入MySQL数据报错:1153终止导入

这个错误一般都是造成数据导入不完整,因为是错误造成“终止导入”了。报错“1153 - Got a packet bigger than 'max_allowed_packet' bytes”。一般都是因为当MySQL客户端或mysqld服务器收到大于max_allowed_packet字节的信息包时,将发出“信息包过大”错误,并关闭连接。对于某些客户端,如果通信信息包过大,在执行查询期间,可能会遇到“丢失与MySQL服务器的连接”错误。

客户端和服务器均有自己的max_allowed_packet变量,因此,如你打算处理大的信息包,必须增加客户端和服务器上的该变量。一般情况下,服务器默认max-allowed-packet为1MB。

解决办法

其中net_buffer_length参数也会影响到这个错误的出现,所以要跟max_allowed_packet一起来修改,可以通过编辑MySQL的配置文件my.cnf(具体位置默认是/etc/my.cnf),修改里面对应的参数值就可以了,然后保存退出重启MySQL。

但是明月这样竟然没有效果,没有办法只能是使用下面的MySQL命令行来设置这两参数了,如下:

mysql -u root -p
set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;
quit

这样再导入就可以顺利完成了,完美的导入数据!造成这个错误一般都是因为导入的数据量过大,超出了max_allowed_packet和net_buffer_length的默认值触发的,所以在导入大量记录的MySQL数据的时候一定要提前调整好这两个参数的赋值以备不测,一般只要数据记录超过2万条以后一定要注意提前修改默认赋值。

最后再吐槽一下LNMP1.5里集成的acme.sh脚本,问题实在是太多了,使用DNS API模式申请证书都是提示“无效主机域名”,前前后后测试了N遍都是这个问题,我自己的服务器上使用的是 GitHub 上的acme.sh就完全没有问题,三个站点的Let's Encrypt证书全部一次就申请成功,无解中……。

最后修改:2018 年 04 月 03 日
如果觉得我的文章对你有用,请随意赞赏