Amygo
作者Amygo·2019-06-21 18:02
DBA·分布式事务数据库

【小白福利—初级DBA入门必看】MySQL常用工具介绍(四)——客户端工具MySQL_upgrade

字数 6876阅读 1461评论 0赞 2

上一篇为大家更新了MySQL客户端常用工具,这次为大家继续更新upgrade的相关操作内容。

1 简介

每次升级mysql都应执行mysql_upgrade,它会查找当前版本与升级版本的不兼容性:
①升级mysql架构的系统表,以便你能使用可能已添加的新权限或功能。
②升级性能库和sys库
③检查user schemas
若mysql_update发现某个表可能存在不兼容性,则会执行表检查,如果发现问题,则尝试进行修复。若无法修复,请参考官网第2.11.12节“重建或修复表或索引”以手动修复表。
其工作原理是:mysql_upgrade直接与服务器通信,向其发送执行升级所需的sql语句。要像这样使用mysql_upgrade:
①保证服务器运行;
②调用upgrade升级mysql库中的系统表,并检查和修复其他库。
shell> mysql_upgrade [options] #选项从[mysql_upgrade]和[client]组读取
④停止并重启服务器以使系统表的任何改变生效。
注意:
若你使用disabled_storage_engines系统变量禁用了某些引擎如myisam,upgrade可能报错失败,如mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled (Table creation is disallowed).
除非以–upgrade-system-tables 选项调用mysql_upgrade ,否则它会处理所有表。当某个表被处理时被锁定,故不能被其他会话获得。表检查使用 CHECK TABLE … for upgrade语句。
mysql_upgrade用当前mysql版本标记所有检查和修复过的表。以保证下次运行upgrade时能决定是否需要再次检查修复。

upgrade将版本号保存到数据目录的mysql_upgrade_info文件中。用来快速检查是否所有的表已经检查到该版本以使表检查可以跳过。使用–force可以忽略该文件并执行检查。

从5.7.2始,upgrade检查mysql.user表,设置每个为空的plugin列为 ‘mysql_native_password’ 或’mysql_old_password’(取决于password列值的列散格式)。5.7.5时,不支持pre-4.1密码列散,故若凭证使用和native插件兼容的列散格式,则设置为’mysql_native_password’。pre-4.1格式必须手动升级。see Section 6.4.1.3, “Migrating Away from Pre-4.1 Password Hashing and the mysql_old_password Plugin”.

upgrade不升级时区表集、帮助表集。

从5.7.7始,除非启用–skip-sys-schema ,否则upgrade在sys没有安装时安装sys,并将其升级到当前版本。若sys存在但没有一个sys.version视图(假定该丢失意味着用户自创库)则会报错。要修复该问题,将sys重命名或删除等。

