在上一章中,我们概述了 MySQL 以及 MySQL 8 的新特性、用例和限制。MySQL 在平台方面非常灵活,如 RedHat、Fedora、Ubuntu、Debian、Solaris、Microsoft Windows 等。它有一个 API 来支持不同语言的连接,如 C、C++、C 语言、PHP、java、Ruby 等等。对于任何编程平台来说,最重要和最单调的任务就是用必要的软件工具来建立环境。MySQL 8 的情况并非如此,因为本章重点介绍使用 MySQL 8 设置环境。
本章详细介绍了 MySQL 8 的安装步骤以及必要的先决条件。为在各种平台上设置 MySQL 8,提供了单独的安装步骤。本章还介绍了升级到 MySQL 8 或从 MySQL 8 降级的方法。
本章将介绍以下主题:
本节将指导读者选择 MySQL 8 版本,从何处获取 MySQL 8,以及如何安装 MySQL 8。它还解释了安装所需的安装后步骤。本章提供有关如何从 MySQL 8 升级或降级的信息。
MySQL 8 可以在许多不同版本的操作系统上使用。MySQL 8 版本通过两种方式进行管理:
MySQL 8 的每个版本都遵循命名约定,这表示其状态。每个版本名称由三位数字和可选后缀组成。例如,mysql.8.1.2-rc。这些数字解释如下:
最新版本的版本是最适合使用的版本。示例中给出的后缀表示 MySQL 8 版本的稳定性。MySQL 8 版本有三个后缀:
如上所述,在每个发布之前是 DMR,然后是 RC,最后是 GA 发布状态。现在,在决定安装的 MySQL 8 版本之后,是时候选择分发格式了。
建议将二进制分发用于一般用途。许多平台都有本机格式。例如,Linux 的 RPM 包和 OS X 的 DMG 包
要从官方网站获取 MySQL 8,请参考以下 URL:http://dev.mysql.com/downloads/ 。MySQL 还提供了镜像站点:http://dev.mysql.com/downloads/mirrors.html 。到达下载页面时,您可以在页面底部看到版本选择选项卡,其中显示两个选项卡:
根据上一节,从列表中选择合适的版本,然后单击下载按钮。
这是一个下载包可用并准备好安装的阶段。这是一个可选步骤,但我们建议在安装过程中避免错误。有三种不同的方法可用于检查完整性:
这是检查完整性的最简单方法,只需很少的努力。MySQL 下载页面本身提供 MD5 校验和,这对于每个 MySQL 产品都是唯一的。下载 MySQL 8 后,我们只需确保下载文件的校验和与下载页面上提供的校验和匹配即可。有许多工具可用于不同的操作系统来比较校验和。在这里,我们提供了一个 MD5 校验和的示例,它使用命令行并使用一个图形工具,名为 winMD5Sum,用于 Windows 操作系统。
执行以下命令行执行步骤:
解压E:\Softwares
位置下的文件
转到命令行并执行以下命令:
E:\Softwares\md5>md5.exe
E:\Softwares\mysql-installer-community-5.7.19.0.msi
2578BFC3C30273CEE42D77583B8596B5
E:\Softwares\mysql-installer-community-5.7.19.0.msi
执行以下步骤以执行图形工具:
单击页面上的下载 WinMD5Sum 选项。它会将winMD5Sum.exe
下载到您的计算机上。
运行下载的Install-winMD5Sum.exe
并将其安装到本地计算机上。
成功安装后,打开 winMD5Sum 工具。这将打开一个对话框,您必须在其中选择下载的MySQL.msi
文件。
单击“计算”按钮。这将计算下载文件的 MD5 校验和。
在比较文本框中输入 MySQL 下载页面上可用的 MD5 校验和,然后按比较按钮。
这种完整性验证技术需要一个公共 GPG 构建密钥。此钥匙可从获取 http://pgp.mit.edu/ URL。下载生成密钥后,必须执行以下步骤:
Make sure the MySQL package name and its downloaded signature file name are the same. Both the files must be placed under one common storage location.
cmd> gpg --verify package_name.asc
对于 Microsoft Windows,某些 GUI 工具也可用于完整性检查。其中最受欢迎的是Gpg4win
。为了在 Linux 上执行相同的检查,我们有可用的命令,因为 RPM 包本身包含一个 GPG 签名和 MD5 校验和。执行以下命令以验证包:
cmd> rpm --checksig package_name.rpm
这种验证技术比 MD5 校验和更可靠,但它非常复杂,需要进行更多的完整性检查
MySQL 可用于 32 位和 64 位版本。在 Microsoft Windows 上安装 MySQL 8 有不同的方法。最常见的方法是使用安装程序,在本地系统上安装和配置 MySQL 8。
Before installing MySQL Community 8.0 Server, make sure that the Microsoft Visual C++ 2015 redistributable package has been installed on the system.
MySQL 8 要么作为标准应用程序运行,要么作为 Windows 服务运行。使用它,因为该服务使用户能够使用 Windows 服务管理工具控制和测量操作。每个平台有三种主要的分发格式:
在微软 Windows 上安装 MySQL 8 之前,请考虑以下几点:
防病毒软件提供了排除某些目录的配置,因此建议排除 MySQL 8 数据目录和临时目录。默认情况下,MySQL 8 将临时数据存储到 Microsoft Windows 临时目录中。要在 MySQL 8 中更改此默认配置,请参考my.ini
文件的tempdir
参数。
MAX_ROWS
和AVG_ROW_LENGTH
属性。默认情况下,Microsoft Windows 会考虑 MySQL 8 安装的C:\Program Files
目录。但是,我们可以在安装时选择目录。无论安装位置如何,安装后的子目录结构保持不变。有关 Microsoft 窗口布局,请参阅下表:
| 目录 | 目录的内容 | 注释 |
| bin
| mysqld服务器、客户端和工具 | |
| %PROGRAMDATA%\MySQL\MySQL Server 8.0\
| 日志文件、数据库 | Windows 系统变量%PROGRAMDATA%
默认为C:\ProgramData
|
| examples
| 示例程序和脚本 | |
| include
| 包括(header
文件) | |
| lib
| 图书馆 | |
| share
| 杂项支持文件,包括错误消息、字符集文件、示例配置文件、用于数据库安装的 SQL | |
You can learn more about this topic at https://dev.mysql.com/doc/refman/8.0/en/windows-installation-layout.html.
在 Windows 上安装 MySQL 8 时,包格式有多个可用选项。MySQL 提供了使用程序数据库(pdb文件)调试安装过程的工具。这些文件在 ZIP 分发版中提供:
安装程序是 MySQL 产品安装和升级最常见的方式。
MySQL 8 安装程序主要用于降低安装过程的复杂性,以及对运行在 Windows 平台上的 MySQL 产品的管理。在产品清单中,我们可以考虑:
MySQL 8 安装程序有两个版本:
社区版:可在下载 http://dev.mysql.com/downloads/installer/ 。如前一节所述,安装程序可以使用 Web 社区和社区包格式。
商业版:参考https://edelivery.oracle.com/ 下载商业版。商业版包含社区版中提供的所有产品以及以下产品:
如前所述,安装程序将引导用户完成向导。一旦我们在主机上启动安装程序,它将检测已经安装的 MySQL 产品,并将它们考虑在要管理的产品列表中。以下是安装程序初始设置所需的步骤:
MySQL 安装程序授权和支持认证:这是用户在开始安装 MySQL 8 之前必须接受许可协议的步骤。接受条款后,用户可以添加、更新或删除 MySQL 产品。在商业版中,拆分产品需要凭据,并且必须与支持站点中用户的 Oracle 帐户匹配。
选择安装类型:这是用户必须选择 MySQL 产品进行安装的步骤。安装程序还提供了预定义设置选项,其中包含一组 MySQL 产品。因此,您可以根据需要灵活选择一种设置类型。以下是安装程序中提供的一些设置。
开发者默认:安装下载时选择的 MySQL 8 服务器版本:
仅服务器:仅安装 MySQL 服务器。
仅客户端:与开发者默认设置类型相同,只是不包含 MySQL 8 服务器或添加到其中的任何特定于客户端的包。
完整:安装 MySQL 的所有可用产品,如mysql-server
、mysql-client
、mysqladmin
等。
自定义:此选项仅安装用户从目录中选择的产品。在这里,用户可以自由选择所需的产品,而不是安装完整的产品包。
路径冲突:当托管系统已经包含 MySQL 产品,并且用户试图在同一路径上安装该 MySQL 产品的不同版本时,安装程序将在向导中显示路径冲突错误。安装程序允许用户通过以下方式对路径冲突采取操作:
检查要求:每个 MySQL 产品都附带一个package-rules.xml
文件,包含所有必备软件列表。在初始设置期间,安装程序将检查所需软件的可用性,并在缺少要求时提示用户更新主机。
MySQL 安装程序配置文件:安装程序配置文件位于C:\Program Files
。以下是配置文件的详细信息:
| 文件或文件夹 | 说明 | 文件夹层次结构 |
| 适用于 Windows 的 MySQL 安装程序 | 此文件夹包含运行 MySQL 安装程序和具有类似功能的命令行程序MySQLinstallerConsole.exe所需的所有文件。 | C:\Program Files (x86)
|
| Templates
| Templates
文件夹中每个版本的 MySQL 服务器都有一个文件。Templates
文件包含用于动态计算某些值的键和公式。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest
|
| package-rules.xml
| 此文件包含要安装的每个产品的先决条件。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest
|
| produts.xml
| products
文件(或产品目录)包含可供下载的所有产品的列表。 | C:\ProgramData\MySQL\MySQL installer for Windows\Manifest
|
| Product Cache
| Product Cache
文件夹包含与完整软件包捆绑或随后下载的所有独立MSI
文件。 | C:\ProgramData\MySQL\MySQL installer for Windows
|
参考文献:https://dev.mysql.com/doc/refman/8.0/en/mysql-installer-setup.html
MySQL 安装程序遵循每个产品的工作流程:
Product Cache
文件夹中。使用安装程序,MySQL 8 中的高可用性实现有两个选项:
InnoDB
集群。InnoDB
群集,仅用于测试。MySQL 安装程序工具栏为InnoDB
集群中的多个实例提供配置。群集节点在不同的端口上运行。配置完成后,单击 Summary 选项卡以获取每个集群的端口详细信息。
MySQL 安装程序为 MySQL 8 服务器执行一些基本配置,包括:
my.ini
配置文件。文件内容将根据安装过程中选择的选项决定。**MySQL 8 需要以下服务器配置:
本节详细介绍了MySQL 安装程序如何处理产品目录和管理仪表盘。
产品目录是一个组件,其中列出了支持 Microsoft Windows 的所有已发布 MySQL 产品。MySQL 安装程序每天更新目录,该选项也可用于手动更新目录。产品目录执行以下操作来管理列表:
产品目录列出了开发版本、常规版本或任何次要版本中可用的所有产品。
MySQL 安装程序仪表板提供了在主机工作站上管理 MySQL 产品安装的工具。以下是使用仪表板管理产品的方法:
MySQL 安装程序包括**M**ySQLinstallerConsole.exe
文件,该文件提供使用命令提示符执行命令的功能。默认情况下,此功能在 MySQL 安装程序的初始安装期间安装。有一些命令可用于管理 MySQL 产品。要查看这些命令的详细信息,请执行help
命令。
要使用 ZIP 存档安装 MySQL 8,请执行以下步骤:
c:\mysql
位置。在安装过程中,确保登录用户具有管理权限。Make sure no MySQL service is running during the installation of MySQL as a Window service.
During the command execution type -- install first and then specify --default –file option; otherwise, the mysqld.exe
file will start the MySQL 8 server.
my.ini
和my.cnf
文件作为选项文件,它们是纯文本形式。With the Windows operating system:
Windows
目录,请参考WINDIR
环境变量。my.ini
在 MySQL 服务器安装的默认位置可用。如上所述,选项文件与普通文本文件相同;用户可以使用任何文本编辑器对其进行修改。考虑 MySQL 8 安装目录和数据目录位于不同位置的示例。在这种情况下,用户必须在mysqld
部分的选项文件中提及两个目录的位置:
[mysqld]
# set basedir to your installation path
basedir=E:\\mysql
# set datadir to the location of your data directory
datadir=E:\\mydata\\data
Remember, a ZIP archive does not initialize data directory. To initialize data directory and populate tables in the MySQL 8 system database, the user has to execute the initialize
command. This process will be covered in the later section on post-installation.
| 二进制 | 说明 | | mysqld | 具有命名管道支持的优化二进制文件 | | mysqld 调试 | 类似于mysqld,但编译时进行了完全调试和自动内存分配检查 |
MySQL 8 supports TCP/IP on all Microsoft Windows platforms with pipes. But the default option is in normal mode because the pipes option has a performance impact. It slows down the overall performance. You can learn more about this at: https://dev.mysql.com/doc/refman/8.0/en/windows-select-server.html.
E:\MySQL\MySQL Server 8
文件夹下: E:\> “E:\MySQL\MySQL Server 8\bin\mysqld”
执行上述命令后,用户可以看到一个消息列表,帮助用户识别是否存在错误。命令提示符中的最后两行显示如下。它们表示 MySQL 8 服务已启动并准备好接受服务器客户端请求:
mysqld: ready for connections
Version: '8.0.4' socket: '' port: 3306
用户可以省略错误日志控制台,因为 MySQL 8 在一个扩展名为.err
的数据目录下的单独日志文件中维护日志。启动 MySQL 8 服务器时,用户每次都必须使用命令提示符执行相同的命令。要停止 MySQL 8 服务器,请执行以下命令:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqladmin” -u root shutdown
最初,安装 MySQL 8 时,不会设置根帐户密码。在首次启动 MySQL 8 服务器后,用户必须手动进行设置。设置密码的步骤在安装后一节中有详细说明。
The path of mysqld
and mysqladmin
may vary depending on the installation location of MySQL 8. If the password was set on the root user of the MySQL 8 server then execute the command with the -p option and provide a password for successful execution.
为 MySQL 8 设置环境变量。如前一节所述,我们已经用 MySQL 8 服务器安装的完整路径编写了该命令。为了简化此命令,我们必须在 Microsoft Windows 中通过执行以下步骤(在 Windows 10 中)来定义 MySQL 8 的环境变量:
右键点击我的电脑并选择属性:
bin
文件位置的路径。例如,E:\MySQL\MySQL Server 8\bin
应用环境变量后,用户可以在命令提示符下执行任何 MySQL 命令,而无需给出 MySQL 8 的完整路径。
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install
此命令具有以下附加参数选项:
如果我们不定义服务名称,那么命令将考虑默认服务为{ Tyt0} MySQL OutT1。
使用-- default -file
参数指定包含服务名称的选项文件名
* 用户还可以使用服务名称后面的--local-service
选项
**使用以下命令将 MySQL 服务设置为窗口服务,并将文件my-opts.conf
作为选项文件引用 MySQL 8 配置:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install MySQL --defaults-file=E:\my-opts.cnf
到目前为止,我们已经将 MySQL 8 服务作为 Windows 服务进行了讨论,但是有一个命令可以使用--install-manual
选项在不使用 Windows 服务的情况下启动 MySQL 8。要删除 MySQL 8 服务,请使用--remove
命令,如下所示:
E:\> “E:\MySQL\MySQL Server 8\bin\mysqld” --install-manual
E:\> "E:\MySQL\MySQL Server 8\bin\mysqld" --remove
对于 Linux 上的 MySQL 8 安装,可以使用各种解决方案。用户可以根据自己的需求选择任何发行版。以下是不同的分布,其中详细描述了三种分布:
Yum
存储库进行安装APT
存储库进行安装SLES
存储库进行安装RPM
包进行安装Debian
包进行安装使用Yum
存储库执行以下步骤安装 MySQL 8:
Yum
存储库 http://dev.mysql.com/downloads/repo/yum/ 链接。Yum
存储库添加到您的local
存储库中: shell> sudo yum localinstall package_name.rpm
shell> yum repolist enabled | grep "mysql.*-community.*"
将package_name
替换为 RPM 包的实际名称。安装完成后,执行第二个命令检查Yum
存储库是否已正确安装。
shell> yum repolist all | grep mysql
在 MySQL-Yum 存储库中,最新的 GA 系列在默认情况下已启用安装,但除此之外,其他开发系列也处于禁用状态。对于 development series 安装,执行以下两个命令以禁用 GA 版本和启用 require development series:
shell> sudo yum-config-manager --disable mysql57-community
shell> sudo yum-config-manager --enable mysql80-community
定义发布系列的另一种方法是使用存储库文件中的手动条目。例如,在/etc/yum.repos.d/mysql-community.repo
文件中添加以下条目:
mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/
enabled=1
此处,enabled=1
表示启用此系列,enabled=0
表示禁用此系列。Yum 一次只允许为一个版本启用一个子存储库;如果启用了多个版本系列,则 Yum 存储库将仅选择最新的系列。保存配置文件中的更改后,执行以下命令以检查是否选择了正确的子存储库:
shell> yum repolist enabled | grep mysql
shell> sudo yum install mysql-community-server
它将安装 MySQL 8 服务器及其所有依赖项,例如客户端、客户端的字符集以及所需的库。
shell> sudo service mysqld start
shell> sudo service mysqld status
在初始启动期间,将执行以下任务:
validate_password_plugin
已安装并启用RPM 包可从 MySQL 8 的 Yum 存储库和 SLES 存储库获得。这是 MySQL 8 的推荐安装方式。RPM 包遵循packagename-version-distribution-arch.rpm
语法,其中 distribution 和 arch 分别表示 Linux 发行版和处理器。RPM
包是所有必需包的捆绑包,它们相互依赖。RPM 包遵循与 Yum repository 安装中讨论的相同步骤。在基于 RPM 的系统中,MySQL 服务不会自动启动。要手动启动,请执行以下命令:
shell> sudo service mysqld start
与其他安装一样,RPM 软件包安装也会在以下路径的系统中创建文件和目录:
| 文件或资源 | 位置 |
| 客户端程序和脚本 | /usr/bin
|
| mysqld服务器 | /usr/sbin
|
| 配置文件 | /etc/my.cnf
|
| 数据目录 | /var/lib/mysql
|
| 错误日志文件 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:/var/log/mysqld.log
对于 SLES:/var/log/mysql/mysqld.log
|
| 安全文件的值 | /var/lib/mysql-files
|
| 系统 Vinit
脚本 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:/etc/init.d/mysqld
对于 SLES:/etc/init.d/mysql
|
| 系统服务 | 对于 RHEL、Oracle Linux、CentOS 或 Fedora 平台:mysqld
对于 SLES:mysql
|
| Pid 文件 | /var/run/mysql/mysqld.pid
|
| Socket
| /var/lib/mysql/mysql.sock
|
| 密钥环目录 | /var/lib/mysql-keyring
|
| Unix 手册页 | /usr/share/man
|
| 包括(header
文件) | /usr/include/mysql
|
| 图书馆 | /usr/lib/mysql
|
| 其他支持文件(例如,错误消息和字符集文件) | /usr/share/mysql
|
Debian
MySQL APT 存储库或 MySQL 开发者专区的下载区提供了软件包。每个 MySQL 组件都有自己的Debian
安装包,但是准备了一个 tarball 包,将不同的Debian
包组合成一个包。tarball 命名约定为mysql-server_MVER-DVER_CPU.deb-bundle.tar,
,其中MVER
表示 MySQL 版本,DVER
表示 Linux 发行版本,CPU 表示处理器。要使用Debian
包安装 MySQL 8,请执行以下步骤:
shell> tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tar
Libaio1
库,执行库安装命令: shell> sudo apt-get install libaio1
shell> sudo dpkg-preconfigure mysql-community-server_*.deb
这是安装前执行的流程,适用于Debian
包集和使用debconf
及其配置脚本检查系统的其他包。在此过程中,系统将询问 MySQL 8 安装的 root 用户密码。
shell>sudo apt-get -f install
MySQL 8 配置文件在Debian
包的以下路径下可用:
/etc/mysql
下/var/lib/mysql
下/user/bin
和user/sbin
下安装后是一个描述用户在安装 MySQL 8 后必须执行的基本步骤或配置的过程。
在前面的章节中,我们已经看到了不同的 MySQL 8 安装方法。有些方法会自动为 MySQL 8 创建数据目录。对于通用二进制发行版和源发行版,必须创建数据目录。数据目录初始化由以下两个命令之一执行:
E:\> bin\mysqld –-initialize
E:\> bin\mysqld --initialize-insecure
可以根据用户的要求选择这些命令中的任何一个,以生成随机初始密码或不生成初始密码。用户可以使用这两个命令,而不考虑数据目录初始化的平台。初始化是生成随机初始根密码的一种方式。在initialize-insecure
的情况下,不生成密码。
另一个选项是使用命令行参数指定安装目录和数据目录,如以下命令所示:
E:\> bin\mysqld --initialize --basedir E:\mysql --datadir :\mydata\data
用户还可以在单独的文件中指定这些目录,称为Option
文件,在mysqld
参数下。本章的Option
文件部分详细描述了该配置。当用户执行任一命令时,mysqld
在执行过程中执行以下步骤:
它检查数据目录是否存在
MySQL 8 服务器创建一个系统数据库及其表、授权表、帮助表和时区表
它使用InnoDB
表的数据结构初始化系统表空间
将创建root@localhost
超级用户帐户和其他保留帐户
**# 保护初始 MySQL 帐户的安全
本节介绍如何在工作站上第一次执行 MySQL 8 服务器时为根帐户分配密码。当用户在 Windows 中使用安装程序或在 Linux 中使用Debian
包安装 MySQL 8 时,安装过程提供了输入密码并自行将该密码分配给根帐户的选项。但在RPM
包中,会为根帐户生成随机密码,并在安装过程中写入服务器日志文件。初始根帐户可能有密码,也可能没有密码。要在初始阶段分配密码,请使用以下任一过程:
shell> mysql -u root -p
Enter password: (enter the random root password here)
root
帐户设置新密码: mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
如果根帐户没有密码:
mysql -u root
2.为root
账户设置新密码:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'newPassword';
在分配了新密码之后,无论何时您想要连接 MySQL 8,都必须使用新密码。
本节介绍如何启动 MySQL 8 服务器以及如何在启动过程中排除问题。在 Linux 系统上成功安装 MySQL 8 服务器后,执行以下命令启动 MySQL 8 服务:
shell> sudo service mysqld start
要详细检查服务是否已启动,请参阅日志文件。您可以使用 status 命令检查 MySQL 8 服务的状态:
shell> sudo service mysqld status
在收到服务启动/运行的消息后,您可以使用以下命令连接 MySQL 8:
shell> mysql -uroot -p
前面的命令提示输入密码,因此输入密码并按回车键。将显示 MySQL 提示符,您可以输入mysql
命令执行。在执行上述命令的过程中,可能会出现一些常见问题,因此我们将在这里提出以下故障排除建议:
检查log
文件以查找服务启动期间发生的确切错误。如前一节所述,error
文件和log
文件位于数据目录下。其命名约定为host_name.err
和host_name.log
。通过读取文件的最后几行,可以确定在执行最后一个命令期间发生的问题。
检查所需的端口/套接字是否可用。以下错误将指示所需的端口和套接字不可用,这意味着它们正在与其他程序一起使用。要识别此问题,请通过禁用服务来跟踪所有问题。另一个原因是防火墙设置阻止对所需端口的访问,因此请修改防火墙设置并授予对所需端口的权限:
建议在Option
文件中定义具体参数。如果参数未定义到文件中,那么 MySQL 8 将考虑默认参数,因此在使用 MySQL 8 之前引用所有可用的参数。
验证是否正确定义了data
目录路径和权限。此目录用作 MySQL 8 的当前目录。要查找数据目录当前设置的路径,请使用--verbose and --help
命令执行mysqld
命令。如果data
目录位于 MySQL 安装目录以外的其他位置,则使用--datadir
选项和mysqld
命令。对于权限,您将得到一个错误代码 13,表示权限被拒绝错误。要解决此问题,请更改所需文件和文件夹的权限。另一种方法是使用 root 用户登录,但这在所有情况下都是不可能的,因此建议使用第一种方法来解决权限问题。
执行上述步骤后,现在您的 MySQL 8 服务已启动,并已连接到指定用户。现在,通过执行以下基本命令来检查 MySQL 8 服务器是否正常工作:
shell> bin/mysqladmin version
此命令列出与已安装的 MySQL 服务器相关的所有信息,其中包含其版本详细信息、协议版本等。连接 MySQL 8 后执行以下命令,以检查是否已从服务器正确检索到信息:
mysql>mysqlshow
mysql>mysqlshow mysql
第一个命令显示服务器中可用的数据库列表。列表可能因系统而异,但列表中必须有mysql
和information_schema
。第二个命令列出在mysql
数据库下创建的所有表。
在以前版本的 MySQL 中,数据字典存储在基于文件的系统中,而在 MySQL 8 中,数据字典存储在数据字典结构中。因此,升级过程将把基于文件的结构移动到数据字典结构中。MySQL5.7GA 版本可以升级到 MySQL8,也就是说 5.7.9 或更高版本。对于 5.7 的非 GA 版本,升级是不可能的。在开始升级过程之前,需要了解以下几点。
升级使用两种方法,这两种方法的实施方法不同。让我们详细讨论这些方法。
顾名思义,这是一个用新版本替换 MySQL 现有旧版本包的过程。启动前,确保旧服务器已停止,更换包后,使用 MySQL 升级在现有数据目录上重新启动 MySQL 8 服务器。
执行以下就地升级步骤:
InnoDB
表空间,使用以下命令旋转主密钥: ALTER INSTANCE ROTATE INNODB MASTER KEY;
innodb_fast_shutdown
命令配置停机参数: SET GLOBAL innodb_fast_shutdown = 1; -- fast shutdown
SET GLOBAL innodb_fast_shutdown = 0; -- slow shutdown
mysqladmin -u root -p shutdown
data
目录启动 MySQL 8 服务器。在服务器启动时,它将检查data
字典表。如果它们不存在,那么服务器将在data
目录中创建表,并使用其正常启动顺序填充元数据和进程。如果这些步骤成功执行,则服务器通过创建backup_metadata_57
目录执行清理。此外,服务器将事件和进程表重命名为event_backup_57
和proc_backup_57
。如果此步骤失败,服务器将恢复所有更改。
mysql_upgrade
: mysql_upgrade -u root -p
导出或转储旧 MySQL 版本。安装新的 MySQL 8 版本,并通过 MySQL 升级将转储文件加载到新的 MySQL 8 版本中。执行以下步骤以应用逻辑升级:
mysqldump
命令导出数据: mysqldump -u root -p --add-drop-table --routines --events --all-databases --
force > data-for-upgrade.sql
The--routines
和--events
选项用于在转储文件中包括存储的例程和事件,并明确定义这些选项以获得效果。
data
目录: mysqld --initialize --datadir=/path/to/8.0-datadir
data
目录启动 MySQL 8 服务器: mysqld_safe --user=mysql --datadir=/path/to/8.0-datadir
MySQL
数据库中: mysql -u root -p --force < data-for-upgrade.sql
mysql_upgrade -u root -p
在开始级配之前,进行以下检查,以避免后期出现故障:
mysqlcheck -u root -p--all-databases--check-upgrade
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE ENGINE NOT IN ('innodb', 'ndbcluster')
AND CREATE_OPTIONS LIKE '%partitioned%';
此命令将列出使用不支持本机分区的存储引擎的表。执行上述查询后,如果找到任何表,请删除该表上的分区并更改存储引擎,如以下命令所示:
ALTER TABLE table_name ENGINE = INNODB;
ALTER TABLE table_name REMOVE PARTITIONING;
SELECT CONSTRAINT_SCHEMA, TABLE_NAME, CONSTRAINT_NAME
FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS
WHERE LENGTH(CONSTRAINT_NAME) > 64;
降级是升级的反向过程,我们将从较高版本的 MySQL 迁移到较低版本的 MySQL。在本节中,我们将介绍如何从 MySQL 8 降级到 MySQL 5.7。不支持版本跳过的降级意味着不支持从 MySQL 8 降级到 MySQL 5.6。在支持版本跳过的同一系列中,意味着您可以通过跳过 MySQL 8.y 版本从 MySQL 8.z 降级到 MySQL 8.x。首先,我们将解释在开始降级之前需要理解的一些基本点。
就地降级意味着关闭新版本的 MySQL 8,用旧版本的 MySQL 替换其二进制文件或包。重新启动旧版本意味着在现有数据目录上重新启动 MySQL 5.7。同一系列中的 GA 版本之间支持此降级方法。对就地降级执行以下步骤:
data
目录中删除InnoDB
重做日志文件,以避免降级问题: rm ib_logfile*
data
目录,使用以下命令启动 MySQL 的降级版本: mysqld_safe --user=mysql --datadir=/path/to/existing-datadir
mysql_upgrade
命令: mysql_upgrade -u root -p
For MySQL installation based on APT, SLES, and the Yum repository installations, in-place downgrades are not supported
在新版本中使用mysqldump
转储所有表。使用新数据库安装 MySQL 8 的新版本,并将旧版本转储加载到新数据库中。同样的 GA 发布系列和发布级别也支持这种降级。MySQL 8.0 到 5.7 的降级支持使用逻辑降级方法
要执行逻辑降级,请执行以下步骤:
mysqldump -u root -p --add-drop-table --routines --events
--all-databases --force > data-for-downgrade.sql
mysqladmin -u root -p shutdown
data
目录初始化为较旧的 MySQL 版本: mysqld --initialize --user=mysql
data
目录启动旧的 MySQL,代码如下: mysqld_safe --user=mysql --datadir=/path/to/new-datadir
mysql -u root -p --force < data-for-upgrade.sql
mysql_upgrade
: mysql_upgrade -u root -p
mysqladmin -u root -p shutdown
mysqld_safe --user=mysql --datadir=/path/to/new-datadir
本节介绍降级前需要用户手动执行的一些更改:
mysql.ibd
的表空间文件中。因此,在降级到 MySQL 5.7 之前,使用以下命令将系统表移回各个表空间文件: ALTER TABLE mysql.columns_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.component TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.db TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.default_roles TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.engine_cost TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.func TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.general_log TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.global_grants TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.gtid_executed TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_category TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_keyword TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_relation TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.help_topic TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.innodb_index_stats TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.innodb_table_stats TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.plugin TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.procs_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.proxies_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.role_edges TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.server_cost TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.servers TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_master_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_relay_log_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slave_worker_info TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.slow_log TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.tables_priv TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_leap_second TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_name TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_transition TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.time_zone_transition_type TABLESPACE=innodb_file_per_table;
ALTER TABLE mysql.user TABLESPACE=innodb_file_per_table;
在 MySQL 8.0.2 中,六个系统表的存储引擎从 MyISAM 变为 InnoDB。他们的名字是columns_priv
、db
、procs_priv
、tables_priv
和user
。因此,在降级之前,通过执行以下命令更改这些表的存储引擎。对其余表格应用相同的命令:
ALTER TABLE mysql.columns_priv ENGINE='MyISAM'
STATS_PERSISTENT=DEFAULT
在 MySQL 8.0.2 中,mysql.usertable
通过添加两个表进行了更改,因此,在降级到 MySQL 5.7 之前,请从表中删除这些列:
ALTER TABLE mysql.user drop Create_role_priv;
ALTER TABLE mysql.user drop Drop_role_priv;
innodb_fast_shutdown
选项关闭 MySQL。使用innodb_fast_shutdown=0
关闭服务器。建议就地降级时删除重做日志。选择合适的软件及其版本进行开发是一个重要的阶段,对吗?在本章中,我们了解了如何通过理解 MySQL 8 的版本模式来选择适当的版本。我们还学习了在 Microsoft Windows 中使用安装程序和命令行安装 MySQL 8 的执行步骤。对于 Linux 平台,我们使用 Yum 存储库、RPM 包和 Debian 包安装了 MySQL 8。安装后描述了从 MySQL 8 开始的基本配置。最后,我们解释了如何通过执行步骤从 MySQL 8 升级和降级。
在下一章中,我们将了解 MySQL 8 可用的各种程序和工具。它主要关注如何将这些程序用于 MySQL 8 以及命令行执行。**