一、升级前的准备工作
mysqldump工具备份所有数据库(包括mysql系统库,存储用户权限),确保数据可恢复。示例命令:mysqldump -u root -p --all-databases > /path/to/full_backup.sql。也可选择物理备份(直接复制数据目录,如/var/lib/mysql/),但需停止MySQL服务以保证数据一致性。mysql -V或登录MySQL执行SELECT VERSION();确认当前版本;确认操作系统(如Ubuntu 22.04/CentOS 7)、架构(x86_64)与新版本兼容;查阅MySQL官方升级文档,确认升级路径(如5.7→8.0需先升级至5.7的最新小版本,再升级至8.0,禁止跨多代大版本直接升级)。/etc/my.cnf或/etc/mysql/mysql.conf.d/mysqld.cnf),对比新版本默认配置(如my-default.cnf),调整废弃参数(如query_cache_size在8.0中已移除)或新增参数(如innodb_buffer_pool_size建议设置为物理内存的70%-80%)。二、常见安装方式的升级步骤
sudo systemctl stop mysql,确认状态:sudo systemctl status mysql(需显示“inactive”)。wget https://dev.mysql.com/get/mysql80-community-release-el7-6.noarch.rpm,然后sudo rpm -ivh mysql80-community-release-el7-6.noarch.rpm;APT源类似),再执行sudo apt update(Ubuntu)或sudo yum update(CentOS)。sudo apt upgrade mysql-server(Ubuntu)或sudo yum update mysql-server(CentOS),包管理器会自动处理依赖与文件替换。sudo systemctl start mysql;登录MySQL执行mysql_upgrade -u root -p(自动检查并修复系统表结构,如mysql.user表的权限字段)。sudo systemctl stop mysql。mysql-8.0.37-linux-glibc2.28-x86_64.tar.xz),解压至目标目录(如/usr/local/mysql):tar -xf mysql-*.tar.xz -C /usr/local/,重命名:mv /usr/local/mysql-* /usr/local/mysql。/var/lib/mysql/)和配置文件;将新版本的bin、lib等目录复制到旧版本路径(保留数据目录与配置文件):cp -r /usr/local/mysql/bin/* /usr/bin/(可选,更新命令路径);cp -r /usr/local/mysql/support-files/* /etc/(可选,更新配置模板)。sudo systemctl start mysql;登录MySQL执行mysql_upgrade -u root -p,完成后重启服务:sudo systemctl restart mysql。docker stop mysql_old(容器名需替换为实际名称)。docker pull mysql:8.0.37(替换为目标版本)。docker run -d --name mysql_new -v /path/to/old/data:/var/lib/mysql -v /path/to/old/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=your_password mysql:8.0.37(挂载旧数据卷与配置卷,确保数据不丢失)。docker exec -it mysql_new mysql -uroot -p,执行SELECT VERSION();确认版本,检查表结构是否兼容。三、升级后的关键操作
mysql_upgrade -u root -p(部分包管理器会自动执行,但手动执行更可靠),该工具会检查mysql系统表的兼容性并修复问题。sudo systemctl restart mysql,确保所有升级后的配置与表结构生效。/var/log/mysql/error.log或journalctl -u mysql),确认无报错;登录MySQL执行常用查询(如SHOW DATABASES;、SELECT * FROM table_name LIMIT 1;),验证功能正常。full_backup.sql),释放磁盘空间。四、注意事项
sql_mode中的NO_AUTO_CREATE_USER),需修改配置文件(my.cnf)移除或替换为兼容参数,避免启动失败。auth_socket)或存储引擎(如MyISAM在8.0中的限制)可能在新版本中变更,需提前检查并调整(如将MyISAM表转换为InnoDB)。mysql -u root -p < full_backup.sql),并重启旧版本服务(sudo systemctl start mysql),确保业务连续性。