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中添加的。