mysql_upgrade——检查和升级mysql表

1.mysql_upgrade简介

mysql_upgrade检查所有数据库中与mysql服务器当前版本不兼容的所有表。mysql_upgrade也会升级系统表,以便你能使用新添加的权限或功能。如果mysql_upgrade发现一张表可能不兼容,将该表进行检查,如果发现问题,则试图对其进行修复。如果不能修复,则需要人工进行表和索引的重建或修复。每次升级mysql,都需要运行mysql_upgrade。
从mysql5.7.5开始,mysql_upgrade直接与mysql服务器进行通信,向其发送发送特定SQL语句以进行升级。mysql5.7.5前,mysql_upgrade运行mysql和mysqlcheck客户端程序来进行所需的操作。对之前的mysql安装,如果通过rpm包在linux上安装mysql,那么,你必须安装服务器和客户端rpms。mysql_upgrade包括在服务器rpm,但需要客户端rpm,因为其包括mysqlcheck。
2.mysql_upgrade注意事项
1)从mysql5.7.12开始,--ealy-plugin-load默认为空。为了加载keyring_file插件,需要显式使用非空值的--early-plugin-load选项。
mysql5.7.11中,--early-plugin-load值默认为keyring_file插件库文件的名字,因此,插件被默认加载。innodb表空间加密要求innodb初始化前加载keyring_file插件,因此,
从5.7.11升级到5.7.12时该选项默认值的改变将导致不兼容。已经加密innodb表空间的管理员必须显式采取行动以确保继续加载keyring_file插件:那就是用指定值为插件库文件的--early-plugin-load
选项启动服务器。
2)如果你从mysql5.7.2之前的版本升级到mysql5.7.2或更高的版本,mysql.user表的变化需要特定步骤用mysql_upgrade进行升级。
3)windows server2008,vista及更新版本上,必须用administrator权限运行mysql_upgrade。可以administrator运行命令提示符并在其下运行升级命令。
4)升级前应该总是备份当前的mysql安装。某些升级相关的不兼容也许需要升级和运行mysql_upgrade前进行一些特殊处理。

3.使用mysql_grade进行升级

为了使用mysql_upgrade,确信mysql服务器正在运行。接着,可以像如下那样运行以检查和修复表及升级系统表:
shell> mysql_upgrade [options]
为了使系统表的变化起作用,运行mysql_upgrade后,停止并重启mysql服务器。
如果有多个mysql服务器实例在运行,用合适的连接参数运行mysql_upgrade以连接到渴望的服务器。例如:运行在本机3306到3308端口的服务器,通过连接到合适的端口来升级每个实例:
shell> mysql_upgrade --protocol=tcp -P 3306 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3307 [other_options]
shell> mysql_upgrade --protocol=tcp -P 3308 [other_options]
unix上的本机连接,--protocol=tcp选项强制用TCP/IP而非unix套接字文件来连接。
mysql_upgrade处理所有数据库中的所有表,因此,其可能需要很长时间才能完成。每个表处理期间将被锁定且其他会话不可访问。检查和修复操作可能比较耗时,特别是大表。
所有检查和修复的表将被标上当前mysql版本号。这确保下次对该服务器的相同版本运行mysql_upgrade时,可以知道是否有必要在对该表进行检查和修复。
mysql_upgrade也会将mysql版本号存入数据目录下名为mysql_upgrade_info的文件。这将用于快速检查所有表是否已被该版本检查以便跳过表检查。为了忽视该文件且无论如何都进行检查,可以使用--force选项。
从mysql5.7.2开始,mysql_upgrade检查user表数据行,对任何plugin列为空的数据行,将其设置为'mysql_native_password'或'mysql_old_password',这取决于password列值的哈希格式。从mysql5.7.5开始,移去了对pre-4.1口令哈希和mysql_old_password的支持,因此,如果凭据使用与插件兼容的哈希格式,mysql_upgrade将值为空的plugin列设置为'mysql_native_password'。使用pre-4.1哈希的数据行必须手工升级。
mysql_upgrade不会对help表的内容进行升级。
从mysql5.7.7开始,除非以--skip-sys-schema选项运行,否则,如果sys模式未安装,mysql_upgrade将会安装该模式,如果已安装则将其升级为目前版本。如果sys模式已存在且没发现version视图,mysql_upgrade将会返回错误,假设其为用户创建的模式:
Error occurred: A sys schema exists with no sys.version view.
如果用户已经创建了sys模式,为了成功升级,必须重命名该模式。为了升级这种场景,首先移去或重命名已存在的sys模式。
mysql5.7.9及其更高版本,mysql_upgrade会检查用通用分区处理器创建的innodb分区表,并试图将其升级为innodb本地分区(用于mysql5.7.6及其更高版本)。也是从mysql5.7.9开始,可以在客户端用alter table ...upgrade partitioning SQL语句将其升级。
默认的,mysql_upgrade以mysql root用户运行。当你运行mysql_upgrade时root密码已过期,将会返回密码已过期的信息,且mysql_upgrade升级失败。为了纠正该问题,重置root密码并再次运行mysql_upgrade。
首先,以root用户连接mysql服务器:
shell> mysql -u root -p
Enter password: **** <- 这里输入密码
通过合适的工具重置密码。从mysql5.7.6开始,用alter user:
mysql> ALTER USER USER() IDENTIFIED BY 'root-password';
mysql5.7.6之前,用set password:
mysql> SET PASSWORD = PASSWORD('root-password');
退出mysql并再次运行mysql_upgrade:
shell> mysql_upgrade [options]

