Mysql upgrade

来自泡泡学习笔记
跳到导航 跳到搜索
注意
从MySQL 8.0.16版本开始,MySQL服务器执行了以前由mysql_upgrade处理的升级任务。因此,mysql_upgrade不再需要,并且在该版本中已被弃用;预计在将来的MySQL版本中会删除该功能。由于mysql_upgrade不再执行升级任务,它无条件地以状态0退出。


每次升级MySQL时,都应执行mysql_upgrade,该工具检查与升级后的MySQL服务器的兼容性问题:

  • 它升级mysql模式中的系统表,以便您可以利用可能已添加的新特权或能力。
  • 它升级了Performance Schema、INFORMATION_SCHEMA和sys模式。
  • 它检查用户模式。


如果mysql_upgrade发现某个表存在潜在的不兼容性,它会执行表检查,如果发现问题,则尝试表修复。


mysql_upgrade直接与MySQL服务器通信,发送执行升级所需的SQL语句。

注意:
在执行升级操作之前,应始终备份当前的MySQL安装。


某些升级不兼容性可能需要在升级MySQL安装和运行mysql_upgrade之前进行特殊处理。


使用以下方式运行mysql_upgrade:

  • 确保服务器正在运行。
  • 调用mysql_upgrade来升级mysql模式中的系统表,并检查和修复其他模式中的表:
mysql_upgrade [options]
  • 停止服务器并重新启动,以使任何系统表更改生效。


如果要升级多个MySQL服务器实例,请为连接到各个目标服务器的连接参数调用mysql_upgrade。例如,在本地主机上的3306至3308端口上运行服务器时,通过以下命令升级它们:

mysql_upgrade --protocol=tcp -P 3306 [other_options]
mysql_upgrade --protocol=tcp -P 3307 [other_options]
mysql_upgrade --protocol=tcp -P 3308 [other_options]


对于Unix上的本地主机连接,--protocol=tcp选项强制使用TCP/IP连接,而不是Unix套接字文件。


默认情况下,mysql_upgrade以MySQL的root用户身份运行。如果在运行mysql_upgrade时root密码已过期,则会显示一个消息提示您的密码已过期,并且mysql_upgrade因此而失败。为了纠正这个问题,重新设置root密码以取消过期状态,并再次运行mysql_upgrade。首先,以root身份连接到服务器:

$> mysql -u root -p
输入密码:****  <- 在这里输入root密码


使用ALTER USER命令重置密码:

mysql> ALTER USER USER() IDENTIFIED BY 'root-password';


然后退出mysql并再次运行mysql_upgrade:

$> mysql_upgrade [选项]
注意
如果使用disabled_storage_engines系统变量禁用某些存储引擎(例如MyISAM)运行服务器,则mysql_upgrade可能会失败并显示如下错误:

mysql_upgrade: [ERROR] 3161: Storage engine MyISAM is disabled
(Table creation is disallowed).


要解决此问题,请关闭disabled_storage_engines参数并重启服务器。然后应该能够成功运行mysql_upgrade。之后,再以原始值启动disabled_storage_engines参数来重启服务器。


除非使用--upgrade-system-tables选项调用,否则mysql_upgrade将根据需要处理所有用户架构中的所有表格。表格检查可能需要很长时间才能完成。在处理过程中,每个表格都被锁定,因此对其他会话不可用。检查和修复操作可能会耗费大量时间,尤其是对于大型表格。表格检查使用CHECK TABLE语句的FOR UPGRADE选项。


mysql_upgrade使用当前MySQL版本号标记所有检查和修复的表格。这样可以确保下次使用相同版本的服务器运行mysql_upgrade时,可以确定是否需要再次检查或修复某个表格。


mysql_upgrade将MySQL版本号保存在名为mysql_upgrade_info的文件中,该文件位于数据目录中。这用于快速检查是否对此发布的所有表格进行了检查,以便可以跳过表格检查。要忽略此文件并执行检查,请使用--force选项。

注意
mysql_upgrade_info文件已被弃用;预计将在以后的MySQL版本中删除该文件。


mysql_upgrade会检查mysql.user系统表中的行,并对其中插件列为空的行将该列设置为 'mysql_native_password'。


mysql_upgrade不会升级时区表格或帮助表格的内容。


除非使用--skip-sys-schema选项调用,否则mysql_upgrade将安装sys模式(如果尚未安装)并将其升级到当前版本。如果存在sys模式但没有版本视图,则会发生错误,因为假设不存在版本视图表示用户创建的模式:

