mysql_upgrade 是 MySQL 提供的一个重要工具,用于在升级 MySQL 版本后执行数据库和表的检查与更新,确保系统正常运行。其主要功能包括:
- 系统表检查与更新:mysql_upgrade 会检查并更新 MySQL 系统数据库中的表(如 mysql 数据库中的用户权限表),确保它们与当前 MySQL 版本兼容。
- 用户表检查与更新:对用户自定义的表进行结构检查,确保表结构适应 MySQL 新版本的要求,例如处理数据类型的变化等。
- 存储引擎调整:在升级过程中,mysql_upgrade 会检测并根据需要更新表的存储引擎,使其与新版本兼容。
- 信息收集与报告:mysql_upgrade 生成详细的升级报告,帮助用户了解升级进程及数据库状态。
使用方法
mysql_upgrade 的基本语法如下:
css
<button class="flex gap-1 items-center py-1">复制代码</button>
mysql_upgrade [options]
常用选项包括:
-u
或--user
:指定 MySQL 用户名。-p
或--password
:指定 MySQL 用户密码。--host
:指定 MySQL 服务器主机地址。--port
:指定 MySQL 服务器端口。
操作步骤
-
停止 MySQL 备控服务:在主从架构中,建议优先升级从节点,以减少对生产环境的影响。
-
升级准备:
- 备份二进制包和数据。
- 根据要升级的 MySQL 版本,调整配置参数。
-
替换二进制包并运行 mysql_upgrade:
- 启动新版本的 MySQL 后,运行
mysql_upgrade
,并检查升级日志。对于 MySQL 8.0.16 及之后的版本,mysql_upgrade 不再需要手动调用,MySQL 会自动执行相应的操作。 - 例如:
csharp<button class="flex gap-1 items-center py-1">复制代码</button>[root@mysql ~]# mysql_upgrade -u root -pYourPassword -S /mysql/data/3306/mysql.sock[root@mysql ~]# mysql_upgrade -uroot -pxxxxx -S /mysql/data/3306/mysql.sock
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Upgrading system table data. #升级系统表数据
Checking system database. #检查系统数据库(升级系统数据库sys、mysql、performance_schema、information_schema)
mysql.columns_priv OK
mysql.component OK
mysql.db OK
mysql.default_roles OK
mysql.engine_cost OK
mysql.func OK
mysql.general_log OK
mysql.global_grants OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.password_history OK
mysql.plugin OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.role_edges OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
Found outdated sys schema version 1.5.2.
Upgrading the sys schema.
Checking databases. #检查数据库
itpuxdb.bm OK
itpuxdb.dd OK
itpuxdb.dq OK
itpuxdb.gj OK
itpuxdb.gw OK
itpuxdb.itpux11 OK
itpuxdb.itpux12 OK
itpuxdb.itpux_m1 OK
itpuxdb.itpux_m5 OK
itpuxdb.itpux_obj OK
itpuxdb.itpux_sales OK
itpuxdb.itpux_yg OK
itpuxdb.jl OK
itpuxdb.yg OK
sys.sys_config OK
Upgrade process completed successfully.
Checking if update is needed.典型的输出日志包括:
- 升级系统表数据(如
mysql.user
表等)。 - 检查并升级系统数据库(如 sys、mysql、performance_schema、information_schema)。
- 对用户数据库进行结构检查并升级。
- 启动新版本的 MySQL 后,运行
-
重启 MySQL:确保新版本 MySQL 启动正常。
-
检查数据库状态:登录 MySQL,检查数据库表结构、数据同步状态等是否正常。
-
主从切换:在完成从库升级后,主库执行主从切换,继续重复上述步骤升级剩余从库。
-
集群检查:所有节点升级完成后,切换回原主库,检查集群运行状态。
注意事项
- 数据备份:在执行升级操作前,一定要备份所有数据,避免因升级失败导致的数据丢失。
- 权限问题:mysql_upgrade 通常需要以具有足够权限的用户身份执行,确保对所有数据库和表具有操作权限。
- 时间消耗:对于大型数据库或复杂结构,升级可能需要较长时间,应提前做好预估和准备。
通过优化后的步骤,可以减少 MySQL 升级中的风险,提高操作效率,同时确保数据库的兼容性与稳定性。