从5.7.9始,upgrade检查使用一般分区处理器创建的innodb表分区,并尝试将他们升级到本地分区(在5.7.6始使用)。(bug #76734,bug #20727344)此外,你也可以ALTER TABLE … UPGRADE PARTITIONING单独升级这些表。
重要:5.7.12开始, mysqld的–early-plugin-load 默认为空。要加载keyring_file插件,必须显示指定–early-plugin-load 为非空值。而在5.7.11,默认–early-plugin-load是keyring_file插件库文件的名字,故插件默认加载。innodb表空间加密要求keyring_file在innodb初始化前载入,故默认值的改变给5.7.11到5.7.12及更高版本引入了不兼容。加密了innodb表空间的管理员必须显示指定–early-plugin-load选项以保证插件能正确加载。更多信息见 官网Section 6.4.4, “The MySQL Keyring”.

重要:若从5.7.2之前的版本升级到5.7.2及更高,mysql.user表的改变导致要使用mysql_upgrade必须执行一些特殊的步骤。见Section 2.11.3, “Changes in MySQL 5.7”.
注意:在windows上必须使用管理员权限运行mysql_upgrade。
警告:应当总是在升级mysql前先备份当前数据库。一些升级不兼容性可能需要在更新mysql前特殊处理。 See Section 2.11, “Upgrading MySQL”。

2 选项介绍与部分选项举例说明

注意:这里的默认值,不是使用“程序名 --no-defaults --help”打印的输出,而是指未指定时内部初始值,该值可被自身选项显示指定,也可能会受其他互斥选项、相关选项更改。这里只写出默认启用的布尔型选项,以及有内部值的其他选项。有内部值的选项可以不显示给出。
2.1 所有客户端共有选项

2.1.1 影响选项文件读取的选项
yk9v88p9kva

yk9v88p9kva

2.1.2 帮助与版本
dgn07ziv1g6

dgn07ziv1g6

2.1.3 连接的建立
utf3sh2dg7

utf3sh2dg7

sjwmggf737

sjwmggf737

连接方式参数说明:优先级–protocol>–pipe>-h;
linux两种连接方式:若未指定–host和-h,或指定为localhost,或指定为空(–host=或–host=’’),则使用unix套接字;否则使用tcp/ip。
windows三种连接方式:若未指定–host和-h,或指定为localhost,且服务端开启了共享内存,则使用共享内存;若指定为.,或tcp禁用且socket未指定或主机指定为空(–host=),则使用命名管道;否则tcp。
连接方式举例
全平台使用tcp/ip:
mysql --protocol=tcp [-h127.0.0.1] [–port=3306]
mysql -h127.0.0.1 [–port=3306]

unix使用socket:
mysql [–host=localhost] [–socket=/tmp/mysql.sock]

windows使用命名管道:需在服务端开启命名管道支持

mysql --protocol=pipe
mysql --pipe
mysql --host=.

windows使用共享内存:未知,存在问题。理论上应当在服务上开启共享内存后使用
mysql [–host=localhost] --shared-memory-base-name=MYSQL,但是实际上使用的tcp,或者
mysql --protocol=memory --shared-memory-base-name=MYSQL,但是会报错ERROR 2046 (HY000): Can’t open shared memory; cannot send request event to server (5);

2.1.4 字符集
a5z9535n4t

a5z9535n4t

2.1.5 调试日志
zrr4sa3686

zrr4sa3686

2.2 mysql_upgrade特定选项
5aak25wzr2t

5aak25wzr2t

3 常见用法举例:省略连接选项

3.1 默认升级全实例,首次升级时,打印检查信息

C:\\\\Users\\\\Administrator>mysql_upgrade
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  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.plugin                                       OK
mysql.proc                                         OK
mysql.procs_priv                                   OK
mysql.proxies_priv                                 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
The sys schema is already up to date (version 1.5.1).
Checking databases.
clientoptions.mysql                                OK
clientoptions.mysqladmin                           OK
clientoptions.mysqlcheck                           OK
clientoptions.mysqldump                            OK
clientoptions.mysqlimport                          OK
clientoptions.mysqlpump                            OK
clientoptions.mysqlshow                            OK
clientoptions.mysqlslap                            OK
sakila.actor                                       OK
sakila.address                                     OK
sakila.category                                    OK
sakila.city                                        OK
sakila.country                                     OK
sakila.customer                                    OK
sakila.film                                        OK
sakila.film_actor                                  OK
sakila.film_category                               OK
sakila.film_text                                   OK
sakila.inventory                                   OK
sakila.language                                    OK
sakila.payment                                     OK
sakila.rental                                      OK
sakila.staff                                       OK
sakila.store                                       OK
sys.sys_config                                     OK
ztd.ztd                                            OK
ztd.ztd2                                           OK
ztd.ztd4                                           OK
Upgrade process completed successfully.
Checking if update is needed.

3.2 再次运行时,因为在数据目录已经存在mysql_upgrade_info存有当前版本号,故此不会再次升级。若想再次升级,则修改该文件或使用–force忽略该文件
C:\\Users\\Administrator>mysql_upgrade
Checking if update is needed.
This installation of MySQL is already upgraded to 5.7.24, use --force if you still need to run mysql_upgrade

如果这篇文章有帮助到你话别忘了浏览一下之前的之前的文章哦~


作者:Amy—go

如果觉得我的文章对您有用,请点赞。您的支持将鼓励我继续创作!

2

添加新评论0 条评论

Ctrl+Enter 发表

作者其他文章

相关文章

相关问题

相关资料

X社区推广