存在sys模式但没有sys.version视图。如果
您有一个用户创建的sys模式,则必须将其重命名以使升级成功。
在这种情况下进行升级,请首先删除或重命名现有的sys模式。


mysql_upgrade支持以下选项,可以在命令行或选项文件的[mysql_upgrade]和[client]组中指定。


  • --help

显示简短的帮助信息并退出。


  • --bind-address=ip_address

在具有多个网络接口的计算机上,使用此选项选择用于连接到MySQL服务器的接口。


  • --character-sets-dir=dir_name

字符集安装的目录。


  • --compress, -C

如果可能的话,压缩客户端和服务器之间发送的所有信息。

从MySQL 8.0.18开始,此选项已被弃用。预计将在未来的MySQL版本中删除。请参阅“配置传统连接压缩”。


  • --compression-algorithms=value

用于与服务器建立连接的允许的压缩算法。可用的算法与protocol_compression_algorithms系统变量相同。默认值为未压缩。

此选项在MySQL 8.0.18中添加。


  • --debug[=debug_options], -# [debug_options]

编写调试日志。一个典型的debug_options字符串是d:t:o,file_name。默认值为d:t:O,/tmp/mysql_upgrade.trace。


  • --debug-check

程序退出时打印一些调试信息。


  • --debug-info, -T

程序退出时打印调试信息以及内存和CPU使用统计信息。


  • --default-auth=plugin

关于要使用的客户端身份验证插件的提示。


  • --default-character-set=charset_name

将charset_name作为默认字符集。


  • --defaults-extra-file=file_name

在全局选项文件之后但(在Unix上)在用户选项文件之前读取此选项文件。如果文件不存在或无法访问,则会出错。如果file_name不是绝对路径名,则解释为相对于当前目录。


  • --defaults-file=file_name

使用给定的选项文件。如果文件不存在或无法访问,将会出现错误。如果file_name不是绝对路径名,则相对于当前目录进行解释。


  • --defaults-group-suffix=str

读取通常的选项组以及带有后缀str的通常名称的组。例如,mysql_upgrade通常会读取[client]和[mysql_upgrade]组。如果给定了此选项作为--defaults-group-suffix=_other,mysql_upgrade还将读取[client_other]和[mysql_upgrade_other]组。


  • --force

忽略mysql_upgrade_info文件并强制执行,即使已经为当前版本的MySQL执行过mysql_upgrade。


  • --get-server-public-key

向服务器请求用于基于RSA密钥对的密码交换所需的公钥。该选项适用于使用caching_sha2_password身份验证插件进行身份验证的客户端。对于该插件,除非被请求,否则服务器不会发送公钥。对于不使用基于RSA的密码交换(例如,客户端使用安全连接连接到服务器时),此选项将被忽略。

如果给定了--server-public-key-path=file_name并指定了有效的公钥文件,它将优先于--get-server-public-key。


  • --host=host_name,-h host_name

连接到给定主机上的MySQL服务器。


  • --login-path=name

在.mylogin.cn登录路径文件中读取指定登录路径的选项。 "登录路径"是包含指定要连接到的MySQL服务器和要进行身份验证的帐户的选项组。要创建或修改登录路径文件,请使用mysql_config_editor实用程序。


  • --max-allowed-packet=value

客户端/服务器通信缓冲区的最大大小。默认值为24MB。最小和最大值分别为4KB和2GB。


  • --net-buffer-length=value

客户端/服务器通信缓冲区的初始大小。默认值为1MB-1KB。最小和最大值分别为4KB和16MB。


  • --no-defaults

不读取任何选项文件。如果由于从选项文件中读取未知选项导致程序启动失败,可以使用--no-defaults来防止读取它们。


例外情况是无论在哪种情况下都会读取.mylogin.cnf文件,如果它存在。这样即使使用--no-defaults也能以比在命令行中更安全的方式指定密码。要创建.mylogin.cnf,请使用mysql_config_editor实用程序。


  • --password[=password],-p[password]

用于连接到MySQL服务器的账户的密码。密码值是可选的。如果不提供,则mysql_upgrade会提示输入密码。如果提供了密码,--password=或者-p后面的密码之间不能有空格。如果没有指定密码选项,则默认不发送密码。


在命令行上指定密码应被视为不安全。为避免在命令行上给出密码,请使用选项文件。


要明确指定没有密码,并且mysql_upgrade不需要提示输入密码,请使用--skip-password选项。


  • --pipe, -W

在Windows上,使用命名管道与服务器建立连接。此选项仅适用于以启用named_pipe系统变量来支持命名管道连接的方式启动的服务器。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的Windows组的成员。


  • --plugin-dir=dir_name

