宝塔不支持MySQL主版本覆盖升级,必须卸载5.6、安装5.7、手动迁移数据;需先确认真实datadir和my.cnf路径,用mysqldump导出全库,安装后注释innodb_file_format并调整sql_mode,再导入。

不能直接点“升级”按钮,宝塔不支持 MySQL 主版本覆盖安装;必须卸载 5.6、再装 5.7,并手动迁移数据和配置,否则会启动失败或连接拒绝。
先确认真实数据目录和配置路径
宝塔界面上显示的“数据库路径”常是错的,真正起作用的是 mysqld 进程加载的 --datadir 和 my.cnf。不查清楚就操作,大概率导致 ERROR 2002 (HY000) 或服务起不来。
- 执行
ps aux | grep mysqld,找带--datadir=的那一行,记下实际路径(如/www/server/data/mysql) - 运行
mysql --help | grep "my.cnf",确认生效的配置文件(通常是/www/server/mysql/etc/my.cnf) - 进到
datadir目录里,检查是否存在ibdata1、mysql/、performance_schema/—— 没这些,说明数据可能已被清空或挂载错位
用原版 mysqldump 导出,别拷 data 目录
硬拷贝 data/ 看似快,但 MySQL 5.6 和 5.7 的 mysql.user 表结构、日志格式、系统表字段全变了,直接复制会导致权限系统崩溃、服务卡在启动阶段。
- 先停服务:
service mysqld stop(别只在面板点“停止”,要确保ps aux | grep mysqld返回为空) - 用旧版 mysqldump 导出:
mysqldump -u root -p --all-databases --single-transaction --routines --events > full_backup.sql - 导出后打开
full_backup.sql,删掉开头类似/*!50700 SET sql_mode = ... */的高版本兼容指令(5.6 dump 工具不会加这个,但某些宝塔插件或自定义脚本会)
装 5.7 后必须改两个关键配置项
MySQL 5.7 默认启用更严格的 sql_mode 和 innodb_file_format,不调整就会导致老程序报 Invalid default value for 'xxx' 或建表失败。
- 编辑
/www/server/mysql/etc/my.cnf,注释掉这行:innodb_file_format = Barracuda(改为#innodb_file_format = Barracuda) - 启动 5.7 后立即登录:
mysql -uroot -p,执行:SET GLOBAL sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION';(去掉ONLY_FULL_GROUP_BY和STRICT_TRANS_TABLES可能更兼容,按业务需要取舍) - 如果导入时提示
Authentication plugin 'caching_sha2_password' cannot be loaded,说明 PHP 版本太低(如 7.2/7.3),需进 MySQL 执行:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';
导入前检查 socket 路径和 PHP 客户端匹配
升级完常出现“phpMyAdmin 打不开”“WordPress 连不上数据库”,问题不在 MySQL 本身,而在 PHP 没连对 socket 或客户端不认新认证方式。
- 确认 PHP 使用的 socket 路径:在宝塔「PHP 设置」→「配置文件」里搜
mysqli.default_socket或pdo_mysql.default_socket,应与my.cnf中socket值一致(常见为/tmp/mysql.sock或/www/server/mysql/mysql.sock) - 执行
php -i | grep "mysqlnd",有输出说明用的是 mysqlnd(推荐);若没输出、却有libmysqlclient,建议重装 PHP 并勾选 mysqlnd - 导入数据前,先用命令行验证连通性:
mysql -uroot -p -S /tmp/mysql.sock -e "SHOW DATABASES;",成功了再跑mysql -uroot -p
最容易被忽略的是 innodb_log_file_size 不匹配——5.6 的日志文件(ib_logfile0/ib_logfile1)不能被 5.7 直接复用,必须删掉旧日志再启服务,否则 MySQL 会拒绝启动且 error log 里只报一句 “InnoDB: Unable to lock ./ibdata1”。


















