昨天晚上明月给三个网站做迁移, 在导出导入 MySQL 数据库到新服务器上 MariaDB 的时候折腾了好长的时间, 碰到的错误也是一个接着一个的, 虽然一个一个都解决了, 但是明月感觉还是很有必要记录分享一下的.
首先给大家先说明一下具体的导入导出场景, 三个网站分别在不同的阿里云虚拟主机上, 以为业务发展需要三个网站都需要 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 证书全部一次就申请成功, 无解中.......
来源: https://www.thinksaas.cn/group/topic/839468/