查找插件的目录。如果使用--default-auth选项指定了认证插件但mysql_upgrade无法找到它,


  • --port=port_num,-P port_num

对于TCP/IP连接,要使用的端口号。


  • --print-defaults

打印程序名称和从选项文件获取的所有选项。


  • --protocol={TCP|SOCKET|PIPE|MEMORY}

用于连接到服务器的传输协议。当其他连接参数通常导致使用不是您想要的协议时,此选项很有用。


  • --server-public-key-path=file_name

包含服务器对于基于RSA密钥对的密码交换所需的公钥的客户端端副本的PEM格式文件的路径名。此选项适用于使用sha256_password或caching_sha2_password认证插件进行身份验证的客户端。对于不使用基于RSA的密码交换的不进行身份验证的账号,此选项会被忽略。如果客户端使用安全连接连接服务器,则同样会被忽略。


如果给出了--server-public-key-path=file_name并且指定了一个有效的公钥文件,则它将覆盖--get-server-public-key。


对于sha256_password,此选项仅在使用OpenSSL构建MySQL时适用。


  • --shared-memory-base-name=name

在Windows上,连接到本地服务器的使用共享内存的连接所使用的共享内存名称。默认值为MYSQL。共享内存名称区分大小写。


此选项仅适用于以启用shared_memory系统变量来支持共享内存连接的方式启动的服务器。


  • --skip-sys-schema

默认情况下,如果sys模式尚未安装,则mysql_upgrade会安装该模式,并升级到当前版本。--skip-sys-schema选项可以取消此行为。


  • --socket=path, -S path

用于本地连接的Unix套接字文件(对于Windows,使用的是命名管道的名称)。


在Windows上,仅当服务器启用了named_pipe系统变量以支持命名管道连接时,此选项才适用。此外,进行连接的用户必须是由named_pipe_full_access_group系统变量指定的Windows组的成员。


  • --ssl*

以 --ssl 开头的选项指定是否使用加密连接,并指示 SSL 密钥和证书的位置。请参阅“加密连接的命令选项”。


  • --ssl-fips-mode={OFF|ON|STRICT}

控制是否在客户端启用 FIPS 模式。--ssl-fips-mode 选项与其他 --ssl-xxx 选项的区别在于它不用于建立加密连接,而是影响允许的加密操作。


允许使用以下 --ssl-fips-mode 值:

OFF:禁用 FIPS 模式。

ON:启用 FIPS 模式。

STRICT:启用“严格”FIPS模式。
注意:
如果 OpenSSL FIPS Object Module 不可用,则 --ssl-fips-mode 的唯一允许值为 OFF。在这种情况下,将 --ssl-fips-mode 设置为 ON 或 STRICT 会导致客户端在启动时产生警告并在非 FIPS 模式下运行。


从 MySQL 8.0.34 开始,此选项已被弃用。预计在将来的 MySQL 版本中将删除该选项。


  • --tls-ciphersuites=ciphersuite_list

加密连接的允许密码套件列表,使用 TLSv1.3。该值是一个由一个或多个以冒号分隔的密码套件名称组成的列表。此选项可命名的密码套件取决于编译 MySQL 使用的 SSL 库。


此选项在 MySQL 8.0.16 中添加。


  • --tls-version=protocol_list

加密连接的允许 TLS 协议列表。该值是一个由一个或多个以逗号分隔的协议名称组成的列表。此选项可命名的协议取决于编译 MySQL 使用的 SSL 库。


  • --upgrade-system-tables, -s

仅升级mysql模式中的系统表,不升级用户模式。


  • --user=user_name, -u user_name

用于连接到服务器的MySQL帐户的用户名。默认用户名为root。


  • --verbose

详细模式。打印程序操作的更多信息。


  • --version-check, -k

检查 mysql_upgrade 连接的服务器版本,以验证它与 mysql_upgrade 构建的版本相同。如果不同,mysql_upgrade 将退出。此选项默认启用;要禁用此检查,请使用 --skip-version-check。


  • --write-binlog

默认情况下,mysql_upgrade禁用了二进制日志记录。如果你希望将其操作写入到二进制日志中,请使用--write-binlog选项调用该程序。


当服务器启用全局事务标识符(GTIDs)时(gtid_mode=ON),请不要通过mysql_upgrade启用二进制日志记录。


  • --zstd-compression-level=level

用于使用zstd压缩算法连接到服务器时的压缩级别。允许的级别范围是1到22,较大的值表示越高的压缩级别。默认的zstd压缩级别是3。压缩级别设置对不使用zstd压缩的连接没有影响。

此选项是在MySQL 8.0.18中添加的。