在将 Ubuntu 12.04(Precise Pangolin)升级到 16.04(Xenial Xerus)后,Nginx、MySQL、PHP 等常用服务通常需要进行一定程度的重新配置或调整,但并非所有配置都需要完全重写。具体取决于你的原有配置方式、自定义程度以及升级过程中是否触发了配置文件变更。
以下是关键点和注意事项:
1. 配置文件可能已被更新
Ubuntu 的包管理器在重大版本升级时,有时会替换默认配置文件(尤其是当上游软件有新安全策略或语法变更时)。例如:
- Nginx:
nginx.conf中的worker_processes、events块或http块结构可能有变化;某些旧模块(如fastcgi_pass的写法)在新版中已弃用。 - PHP:从 PHP 5.x(12.04 默认)升级到 PHP 7.x(16.04 默认),导致:
php.ini中的指令变化(如register_globals被移除、display_errors默认关闭等);- 扩展命名和加载方式改变(如
mysql_*函数已彻底移除,必须使用mysqli或PDO); - FPM 配置路径和参数不同(如
pm.max_children需根据内存重新计算)。
- MySQL:12.04 使用 MySQL 5.5,而 16.04 默认是 MySQL 5.7,存在:
- 密码认证插件变化(
caching_sha2_passwordvsmysql_native_password); - SQL 模式变更(如严格模式更严格);
- 配置文件语法差异(如
innodb_buffer_pool_size单位建议改为 MB)。
- 密码认证插件变化(
2. 服务依赖和启动方式变化
- Ubuntu 12.04 使用 Upstart,而 16.04 全面转向 systemd。虽然 systemd 能兼容部分 Upstart 脚本,但自定义的服务单元文件(
.conf)可能需要重写为.service格式。 - 某些服务的默认端口、日志路径(如
/var/log/nginx/仍存在,但权限或轮转规则可能变)也可能调整。
3. 数据库迁移风险
- 直接升级 MySQL 数据目录可能存在兼容性问题。强烈建议:
- 先备份完整数据库(
mysqldump或物理备份); - 在测试环境验证新版本的兼容性;
- 检查应用代码是否使用了已废弃的 MySQL API(如
mysql_connect())。
- 先备份完整数据库(
4. 推荐操作流程
- 升级前:
- 完整备份系统配置(
/etc/nginx/,/etc/php/,/etc/mysql/)和数据; - 记录当前服务状态、自定义配置和依赖关系。
- 完整备份系统配置(
- 升级后:
- 对比新旧配置文件(使用
diff工具),重点关注标记为#开头的注释变更; - 重启服务并检查日志(
journalctl -u nginx、/var/log/mysql/error.log); - 运行
php --ini和nginx -T确认配置加载无误; - 测试 Web 应用功能(特别是数据库连接、表单提交、动态页面渲染)。
- 对比新旧配置文件(使用
- 必要时:
- 手动调整
php-fpm或nginx虚拟主机配置以适配新语法; - 更新
my.cnf中的性能参数(如query_cache_size在 MySQL 5.7 中已废弃); - 安装缺失的 PHP 扩展(如
php-mysql,php-gd等)。
- 手动调整
总结
✅ 不需要完全重配:基础安装的服务通常可自动适配。
⚠️ 必须检查和调整:因 PHP/MySQL 版本大跨度升级、配置语法变更、安全策略收紧等原因,至少需要人工审核关键配置文件并测试功能。
🔒 最佳实践:切勿在生产环境直接升级!先在克隆环境中验证,再分阶段部署。
💡 提示:如果使用的是 LAMP/LNMP 套件,考虑使用 Ansible/Puppet 等工具管理配置,可大幅降低升级后的维护成本。
CLOUD技术笔记