一、升级前的准备工作
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
),确保业务连续性。