4.mysql_upgrade相关选项
mysql_upgrade支持如下选项,可以在命令行或在选项文件的[mysql_upgrade]和[client]组指定。
1)--help:显示一个短帮助信息后结束。
2)--basedir=dir_name:mysql的安装路径,该选项在mysql5.7.2中被移去。
3)--bind-address=ip_address:多网卡的计算机上,用该选项用于选择连接mysql服务器的网卡。该选项在mysql5.7.5中被添加。
4)--character-sets-dir=dir_name:安装字符集的目录。
5)--compress, -C:如果客户端和服务器都支持压缩,则压缩客户端和服务器间的所有信息。该选项的-C格式在mysql5.7.5中添加。
6)--datadir=dir_name:数据目录的路径。该选项在mysql5.7.2中被移去。
7)--debug[=debug_options], -# [debug_options]:写调试(debugging)日志。典型的debug_options串为d:t:o,file_name(文件名)。默认为d:t:O,/tmp/mysql_upgrade.trace.
8)--debug-check:程序结束时打印调试信息。
9)--debug-info, -T:程序结束时打印调试信息和内存及CPU使用统计信息。
10)--default-auth=plugin:用于客户端认证插件的hint。
11)--default-character-set=charset_name:用特定字符集名作为默认字符集。
12)--defaults-extra-file=file_name:读全局选项文件后但(unix)用户选项文件前读取该选项文件。如果该文件不存在或不可访问,将会发生错误。如果文件名为相对文件路径而非绝对路径,则其相对当前目录。
13)--defaults-file=file_name:仅用给出的选项文件。如果文件不存在或不可访问,将会报错。如果仅给出相对路径而非绝对路径,则文件名相对于当前目录。
14)--defaults-group-suffix=str:不仅读取惯用的选项组,还读取惯用名和str后缀的选项组。例如:mysql_upgrade通常读取[client]和[mysql_upgrade]组。如果指定了--defaults-group-suffix=_other选项,
则mysql_upgrade也会读取[client_other]和[mysql_upgrade_other]组。
15)--force:即使mysql_upgrade已经在当前mysql版本上执行过,也忽略mysql_upgrade_info文件并强制执行mysql_upgrade。
16)--host=host_name, -h host_namemysql_upgrade:连接到被给主机上的mysql服务器。
17)--login-path=name:从.mylogin.cnf登录路径文件命名的login path组读取选项。“login path”是一个包含确定连接到mysql服务器和登录认证账号的选项的选项组。为了创建和修改登录路径文件,使用
mysql_config_editor工具。
18)--max-allowed-packet=value:用于客户端和服务器通信的缓冲的最大大小。默认为24m。最小值和最大值为4KB和2GB。该选项在mysql5.7.25版本被添加。
19)--net-buffer-length=value:用于客户端和服务器通信的缓冲的初始大小。默认值为1MB-1KB。最小和最大值为4K和16MB。该选项在mysql5.7.25版本被添加。
20)--no-defaults:不读取任何选项文件。如果由于选项文件中的位置选项导致程序启动失败,--no-defaults能用于阻止读取这些选项。.mylogin.cnf文件是个例外,如果该文件存在,任何情况下都会被读取。
这允许使用--no-defaults时通过比命令行更安全的方式指定口令。
21)--password[=password], -p[password]:连接到服务器时所用的口令。如果使用端选项格式(-p),选项和口令间不能有空格。如果漏掉命令行--password或--p选项后面的口令,mysql_upgrade将会提示输入
一个口令。命令行确定口令被认为是不安全的。
22)--pipe, -W:windows上,用命名管道连接到服务器。该选项只有在服务器支持命名管道连接时才被使用。
23)--plugin-dir=dir_name:寻找插件的目录。如果--default-auth选项用于确定认证插件但mysql_upgrade并未发现时,将会指定该选项。
24)--port=port_num, -P port_num:用于连接的TCP/IP端口号。
25)--print-defaults:打印程序名和其从选项文件中读取的所有选项。
26)--protocol={TCP|SOCKET|PIPE|MEMORY}:用于连接到服务器的连接协议。当其他连接参数导致使用一个并非你需要的协议时,可以使用该选项进行指定。
27)--shared-memory-base-name=name:windows上,用于连接到本地服务器所用共享内存的名字。默认值为mysql,共享内存名是大小写敏感的。服务器必须用--shared-memory选项启动以开启共享内存连接功能。
28)--skip-sys-schema:从mysql5.7.7开始,如果没有,mysql_upgrade将会安装sys模式,否则,将其升级为当前版本。--skip-sys-schema选项将阻止该行为。该选项在mysql5.7.7版本中被添加。
29)--socket=path, -S path:连接到localhost时所用的unix套接字文件(socket file),或,windows上,所用的命名管道名。
30)--ssl*:以--ssl开始的选项确定是否用SSL连接到服务器,并指定发现SSL秘钥和证书的地方。
31)--tls-version=protocol_list:客户端允许的加密连接的协议。数值为逗号分隔的包含一个或更多协议名的列表。能用于该选项的协议依赖于用来编译mysql的SSL库。该选项在mysql5.7.10版本中被添加。
32)--tmpdir=dir_name, -t dir_name:用于创建临时文件的目录路径名。该选项在mysql5.7.5版本中因为不再用临时文件的实现而被移去。
33)--upgrade-system-tables, -s:仅升级系统表而不升级数据。
34)--user=user_name, -u user_name:连接到服务器时用的mysql用户名。默认为root用户。
35)--verbose:详细模式。打印有关程序行为的更多信息。
36)--version-check, -k:检查mysql_upgrade正连接的服务器的版本,以便确认与mysql_upgrade构建时的版本是一样的。如果不是,mysql_upgrade将结束。该选项默认开启;为了关闭该检查,使用
--skip-version-check选项。该选项在mysql5.7.2中被添加。
37)--write-binlog:默认的,mysql_upgrade的二进制日志被关闭。如果想将程序的行为记录到二进制日志中,可用--write-binlog选项运行程序。当服务器以全局事务鉴定符(GTIDs)开启模式运行时,mysql_upgrade
不能开启二进制日志。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章