mysql多实例下用socket直连需指定-s路径、确保目录执行权限、禁用--opt、调大max-allowed-packet、处理跨版本认证插件差异,并手动同步权限表与definer。

MySQL多实例下如何用socket直连跳过网络层
多实例环境下,mysqldump 默认走 TCP(哪怕本地),会触发防火墙、SELinux、bind-address 限制,还多一层网络栈开销。直接走 Unix socket 能绕过这些,前提是目标实例启用了 socket 文件且权限可读写。
实操要点:
- 确认源/目标实例的
socket路径:查my.cnf中socket配置项,或执行mysql -u root -e "SELECT @@socket;" - 迁移命令不加
-h或显式指定-S /path/to/mysql.sock,否则仍走 TCP - 用户权限必须对 socket 文件所在目录有执行权限(
chmod o+x /var/lib/mysql类路径),否则报错Can't connect to local MySQL server through socket - 若目标实例监听多个 socket(如不同版本共存),务必核对
mysql客户端默认读取的socket路径是否匹配目标实例
mysqldump + socket 管道迁移时为什么卡住或中断
常见现象是数据量稍大(>100MB)就 hang 在中间,或者报 ERROR 2013 (HY000)。本质是管道缓冲区溢出 + socket 连接超时叠加导致。
关键调整点:
- 禁用
mysqldump的--opt(默认开启),改用--skip-opt --single-transaction --no-autocommit,避免锁表和大事务撑爆 buffer - 在
mysql导入端加--max-allowed-packet=512M和--net-buffer-length=1M,否则大 INSERT 会被截断 - 不要用
pv或gzip套在管道中间——它们会阻塞 socket 的流控反馈,导致 mysqld 主动 kill 连接 - 推荐写法:
mysqldump -S /src.sock -u user db | mysql -S /dst.sock -u user db,全程不落地、不压缩、不缓冲
跨版本多实例迁移时 socket 兼容性陷阱
MySQL 5.7 和 8.0 的 socket 协议不完全兼容,尤其涉及认证插件(caching_sha2_password vs mysql_native_password)。即使 socket 文件路径正确,也会报 Authentication plugin 'caching_sha2_password' cannot be loaded。
解决方式很直接:
- 检查源库用户认证方式:
SELECT user, host, plugin FROM mysql.user WHERE user='xxx'; - 若目标实例是 5.7 或低版本客户端,需提前把用户 plugin 改为
mysql_native_password:ALTER USER 'xxx'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd'; - 不能只改
default_authentication_plugin配置,已有用户不会自动更新 plugin 字段 - 注意:8.0 默认关闭
mysql_native_password插件,需在my.cnf加plugin-load-add = auth_socket.so(仅限 socket 认证场景)或启用对应插件
为什么用 socket 迁移后某些表数据不一致
不是传输失败,而是 mysqldump 默认不 dump mysql 系统库里的权限表(user、db 等),也不处理存储过程、事件、函数的 DEFINER 权限上下文。这在多实例共用一套账号体系时特别危险。
必须手动补全:
- 权限同步:用
mysqldump --no-create-info --no-data --compact mysql user db procs_priv单独导出,再导入目标实例 - DEFINER 问题:加
--skip-definer参数,或导入前用sed -i 's/DEFINER=`[^`]*`@`[^`]*`//g'清洗 SQL - EVENT、FUNCTION、PROCEDURE 默认不导出,需显式加
--routines --events - 注意:
--routines会导出 DEFINER,如果目标实例没有对应用户,导入会失败,得先建用户或改 DEFINER
socket 迁移快是事实,但快的前提是两边实例的认证机制、系统表结构、SQL mode 完全对齐——漏掉任意一项,表面成功,实际埋雷。











