You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Ubuntu 18.04 LTS升级至20.04 LTS时MySQL服务器平滑迁移方案问询

Ubuntu 18.04 LTS升级至20.04 LTS时MySQL服务器平滑迁移方案问询

我完全懂你的无奈——从Ubuntu 18.04升级到20.04时MySQL故障的问题确实在社区里随处可见,很多人都找不到明确的解决方案,你之前折腾一天最后回滚的经历太折腾了,还好有VPS快照备份兜底,这点真的要反复敲黑板提醒所有人!

下面是一套经过验证的、能让MySQL在系统升级过程中平滑过渡的步骤,分阶段帮你避开坑:


一、升级前的核心准备工作(绝对不能省)

  • 单独备份MySQL全量数据:别只依赖VPS快照,单独导出MySQL所有数据是双重保障。执行以下命令:
    mysqldump -u root -p --all-databases --flush-privileges --routines --triggers --events > full_mysql_backup_$(date +%Y%m%d).sql
    
    输入MySQL root密码后,会生成包含所有数据库、用户权限、存储过程、触发器的备份文件,把它下载到本地或者其他安全存储位置。
  • 确认当前MySQL版本:Ubuntu 18.04默认搭载MySQL 5.7,而20.04默认是MySQL 8.0,两者有关键兼容性差异(比如默认认证插件从mysql_native_password改为caching_sha2_password),提前明确这点能避免后续踩坑。
  • 把现有MySQL更到最新补丁版:升级系统前先把当前MySQL的所有更新包打满,减少版本断层风险:
    sudo apt update && sudo apt upgrade mysql-server mysql-client -y
    

二、系统升级过程中的MySQL专属操作

  1. 先完成常规系统更新,但临时锁定MySQL包避免自动升级

    sudo apt update && sudo apt upgrade -y
    # 标记MySQL相关包暂不升级,防止系统升级过程中强制替换版本
    sudo apt-mark hold mysql-server mysql-client mysql-common
    
  2. 执行Ubuntu发行版升级:

    sudo do-release-upgrade
    

    ⚠️ 关键提醒:升级过程中如果弹出是否替换MySQL配置文件(比如my.cnfmysql.cnf),一定要选择保留本地现有配置(keep the local version currently installed),不要直接用新的默认配置,否则会触发大量兼容性问题。

  3. 系统升级完成后,解除MySQL锁定并适配20.04的MySQL 8.0:

    sudo apt-mark unhold mysql-server mysql-client mysql-common
    # 安装20.04官方适配的MySQL 8.0包
    sudo apt install mysql-server-8.0 mysql-client-8.0 -y
    
  4. 运行MySQL官方升级工具,自动处理数据文件兼容性:

    sudo mysql_upgrade -u root -p
    

    输入MySQL root密码后,工具会自动检查并升级MySQL 5.7的数据文件,使其适配8.0的存储格式,这一步是确保数据能正常读取的关键。


三、升级后的验证与兼容性适配

  • 检查MySQL服务状态
    sudo systemctl start mysql
    sudo systemctl status mysql
    
    如果输出显示active (running),说明服务已正常启动。
  • 处理认证插件兼容问题:如果你的应用程序还在使用旧的mysql_native_password认证方式,需要做以下适配:
    方式一:全局修改默认认证插件(适合所有旧应用)
    编辑MySQL配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]段添加:
    default_authentication_plugin=mysql_native_password
    
    然后重启MySQL服务:
    sudo systemctl restart mysql
    
    方式二:单独修改特定应用用户的认证方式(更灵活)
    登录MySQL后执行:
    ALTER USER 'your_app_username'@'your_app_host' IDENTIFIED WITH mysql_native_password BY 'your_user_password';
    FLUSH PRIVILEGES;
    
  • 验证数据完整性:登录MySQL检查所有数据库是否正常,随便找个业务库执行查询语句,确认数据没有丢失或损坏:
    mysql -u root -p
    
    执行SHOW DATABASES;确认库列表,再用USE your_database; + SELECT * FROM your_table LIMIT 10;验证数据可正常读取。

四、应急排查方案(如果升级后MySQL启动失败)

  • 查看错误日志定位问题
    sudo tail -n 50 /var/log/mysql/error.log
    
    常见问题包括配置文件语法错误、数据文件权限问题、InnoDB日志格式不兼容等,日志会给出明确的错误提示。
  • 临时修复InnoDB启动故障:如果是InnoDB日志兼容性问题,可以临时修改配置文件/etc/mysql/mysql.conf.d/mysqld.cnf,在[mysqld]段添加:
    innodb_force_recovery = 1
    
    启动MySQL成功后,再移除这个参数,重新运行sudo mysql_upgrade -u root -p修复数据。

备注:内容来源于stack exchange,提问作者João Pimentel Ferreira

火山引擎 最新活动