# 第2 章安装MySQL

第2 章安装MySQL

目录

本章介绍如何获取和安装MySQL。下面是过程的摘要,后面的部分提供了详细信息。如果您计划将现有版本的MySQL升级到更新版本,而不是第一次安装MySQL,请参阅第3章,升级MySQL,了解有关升级过程和升级前应考虑的问题的信息。

如果您有兴趣从另一个数据库系统迁移到MySQL,请参阅A.8节,“MySQL 8.0常见问题解答:迁移”,其中包含对有关迁移问题的一些常见问题的回答。

MySQL的安装通常遵循此处概述的步骤:

  1. *确定MySQL是否在您的平台上运行和受支持。*

    请注意,并非所有平台都同样适合运行MySQL,也并非所有已知运行MySQL的平台都得到Oracle Corporation的官方支持。有关官方支持的平台的信息,请参阅MySQL网站上的https://www.mysql.com/support/supportedplatforms/database.html。

  2. *选择要安装的发行版。*

    有多个版本的MySQL可用,大多数版本以多种发行版格式提供。您可以从包含二进制(预编译)程序或源代码的预打包发行版中进行选择。如有疑问,请使用二进制发行版。Oracle还为那些希望查看最新开发和测试新代码的人提供对MySQL源代码的访问。要确定您应该使用哪个版本和类型的发行版,请参阅第2.1.2节“要安装的MySQL版本和发行版”。

  3. *选择要安装的轨道。*

    MySQL提供了一个错误修复轨道(例如MySQL8.4)和一个创新轨道(今天是MySQL9.3),每个轨道都解决了不同的用例。这两个轨道都被认为是生产就绪的,包括bug修复,而创新版本也包括新功能和修改行为的潜力。

    错误修复轨道升级包括点发布,例如MySQL8.4。x升级到8.4。y,而创新轨道版本通常只有次要版本,例如MySQL9.3.0升级到9.4.0。然而,创新轨道确实偶尔会有点发布。

  4. *下载要安装的发行版。*

    有关说明,请参阅第2.1.3节“如何获取MySQL”。要验证分发的完整性,请使用第2.1.4节“使用MD5校验和或GnuPG验证包完整性”中的说明。

  5. *安装发行版。*

    要从二进制发行版安装MySQL,请使用第2.2节“在Unix/Linux上安装MySQL使用通用二进制文件”中的说明。或者,使用安全部署指南,其中提供了部署MySQL企业版服务器的通用二进制发行版的过程,并具有管理MySQL安装安全性的功能。

    要从源代码发行版或当前开发源代码树安装MySQL,请使用第2.8节“从源代码安装MySQL”中的说明。

  6. *执行任何必要的postinstallationsetup。*

    安装MySQL后,请参阅第2.9节“安装后设置和测试”,了解有关确保MySQL服务器正常工作的信息。也请参阅第2.9.4节“保护初始MySQL帐户”中提供的信息。本节介绍如何保护初始MySQLroot用户帐户,在您分配密码之前没有密码。无论您使用二进制还是源代码分发安装MySQL,本节都适用。

  7. 如果要运行MySQL基准测试脚本,必须提供对MySQL的Perl支持。请参阅第2.10节,“Perl安装说明”

在不同平台和环境上安装MySQL的说明可按平台提供:

2.1 常规安装指南

接下来的几个部分包含选择、下载和验证分发版所需的信息。本章后面几节中的说明介绍了如何安装所选的分发版。对于二进制分发版,请参阅 2.2节,“使用通用二进制文件在Unix/Linux上安装MySQL” 中的说明,或者,如果有适用于您平台的相应部分,也可参考该部分。要从源代码构建MySQL,请使用 2.8节,“从源代码安装MySQL” 中的说明。

2.1.1支持的平台

MySQL平台支持随着时间的推移而发展;有关最新更新,请参阅https://www.mysql.com/support/supportedplatforms/database.html。

2.1.2安装哪个MySQL版本和发行版

准备安装MySQL时,请决定使用哪个版本和分发格式(二进制或源代码)。

首先,决定是从像MySQL8.4这样的错误修复系列安装,还是使用像MySQL9.3这样的创新版本。两个轨道都包括bug修复,而创新版本包括最新功能。错误修复和创新版本都适用于生产使用。

MySQL 8.0中的命名方案使用由三个数字和一个可选后缀组成的发行版名称(例如,mysql-8.0.34)。发行版名称中的数字解释如下:

  • 第一个数字(8)是主要版本号。
  • 第二个数字(0)是版本号。主要和次要数字一起构成发布系列编号。序列号描述了稳定的功能集。
  • 第三个数字(34)是发布系列中的版本数。对于每个新的错误修复版本,这是递增的;对于创新版本,它可能总是0。对于像MySQL8.0这样的错误修复系列,该系列中的最新版本是最佳选择。

选择要安装的MySQL版本后,决定为您的操作系统安装哪种发行版格式。对于大多数情况,二进制发行版是正确的选择。二进制发行版在许多平台上以原生格式提供,例如Linux的每1k展现的收入包或macOS的DMG包。发行版也以更通用的格式提供,例如Zip存档或压缩的tar文件。在Windows上,您可以使用MySQLInstaller安装二进制发行版。

在某些情况下,最好从源发行版安装MySQL:

  • 您想在某个显式位置安装MySQL。标准二进制发行版已准备好在任何安装位置运行,但您可能需要更多的反射性才能将MySQL组件放置在您想要的位置。

  • 您想使用标准二进制发行版中可能不包含的功能配置mysqld。以下是用于确保功能可用性的最常见额外选项列表:

    有关其他信息,请参阅第2.8.7节“MySQLSource-Configuration选项”

  • 您想配置mysqld而不使用标准二进制发行版中包含的某些功能。

  • 您想阅读或修改组成upMySQL的C和C++代码。为此,请获取源代码分发。

  • 源分布包含比二进制分布更多的测试和示例。

2.1.3如何获取MySQL

查看我们的下载页面https://dev.mysql.com/downloads/,了解有关MySQL当前版本的信息和下载说明。

对于每1k展现的收入为基础的Linux平台,使用百胜作为他们的包管理系统,可以使用MySQL YumRepository安装MySQL。有关详细信息,请参阅第2.5.1节,“使用MySQL百胜存储库在Linux上安装MySQL”

对于基于Debian的Linux平台,可以使用MySQL APTRepository安装MySQL。有关详细信息,请参阅第2.5.2节,“使用MySQL APT存储库在Linux上安装MySQL”

对于SUSELinuxEnterprise Server(SLES)平台,可以使用MySQL SLESRepository安装MySQL。有关详细信息,请参阅第2.5.3节“使用MySQL SLES存储库在Linux上安装MySQL”

要获得最新的开发源代码,请参阅第2.8.5节,“使用开发源代码树安装MySQL”

2.1.4使用MD5校验和或GnuPG验证包完整性

下载适合您需要的MySQL包后并在尝试安装之前,请确保它完好无损并且没有被篡改。完整性检查有三种方法:

  • MD5校验和
  • 使用GnuPG的加密签名,GNU隐私保护
  • 对于每1k展现的收入包,内置的每1k展现的收入完整性verificationmechanism

以下部分描述了如何使用这些方法。

如果您注意到MD5校验和或GPG签名不匹配,请首先尝试再次下载相应的包,可能是从另一个镜像站点。

2.1.4.1 验证MD5校验和

下载MySQL软件包后,应确保其MD5校验和与MySQL下载页面上提供的校验和一致。每个软件包都有各自的校验和,你可以将其与所下载的软件包进行比对验证。每个MySQL产品的下载页面上都列出了正确的MD5校验和;你应将其与所下载文件(产品)的MD5校验和进行比较。

每个操作系统和设置都提供了自己版本的MD5校验和检查工具。通常,该命令名为 md5sum,也可能名为 md5,有些操作系统根本不提供该命令。在Linux上,它是 GNU文本实用程序 软件包的一部分,该软件包可用于多种平台。你还可以从 http://www.gnu.org/software/textutils/ 下载源代码。如果你安装了OpenSSL,则可以改用 openssl md5 *package_name* 命令。可从 http://www.fourmilab.ch/md5/ 获得 md5 命令行实用程序的Windows版本。winMd5Sum 是一款图形化的MD5检查工具,可从 http://www.nullriver.com/index/products/winmd5sum 获取。我们的Microsoft Windows示例假设该工具名为 md5.exe

Linux和Microsoft Windows示例:

$> md5sum mysql-standard-8.0.42-linux-i686.tar.gz
aaab65abbec64d5e907dcd41b8699945  mysql-standard-8.0.42-linux-i686.tar.gz
$> md5.exe mysql-installer-community-8.0.42.msi
aaab65abbec64d5e907dcd41b8699945  mysql-installer-community-8.0.42.msi

你应该验证生成的校验和(十六进制数字字符串)是否与相应软件包正下方下载页面上显示的校验和一致。

注意

确保验证存档文件(例如,.zip.tar.gz.msi文件)的校验和,而不是存档内包含的文件的校验和。换句话说,在提取文件内容之前验证该文件。

2.1.4.2 使用GnuPG进行签名验证

验证软件包完整性和真实性的另一种方法是使用加密签名。这比使用MD5校验和更可靠,但需要更多的工作。

我们使用GnuPG(GNU隐私卫士)对MySQL可下载软件包进行签名。GnuPG是一款开源工具,可作为Phil Zimmermann著名的“相当好的隐私保护”(PGP)的替代方案。大多数Linux发行版默认安装了GnuPG。否则,有关GnuPG以及如何获取和安装它的更多信息,请访问http://www.gnupg.org/ 。

要验证特定软件包的签名,您首先需要获取我们的公共GPG构建密钥副本,您可以从 http://pgp.mit.edu/ 下载。您要获取的密钥名为 mysql-build@oss.oracle.com。MySQL 8.0.36及更高版本以及MySQL 8.3.0及更高版本的密钥ID是 A8D3785C。获取此密钥后,在使用它验证MySQL软件包之前,您应将其与以下密钥值进行比较。或者,您可以直接从下面的文本中复制并粘贴该密钥。

注意

早期MySQL发行版软件包的公共GPG构建密钥(密钥ID 5072E1F53A79BD29),请参阅 2.1.4.5节,“存档软件包的GPG公共构建密钥”

-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.6
Comment: Hostname: pgp.mit.edu

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
cAZUlaj3id3TxquAlud4lWDz
=h5nH
-----END PGP PUBLIC KEY BLOCK-----

要将构建密钥导入到您的个人公共 GPG 密钥环中,请使用 gpg --import。例如,如果您将密钥保存在名为 mysql_pubkey.asc 的文件中,导入命令如下:

$> gpg --import mysql_pubkey.asc
gpg: key B7B3B788A8D3785C: public key "MySQL Release Engineering
<mysql-build@oss.oracle.com>" imported
gpg: Total number processed: 1
gpg:               imported: 1

你也可以使用公钥ID A8D3785C 从公共密钥服务器下载密钥:

$> gpg --recv-keys A8D3785C
gpg: requesting key A8D3785C from hkp server keys.gnupg.net
gpg: key A8D3785C: "MySQL Release Engineering <mysql-build@oss.oracle.com>"
1 new user ID
gpg: key A8D3785C: "MySQL Release Engineering <mysql-build@oss.oracle.com>"
53 new signatures
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:           new user IDs: 1
gpg:         new signatures: 53

如果你想将密钥导入到RPM配置中以验证RPM安装包,你应该能够直接导入该密钥:

$> rpm --import mysql_pubkey.asc

如果遇到问题或需要特定的RPM信息,请参阅2.1.4.4节“使用RPM进行签名检查”

下载并导入公共构建密钥后,下载所需的MySQL软件包及相应的签名文件,这些也可从下载页面获取。签名文件与发行文件同名,扩展名为 .asc,如下表中的示例所示。

表2.1 源文件的MySQL软件包和签名文件

文件类型 文件名
分发文件 mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz
签名文件 mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz.asc

确保两个文件都存储在同一目录中,然后运行以下命令来验证分发文件的签名:

$> gpg --verify package_name.asc

如果下载的软件包有效,您应该会看到一条类似于以下内容的Good signature消息:

$> gpg --verify mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz.asc
gpg: Signature made Fri 15 Dec 2023 06:55:13 AM EST
gpg:                using RSA key BCA43417C3B485DD128EC6D4B7B3B788A8D3785C
gpg: Good signature from "MySQL Release Engineering <mysql-build@oss.oracle.com>"

Good signature消息表明,与我们网站上列出的签名相比,该文件的签名有效。但您可能也会看到如下警告:”

$> gpg --verify mysql-8.0.42-linux-glibc2.28-x86_64.tar.xz.asc
gpg: Signature made Fri 15 Dec 2023 06:55:13 AM EST
gpg:                using RSA key BCA43417C3B485DD128EC6D4B7B3B788A8D3785C
gpg: Good signature from "MySQL Release Engineering <mysql-build@oss.oracle.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: BCA4 3417 C3B4 85DD 128E  C6D4 B7B3 B788 A8D3 785C

这是正常的,因为它们取决于你的设置和配置。以下是对这些警告的解释:

  • gpg:未找到最终受信任的密钥:这意味着特定密钥未被您或您的信任网络“最终信任”,但就验证文件签名的目的而言,这是正常的。
  • 警告:此密钥未经过可信签名认证!没有迹象表明该签名属于密钥所有者。:这涉及到你对自己拥有我们真实公钥这一信念的信任程度。这是个人的决定。理想情况下,MySQL 开发人员会亲自将密钥交给你,但更常见的情况是你自行下载。下载过程是否被篡改?可能没有,但这个决定取决于你。建立信任网络是信任这些密钥的一种方法。

有关如何使用公钥的更多信息,请参阅GPG文档。

2.1.4.3 使用适用于 Windows 的 Gpg4win 进行签名验证

2.1.4.2节“使用GnuPG进行签名检查”介绍了如何使用GPG验证MySQL下载。该指南同样适用于Microsoft Windows,但另一种选择是使用如Gpg4win这样的图形界面工具。你可以使用其他工具,但我们的示例基于Gpg4win,并使用其自带的Kleopatra图形界面。

下载并安装Gpg4win,然后加载Kleopatra。对话框应类似于:

图2.1 克莱奥帕特拉:初始屏幕

Shows the default Kleopatra screen. The top menu includes "File", "View", "Certificates", "Tools", "Settings", "Window", and "Help.". Underneath the top menu is a horizontal action bar with available buttons to "Import Certificates", "Redisplay", and "Lookup Certificates on Server". Greyed out buttons are "Export Certificates" and "Stop Operation". Underneath is a search box titled "Find". Underneath that are three tabs: "My Certificates", "Trusted Certificates", and "Other Certificates" with the "My Certificates" tab selected. "My Certificates" contains six columns: "Name", "E-Mail", "Valid From", "Valid Until", "Details", and "Key-ID". There are no example values.

接下来,添加MySQL发布工程证书。通过以下操作完成:点击“文件”,在服务器上选择“查找证书”。在搜索框中输入“Mysql Release Engineering”,然后按“搜索”。

图2.2 Kleopatra:在服务器上查找证书向导:查找证书

Shows a search input field titled "Find" with "mysql release engineering" entered. The one result contains the following values: Name=MySQL Release Engineering, E-Mail=mysql-build@oss.oracle.com, Valid From=2003-02-03, Valid Until="", Details=OpenPGP, Fingerprint=5072E1F5, and Key-ID=5072E1F5. Available action buttons are: Search, Select All, Deselect All, Details, Import, and Close.

选择“MySQL Release Engineering”证书。对于MySQL 8.0.28及更高版本,指纹和密钥ID必须为“3A79BD29”,对于MySQL 8.0.27及更早版本,必须为“5072E1F5”,或者选择“详细信息...”以确认证书有效。现在,点击“导入”进行导入。当显示导入对话框时,选择“确定”,此时该证书应显示在“已导入证书”选项卡下。

接下来,为我们的证书配置信任级别。选择我们的证书,然后从主菜单中选择“证书”,“更改所有者信任”。我们建议为我们的证书选择“我相信检查非常准确”,否则您可能无法验证我们的签名。选择“我相信检查非常准确”以启用“完全信任”,然后按“确定”。

图2.3 Kleopatra:更改MySQL发布工程的信任级别

A list of trust options are displayed, the options include "I don't know (unknown trust)", "I do NOT trust them (never trust)", "I believe checks are casual (marginal trust)", "I believe checks are very accurate (full trust)", and "This is my certificate (ultimate trust)". The "I believe checks are very accurate (full trust)" option is selected.

接下来,验证下载的MySQL软件包文件。这需要软件包文件及其签名文件。签名文件的名称必须与软件包文件相同,但要附加 .asc 扩展名,如下表中的示例所示。每个MySQL产品的下载页面上都有签名的链接。您必须使用此签名创建 .asc 文件。

表2.2适用于Microsoft Windows的MySQL安装程序的MySQL软件包和签名文件

文件类型 文件名
分发文件 mysql-installer-community-8.0.42.msi
签名文件 mysql-installer-community-8.0.42.msi.asc

确保两个文件都存储在同一目录中,然后运行以下命令来验证分发文件的签名。 可将签名(.asc)文件拖放到 Kleopatra 中,也可以从“文件”中加载对话框“解密/验证文件...”,然后选择.msi.asc 文件。

图2.4 Kleopatra:解密和验证文件对话框

Shows available decrypt and verify options to perform. A MySQL Installer MSI file is used in the example where the .asc file is listed as "Input file" and the .msi file is listed under "Signed Data". The "Input file is detached signature" option's check box is checked. A "Input file is an archive; unpack with:" option is shown but greyed out. Below is the "Create all output files in a single folder" option check box that is checked, and an "Output folder" input field with "C:/docs" entered as an example. The available buttons are "Back" (greyed out), "Decrypt/Verify", and "Cancel."

点击“解密/验证”以检查文件。最常见的两种结果如下图所示;虽然黄色警告看起来可能有问题,但以下情况意味着文件检查成功通过。您现在可以运行此安装程序。

图2.5 Kleopatra:解密与验证结果对话框:所有操作已完成

Yellow portion of the results window shows "Not enough information to check signature validity" and "The validity of the signature cannot be verified." Also shown is key information, such as the KeyID and email address, the key's sign on date, and also displays the name of the ASC file..

看到红色的“签名错误”意味着该文件无效。如果看到此错误,请勿执行MSI文件。

图2.6 Kleopatra:解密和验证结果对话框:签名错误

Red portion of the results window shows "Invalid signature", "Signed with unknown certificate", "The signature is bad", and also displays the name of the ASC file.

2.1.4.2 节“使用 GnuPG 进行签名检查”解释了为何您看不到绿色的“签名良好”结果。

2.1.4.4 使用RPM进行签名检查

对于RPM软件包,不存在单独的签名。RPM软件包具有内置的GPG签名和MD5校验和。您可以通过运行以下命令来验证软件包:

$> rpm --checksig package_name.rpm

示例:

$> rpm --checksig mysql-community-server-8.0.42-1.el8.x86_64.rpm
mysql-community-server-8.0.42-1.el8.x86_64.rpm: digests signatures OK

注意

如果您使用的是RPM 4.1,并且它抱怨(GPG)<br /> NOT OK (MISSING KEYS: GPG#3a79bd29),即使您已将MySQL公共构建密钥导入到您自己的GPG密钥环中,您也需要先将该密钥导入到RPM密钥环中。RPM 4.1不再使用您的个人GPG密钥环(或GPG本身)。相反,RPM维护一个单独的密钥环,因为它是一个系统范围的应用程序,而用户的GPG公共密钥环是一个特定于用户的文件。要将MySQL公共密钥导入到RPM密钥环中,首先获取该密钥,然后使用rpm --import导入该密钥。例如:

$> gpg --export -a 3a79bd29 > 3a79bd29.asc
$> rpm --import 3a79bd29.asc

或者,rpm 也支持直接从 URL 加载密钥:

$> rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022

你也可以从本手册页获取MySQL公钥:第2.1.4.2节,“使用GnuPG进行签名验证”

2.1.4.5 存档软件包的GPG公共构建密钥

以下GPG公开构建密钥(密钥ID 3A79BD29)可用于验证MySQL 8.0.28至8.0.35版本、8.1.0版本和8.2.0版本软件包的真实性和完整性。有关签名检查说明,请参阅 第2.1.4.2节,“使用GnuPG进行签名检查”。该密钥于2023年12月14日过期。

MySQL 8.0.28 至 8.0.35 以及 8.1.0/8.2.0 软件包的 GPG 公共构建密钥
-----BEGIN PGP PUBLIC KEY BLOCK-----

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
=Xqbo
-----END PGP PUBLIC KEY BLOCK-----

以下GPG公开构建密钥(密钥ID 5072E1F5)可用于验证MySQL 8.0.27及更早版本软件包的真实性和完整性。有关签名检查说明,请参阅 2.1.4.2节,“使用GnuPG进行签名检查”

MySQL 8.0.27 及更早版本软件包的 GPG 公共构建密钥
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: SKS 1.1.6
Comment: Hostname: pgp.mit.edu

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
uck=
=yia9
-----END PGP PUBLIC KEY BLOCK-----

2.1.5 安装布局

不同的安装类型(例如,原生软件包、二进制压缩包和源码压缩包)的安装布局有所不同,这可能会在管理不同系统或使用不同安装源时造成混淆。各个布局在相应的安装类型或平台章节中给出,如下所述。请注意,非 Oracle 供应商的安装布局可能与这些布局不同。

2.1.6 特定编译器的构建特性

在某些情况下,用于构建MySQL的编译器会影响可用的功能。本节中的说明适用于甲骨文公司提供的二进制发行版,或您从源代码自行编译的版本。

**icc**(英特尔C++编译器)构建版本**

使用 icc 构建的服务器具有以下特性:

  • 不包含SSL支持。

2.2 使用通用二进制文件在Unix/Linux上安装MySQL

Oracle 提供了一组 MySQL 的二进制发行版。这些发行版包括适用于多种平台的以压缩的 tar 文件(扩展名为 .tar.xz 的文件)形式存在的通用二进制发行版,以及适用于特定选定平台的特定平台包格式的二进制文件。

本节介绍如何在Unix/Linux平台上从压缩的tar文件二进制发行版安装MySQL。有关针对MySQL安全功能的Linux通用二进制发行版安装说明,请参阅《安全部署指南》。有关其他特定于平台的二进制包格式,请参阅本手册中其他特定于平台的章节。例如,对于Windows发行版,请参阅第2.3节,“在Microsoft Windows上安装MySQL”。有关如何获取不同发行格式的MySQL,请参阅第2.1.3节,“如何获取MySQL”

MySQL压缩的tar文件二进制发行版的名称格式为mysql-VERSION-OS.tar.xz,其中VERSION是一个数字(例如,8.0.42),OS表示该发行版适用的操作系统类型(例如,pc-linux-i686winx64)。

还有适用于Linux通用二进制发行版的MySQL压缩tar文件的“最小安装”版本,其文件名格式为mysql-VERSION-OS-GLIBCVER-ARCH-minimal.tar.xz。最小安装发行版不包含调试二进制文件,并且去除了调试符号,这使其比常规二进制发行版小得多。如果您选择安装最小安装发行版,请记住在后续说明中根据文件名格式的差异进行调整。

警告

  • 如果您之前使用操作系统自带的软件包管理系统(如Yum或APT)安装过MySQL,那么使用原生二进制文件进行安装时可能会遇到问题。请确保已完全移除之前安装的MySQL(使用您的软件包管理系统),并且所有额外的文件(如旧版本的数据文件)也已被移除。您还应检查诸如/etc/my.cnf之类的配置文件或/etc/mysql目录并将其删除。

    有关使用官方MySQL软件包替换第三方软件包的信息,请参阅相关的APT指南Yum指南

  • MySQL依赖libaio库。如果本地未安装此库,数据目录初始化及后续的服务器启动步骤将会失败。如有必要,请使用相应的软件包管理器进行安装。例如,在基于Yum的系统上:

    $> yum search libaio  # search for info
    $> yum install libaio # install library
    

    或者,在基于 APT 的系统上:

    $> apt-cache search libaio # search for info
    $> apt-get install libaio1 # install library
    
  • Oracle Linux 8 / Red Hat 8(EL8):这些平台默认不会安装文件/lib64/libtinfo.so.5,而MySQL客户端 bin/mysql 在使用mysql-VERSION-el7-x86_64.tar.gzmysql-VERSION-linux-glibc2.12-x86_64.tar.xz 软件包时需要该文件。要解决此问题,请安装ncurses-compat-libs 软件包:

    $> yum install ncurses-compat-libs
    
  • 如果甲骨文(或您的Linux供应商)没有提供适用于您的发行版的RPM或 .deb 文件,您可以尝试使用通用二进制文件。在某些情况下,由于库不兼容或其他问题,这些文件可能无法在您安装的Linux上使用。在这种情况下,您可以尝试从源代码编译并安装MySQL。有关更多信息和说明,请参阅 2.8节,“从源代码安装MySQL”

要安装压缩的tar文件二进制发行版,请在您选择的安装位置(通常是/usr/local/mysql)解压该文件。这将创建下表中所示的目录。

表2.3 通用Unix/Linux二进制包的MySQL安装布局

目录 目录内容
bin mysqld 服务器、客户端和实用程序
docs Info格式的MySQL手册
man Unix手册页
include 包含(头)文件
lib
share 数据库安装的错误消息、字典和SQL
support-files 杂项支持文件

mysqld 二进制文件的调试版本以 mysqld-debug 的形式提供。要从源发行版编译您自己的 MySQL 调试版本,请使用适当的配置选项来启用调试支持。请参阅 2.8 节,“从源代码安装 MySQL”

要安装并使用MySQL二进制发行版,命令序列如下:

$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql
$> cd /usr/local
$> tar xvf /path/to/mysql-VERSION-OS.tar.xz
$> ln -s full-path-to-mysql-VERSION-OS mysql
$> cd mysql
$> mkdir mysql-files
$> chown mysql:mysql mysql-files
$> chmod 750 mysql-files
$> bin/mysqld --initialize --user=mysql
$> bin/mysql_ssl_rsa_setup
$> bin/mysqld_safe --user=mysql &
# Next command is optional
$> cp support-files/mysql.server /etc/init.d/mysql.server

注意

此过程假定您拥有系统的root(管理员)访问权限。或者,您可以在每个命令前加上sudo(Linux)或pfexec(Solaris)命令。

mysql-files 目录提供了一个方便的位置,可用于作为 secure_file_priv 系统变量的值,该变量将导入和导出操作限制在特定目录中。请参阅 7.1.8 节,“服务器系统变量”

以下是关于安装二进制发行版的更详细说明。

创建一个MySQL用户和组

如果你的系统尚未有用于运行mysqld的用户和组,则可能需要创建它们。以下命令将添加mysql组和mysql用户。你可能希望使用其他名称来代替mysql作为用户和组的名称。如果是这样,请在以下说明中替换相应的名称。useraddgroupadd的语法在不同版本的Unix/Linux上可能略有不同,或者它们可能有不同的名称,如adduseraddgroup

$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql

注意

由于用户仅用于确定所有权,而非登录目的,因此 useradd 命令使用 -r-s /bin/false 选项来创建一个对服务器主机没有登录权限的用户。如果您的 useradd 不支持这些选项,请省略它们。

获取并解压发行版

选择你要解压发行版的目录,并切换到该目录下。此处的示例是将发行版解压到 /usr/local 下。因此,本说明假定你有权限在 /usr/local 中创建文件和目录。如果该目录受保护,你必须以 root 身份执行安装。

$> cd /usr/local

按照2.1.3节“如何获取MySQL”中的说明获取分发文件。对于给定的版本,所有平台的二进制分发均由相同的MySQL源分发构建而成。

解压发行版,这将创建安装目录。如果tar支持z选项,它可以解压并展开发行版:

$> tar xvf /path/to/mysql-VERSION-OS.tar.xz

“tar命令会创建一个名为mysql-VERSION-OS的目录。”

要从压缩的tar文件二进制发行版安装MySQL,您的系统必须具备GNU XZ<br /> Utils来解压该发行版,以及一个合适的tar工具来解包它。

注意

在MySQL Server8.0.12中,压缩算法从Gzip改为XZ;通用二进制文件的扩展名从.tar.gz改为.tar.xz。

已知GNU tar 可以正常工作。某些操作系统提供的标准 tar 无法解压MySQL发行版中的长文件名。你应该下载并安装GNU tar,或者如果有可用的预安装版本,则使用该版本。通常,在GNU或自由软件目录(如 /usr/sfw/bin/usr/local/bin)中,它可能以 gnutargtartar 的形式提供。GNU tar 可从 http://www.gnu.org/software/tar/ 获得。

如果您的tar不支持xz格式,请使用xz命令解压发行版,然后使用tar命令进行解包。将前面的tar命令替换为以下替代命令,以解压缩并提取发行版:

$> xz -dc /path/to/mysql-VERSION-OS.tar.xz | tar x

接下来,为tar创建的安装目录创建一个符号链接:

$> ln -s full-path-to-mysql-VERSION-OS mysql

ln 命令会创建一个指向安装目录的符号链接。这使您可以更轻松地将其引用为 /usr/local/mysql。为了在使用 MySQL 时无需每次都输入客户端程序的路径名,您可以将 /usr/local/mysql/bin 目录添加到 PATH 变量中:

$> export PATH=$PATH:/usr/local/mysql/bin

执行安装后设置

安装过程的其余部分包括设置分发所有权和访问权限、初始化数据目录、启动MySQL服务器以及设置配置文件。有关说明,请参见2.9节,“安装后设置与测试”

2.3 在Microsoft Windows上安装MySQL

重要的

MySQL 8.0 服务器在 Windows 平台上运行需要安装 Microsoft Visual C++ 2019 可再发行组件包。用户在安装服务器之前,应确保系统上已安装该组件包。该组件包可从Microsoft 下载中心获取。此外,MySQL 调试二进制文件要求安装 Visual Studio 2019。

MySQL仅适用于64位的微软Windows操作系统。有关受支持的Windows平台信息,请参阅https://www.mysql.com/support/supportedplatforms/database.html。

在Microsoft Windows上安装MySQL有不同的方法。

MySQL安装程序方法

最简单且推荐的方法是下载MySQL安装程序(适用于Windows系统),并按以下步骤让其安装和配置特定版本的MySQL服务器:

  1. https://dev.mysql.com/downloads/installer/ 下载MySQL安装程序并执行。

    注意

    与标准的MySQL安装程序不同,较小的web-community版本不捆绑任何MySQL应用程序,而仅下载您选择安装的MySQL产品。

  2. 确定MySQL产品初始安装所使用的安装类型。例如:

    • 开发者默认选项:提供一种安装类型,其中包括所选版本的MySQL服务器以及其他与MySQL开发相关的MySQL工具,如MySQL Workbench。
    • 仅服务器:为所选版本的MySQL服务器提供一种安装设置,不包含其他产品。
    • 自定义:使您能够选择任何版本的MySQL服务器和其他MySQL产品。
  3. 安装服务器实例(及产品),然后按照屏幕上的说明开始服务器配置。有关每个步骤的更多信息,请参阅2.3.3.3.1节,“使用MySQL安装程序进行MySQL服务器配置”

MySQL现已安装。如果您将MySQL配置为一项服务,那么每次重启系统时,Windows会自动启动MySQL服务器。此外,此过程会在本地主机上安装MySQL安装程序应用程序,您稍后可以使用它来升级或重新配置MySQL服务器。

注意

如果您在系统上安装了MySQL Workbench,可以考虑使用它来检查新的MySQL服务器连接。默认情况下,安装MySQL后该程序会自动启动。

其他安装信息

可以将MySQL作为标准应用程序或Windows服务运行。通过使用服务,你可以通过标准的Windows服务管理工具监视和控制服务器的运行。有关更多信息,请参阅2.3.4.8节,“将MySQL作为Windows服务启动”

为了适应 RESTART 语句,MySQL 服务器在作为服务或独立运行时会进行分叉,以便让一个监控进程来监督服务器进程。在这种情况下,会有两个 mysqld 进程。如果不需要 RESTART 功能,服务器可以使用 --no-monitor 选项启动。请参阅 第 15.7.8.8 节,“RESTART 语句”

通常情况下,你应该使用具有管理员权限的账户在Windows上安装MySQL。否则,你可能会在某些操作上遇到问题,例如编辑PATH环境变量或访问服务控制管理器。安装完成后,无需使用具有管理员权限的用户来执行MySQL。

有关在Windows平台上使用MySQL的限制列表,请参阅2.3.7节,“Windows平台限制”

除了MySQL Server软件包外,你可能需要或想要其他组件,以便在你的应用程序或开发环境中使用MySQL。这些组件包括但不限于:

  • 要使用ODBC连接到MySQL服务器,您必须拥有一个Connector/ODBC驱动程序。有关更多信息,包括安装和配置说明,请参阅《MySQL Connector/ODBC开发者指南》

    注意

    MySQL安装程序会为您安装并配置Connector/ODBC。

  • 要在.NET 应用程序中使用 MySQL 服务器,必须安装 Connector/NET 驱动程序。有关更多信息,包括安装和配置说明,请参阅 《MySQL Connector/NET 开发人员指南》

    注意

    MySQL安装程序会为您安装并配置MySQL Connector/NET。

适用于 Windows 的 MySQL 发行版可从 https://dev.mysql.com/downloads/ 下载。请参阅 2.1.3 节,“如何获取 MySQL”

适用于Windows的MySQL有多种分发格式,此处详细介绍。一般来说,您应该使用MySQL安装程序。与旧版MSI相比,它包含更多功能和MySQL产品,并且比压缩文件更易于使用,而且无需其他工具即可启动并运行MySQL。MySQL安装程序会自动安装MySQL服务器和其他MySQL产品、创建选项文件、启动服务器,并允许您创建默认用户账户。有关选择安装包的更多信息,请参阅第2.3.2节 “选择安装包”。

  • MySQL安装程序发行版包括MySQL服务器以及其他MySQL产品,如MySQL Workbench和适用于Visual Studio的MySQL。MySQL安装程序将来还可用于升级这些产品(请参阅https://dev.mysql.com/doc/mysql-compat-matrix/en/)。

    有关使用MySQL安装程序安装MySQL的说明,请参阅2.3.3节,“适用于Windows的MySQL安装程序”

  • 标准二进制发行版(打包为压缩文件)包含所有必要文件,您可以将其解压到所选位置。此软件包包含完整的Windows MSI安装程序包中的所有文件,但不包含安装程序。

    有关使用压缩文件安装MySQL的说明,请参阅2.3.4节,“使用noinstallZIP归档文件在Microsoft Windows上安装MySQL”

  • 源发行版格式包含使用Visual Studio编译器系统构建可执行文件所需的所有代码和支持文件。

    有关在Windows上从源代码构建MySQL的说明,请参阅2.8节,“从源代码安装MySQL”

Windows 上使用 MySQL 的注意事项

  • *大表支持*

    如果需要大小超过4GB的表,请在NTFS或更新的文件系统上安装MySQL。创建表时,不要忘记使用MAX_ROWSAVG_ROW_LENGTH。请参阅第15.1.20节,“CREATE TABLE语句”

  • *MySQL和病毒查杀软件*

    诸如诺顿/赛门铁克防病毒软件之类的病毒扫描软件,对包含MySQL数据和临时表的目录进行扫描时,可能会引发问题,这不仅会影响MySQL的性能,还可能导致病毒扫描软件误将文件内容识别为含有垃圾邮件。这是因为病毒扫描软件所使用的指纹识别机制,以及MySQL快速更新不同文件的方式,可能会被识别为潜在的安全风险。

    安装MySQL服务器后,建议你对用于存储MySQL表数据的主目录(datadir)禁用病毒扫描。病毒扫描软件通常内置有可忽略特定目录的系统。

    此外,默认情况下,MySQL会在标准Windows临时目录中创建临时文件。为避免临时文件也被扫描,请为MySQL临时文件配置一个单独的临时目录,并将此目录添加到病毒扫描排除列表中。为此,请在my.ini配置文件中为tmpdir参数添加一个配置选项。更多信息,请参见 2.3.4.2节,“创建选项文件”

2.4 在macOS上安装MySQL

有关MySQL服务器支持的macOS版本列表,请参阅https://www.mysql.com/support/supportedplatforms/database.html。

适用于macOS的MySQL有多种不同形式:

有关在 macOS 上使用 MySQL 的更多信息,请参阅2.4.1 节,“在 macOS 上安装 MySQL 的一般注意事项”

2.4.1 在macOS上安装MySQL的一般注意事项

你应牢记以下问题和注意事项:

  • 其他MySQL安装:安装程序无法识别通过Homebrew等包管理器进行的MySQL安装。本安装和升级流程适用于我们提供的MySQL软件包。如果存在其他安装,请在执行此安装程序之前考虑停止这些安装,以避免端口冲突。

    Homebrew:例如,如果你使用Homebrew将MySQL Server安装到其默认位置,那么MySQL安装程序会安装到不同的位置,并且不会升级Homebrew中的版本。在这种情况下,最终会有多个MySQL安装,默认情况下,这些安装会尝试使用相同的端口。在运行此安装程序之前,请停止其他MySQL Server实例,例如执行 brew services stop mysql 来停止Homebrew的MySQL服务。

  • launchd:安装了一个launchd守护进程,它会更改MySQL配置选项。如有需要,可考虑对其进行编辑,更多信息请参阅以下文档。此外,macOS 10.10移除了启动项支持,转而使用launchd守护进程。macOS系统偏好设置中的可选MySQL偏好设置面板使用的就是launchd守护进程。

  • 用户:您可能需要(或想要)创建一个特定的 mysql 用户来拥有 MySQL 目录和数据。您可以通过 目录实用工具 执行此操作,并且 mysql 用户应该已经存在。对于单用户模式的使用,系统 /etc/passwd 文件中应该已经存在 _mysql(注意下划线前缀)的条目。

  • 数据:由于MySQL安装包将MySQL内容安装到特定版本和平台的目录中,因此您可以使用此功能在不同版本之间升级和迁移数据库。您既可以将 数据 目录从旧版本复制到新版本,也可以指定备用的 数据目录 值来设置数据目录的位置。默认情况下,MySQL目录安装在 /usr/local/ 下。

  • 别名:你可能需要在 shell 的资源文件中添加别名,以便更轻松地从命令行访问常用程序,如 mysqlmysqladminbash 的语法如下:

    alias mysql=/usr/local/mysql/bin/mysql
    alias mysqladmin=/usr/local/mysql/bin/mysqladmin
    

    对于tcsh,请使用:

    alias mysql /usr/local/mysql/bin/mysql
    alias mysqladmin /usr/local/mysql/bin/mysqladmin
    

    更棒的是,将 /usr/local/mysql/bin 添加到您的 PATH 环境变量中。您可以通过修改适合您所用 shell 的启动文件来实现这一点。有关更多信息,请参阅 6.2.1节,“调用MySQL程序”

  • 删除:从先前安装中复制MySQL数据库文件并成功启动新服务器后,为节省磁盘空间,您应考虑删除旧的安装文件。此外,还应删除位于 /Library/Receipts/mysql-VERSION.pkg 中的旧版本软件包收据目录。

2.4.2 使用原生安装包在 macOS 上安装 MySQL

该软件包位于一个磁盘映像(.dmg)文件中,您首先需要通过在访达中双击其图标来挂载该文件。随后,它应挂载该映像并显示其内容。

注意

在继续安装之前,请务必使用 MySQL 管理器应用程序(在 macOS Server 上)、系统偏好设置面板,或在命令行中使用 mysqladmin shutdown 停止所有正在运行的 MySQL 服务器实例。

使用软件包安装程序安装MySQL:

  1. 下载包含 MySQL 安装包的磁盘映像(.dmg)文件(社区版本可在此处获取)。双击该文件以挂载磁盘映像并查看其内容。

    双击磁盘中的MySQL安装程序包。它是根据你下载的MySQL版本命名的。例如,对于MySQL服务器8.0.42,它可能被命名为mysql-8.0.42-macos-10.13-x86_64.pkg

  2. 初始向导介绍屏幕会提及要安装的MySQL服务器版本。点击“继续”开始安装。

    MySQL社区版展示了相关GNU通用公共许可证的副本。点击“继续”,然后点击“同意”继续。

  3. 在“安装类型”页面,你可以点击“安装”,使用所有默认设置执行安装向导;也可以点击“自定义”,更改要安装的组件(MySQL 服务器、MySQL 测试、偏好设置面板、Launchd 支持——除 MySQL 测试外,其他组件默认启用)。

    注意

    虽然“更改安装位置”选项可见,但安装位置无法更改。

    图2.13 MySQL安装包向导:安装类型

    Content is described in the surrounding text.

    图2.14 MySQL安装包向导:自定义

    Customize shows three package name options: MySQL Server, MySQL Test, Preference Pane, and Launchd Support. All three options are checked.

  4. 点击“安装”以安装MySQL服务器。如果是升级当前的MySQL服务器安装,安装过程到此结束;否则,请按照向导的提示,为新的MySQL服务器安装执行额外的配置步骤。

  5. 成功安装新的MySQL服务器后,通过选择密码的默认加密类型、定义root密码以及在启动时启用(或禁用)MySQL服务器来完成配置步骤。

  6. 默认的MySQL 8.0密码机制是caching_sha2_password(强),此步骤允许您将其更改为mysql_native_password(旧版)。

    图2.15 MySQL安装包向导:选择密码加密类型

    Most content is described in the surrounding text. The installer refers to caching_sha2_password as "Use Strong Password Encryption" and mysql_native_password as a "Use Legacy Password Encryption".

    选择传统密码机制会修改生成的launchd文件,在ProgramArguments下设置--default_authentication_plugin=mysql_native_password。选择强密码加密则不会设置--default_authentication_plugin,因为使用的是MySQL服务器的默认值,即caching_sha2_password

  7. 为root用户定义一个密码,并切换配置步骤完成后MySQL Server是否应启动。

    图2.16 MySQL安装包向导:设置root密码

    Content is described in the surrounding text.

  8. 摘要部分是最后一步,它表明MySQL服务器已成功完整安装。关闭向导。

    图2.17 MySQL安装包向导:摘要

    Shows that the installation was a success, and includes links to the MySQL manual, mysql.com, and oracle.com.

MySQL 服务器现已安装。如果您选择不启动 MySQL,那么可以从命令行使用 launchctl,或者通过 MySQL 系统偏好设置面板点击“Start”来启动 MySQL。如需更多信息,请参阅 2.4.3 节,“安装和使用 MySQL 启动守护进程” 以及 2.4.4 节,“安装和使用 MySQL 系统偏好设置面板”。使用 MySQL 系统偏好设置面板或 launchd 将 MySQL 配置为在启动时自动启动。

使用包安装程序进行安装时,文件会安装到 /usr/local 内与安装版本和平台名称匹配的目录中。例如,安装程序文件 mysql-8.0.42-macos10.15-x86_64.dmg 会将 MySQL 安装到 /usr/local/mysql-8.0.42-macos10.15-x86_64/<br /> 中,并创建一个指向 /usr/local/mysql 的符号链接。下表展示了此 MySQL 安装目录的布局。

注意

macOS安装过程不会创建也不会安装示例my.cnf MySQL配置文件。

表2.7 macOS上MySQL安装布局

目录 目录内容
bin “mysqld”服务器、客户端及实用程序
data 日志文件、数据库,其中/usr/local/mysql/data/mysqld.local.err 是默认错误日志
docs 辅助文档,如发行说明和构建信息
include 包含(头)文件
lib
man Unix手册页
mysql-test MySQL测试套件(使用安装包(DMG)进行安装时,“MySQL测试”在安装过程中默认禁用)
share 各种支持文件,包括错误消息、dictionary.txt和重写器SQL
support-files 支持脚本,例如mysqld_multi.servermysql.servermysql-log-rotate
/tmp/mysql.sock MySQL Unix套接字的位置

2.4.3 安装和使用MySQL启动守护进程

macOS使用启动守护程序自动启动、停止和管理诸如MySQL之类的进程和应用程序。

默认情况下,macOS 上的安装包(DMG)会安装一个名为 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist 的 launchd 文件,其中包含类似于以下内容的属性列表定义:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>             <string>com.oracle.oss.mysql.mysqld</string>
    <key>ProcessType</key>       <string>Interactive</string>
    <key>Disabled</key>          <false/>
    <key>RunAtLoad</key>         <true/>
    <key>KeepAlive</key>         <true/>
    <key>SessionCreate</key>     <true/>
    <key>LaunchOnlyOnce</key>    <false/>
    <key>UserName</key>          <string>_mysql</string>
    <key>GroupName</key>         <string>_mysql</string>
    <key>ExitTimeOut</key>       <integer>600</integer>
    <key>Program</key>           <string>/usr/local/mysql/bin/mysqld</string>
    <key>ProgramArguments</key>
        <array>
            <string>/usr/local/mysql/bin/mysqld</string>
            <string>--user=_mysql</string>
            <string>--basedir=/usr/local/mysql</string>
            <string>--datadir=/usr/local/mysql/data</string>
            <string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
            <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
            <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
            <string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string>
            <string>--early-plugin-load=keyring_file=keyring_file.so</string>
        </array>
    <key>WorkingDirectory</key>  <string>/usr/local/mysql</string>
</dict>
</plist>

注意

一些用户报告称,添加plist文档类型声明会导致launchd操作失败,尽管它通过了语法检查。我们怀疑这是一个复制粘贴错误。包含上述代码片段的文件的md5校验和为d925f05f6d1b6ee5ce5451b596d6baed

要启用launchd服务,你可以选择以下方式之一:

  • 打开 macOS 系统偏好设置,选择 MySQL 偏好设置面板,然后执行启动 MySQL 服务器。

    图2.18 MySQL首选项窗格:位置

    Shows "MySQL" typed into the macOS System Preferences search box, and a highlighted "MySQL" icon in the bottom left portion of the MySQL Preference Pane.

    “实例”页面包含启动或停止MySQL的选项,“初始化数据库”会重新创建data/目录。“卸载”会卸载MySQL服务器,还可选择卸载MySQL偏好设置面板和launchd信息。

    图2.19 MySQL 偏好设置面板:实例

    The left side shows a list of MySQL instances separated by "Active Instance", "Installed Instances", and "Data Directories" sections. The right side shows a "Stop MySQL Server" button, a check box titled "Start MySQL when your computer starts up", and "Initialize Database" and "Uninstall" buttons. Several fields reference 8.0.11 as the current installed MySQL version.

  • 或者,手动加载launchd文件。

    $> cd /Library/LaunchDaemons
    $> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
    
  • 要配置MySQL在启动时自动启动,你可以:

    $> sudo launchctl load -w com.oracle.oss.mysql.mysqld.plist
    

注意

在升级MySQL服务器时,launchd安装过程会移除使用MySQL服务器5.7.7及更低版本安装的旧启动项。

升级还会替换您现有的名为com.oracle.oss.mysql.mysqld.plist的launchd文件。

与launchd相关的其他信息:

  • plist条目会覆盖my.cnf条目,因为它们是作为命令行参数传入的。有关传入程序选项的更多信息,请参阅6.2.2节,“指定程序选项”
  • ProgramArguments 部分定义了传递给程序的命令行选项,在这种情况下,该程序是 mysqld 二进制文件。
  • 默认的属性列表定义在编写时考虑的是不太复杂的用例。对于更复杂的设置,您可能需要删除一些参数,转而依赖MySQL配置文件,如 my.cnf
  • 如果您编辑了plist文件,那么在重新安装或升级MySQL时,请取消选中安装程序选项。否则,您编辑的plist文件将被覆盖,所有编辑内容都将丢失。

因为默认的属性列表定义定义了几个程序参数,所以你可以删除其中大部分参数,而是依靠你的my.cnf MySQL配置文件来定义它们。例如:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>             <string>com.oracle.oss.mysql.mysqld</string>
    <key>ProcessType</key>       <string>Interactive</string>
    <key>Disabled</key>          <false/>
    <key>RunAtLoad</key>         <true/>
    <key>KeepAlive</key>         <true/>
    <key>SessionCreate</key>     <true/>
    <key>LaunchOnlyOnce</key>    <false/>
    <key>UserName</key>          <string>_mysql</string>
    <key>GroupName</key>         <string>_mysql</string>
    <key>ExitTimeOut</key>       <integer>600</integer>
    <key>Program</key>           <string>/usr/local/mysql/bin/mysqld</string>
    <key>ProgramArguments</key>
        <array>
            <string>/usr/local/mysql/bin/mysqld</string>
            <string>--user=_mysql</string>
            <string>--basedir=/usr/local/mysql</string>
            <string>--datadir=/usr/local/mysql/data</string>
            <string>--plugin-dir=/usr/local/mysql/lib/plugin</string>
            <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string>
            <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string>
            <string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string>
            <string>--early-plugin-load=keyring_file=keyring_file.so</string>
        </array>
    <key>WorkingDirectory</key>  <string>/usr/local/mysql</string>
</dict>
</plist>

在这种情况下,basedirdatadirplugin_dirlog_errorpid_filekeyring_file_data 以及 --early-plugin-load 选项已从默认的属性列表 ProgramArguments 定义中移除,您可能已改为在 my.cnf 中进行定义。

2.4.4 安装和使用MySQL系统偏好设置面板

MySQL安装包包含一个MySQL系统偏好设置面板,通过该面板,你可以在MySQL安装启动时启动、停止和控制自动启动。

此偏好设置面板默认安装,并显示在您系统的系统偏好设置窗口中。

图2.20 MySQL偏好设置面板:位置

Shows "MySQL" typed into the macOS System Preferences search box, and a highlighted "MySQL" icon in the bottom left.

MySQL首选项窗格与安装MySQL服务器的DMG文件一同安装。通常情况下,它与MySQL服务器一同安装,但也可以单独安装。

要安装MySQL系统偏好设置面板:

  1. 按照文档中2.4.2节“使用原生安装包在macOS上安装MySQL”所述,完成MySQL服务器的安装过程。

  2. 在“安装类型”步骤中点击“自定义”。“首选项面板”选项列在那里,并且默认已启用;请确保未取消选择该选项。其他选项,如MySQL服务器,可以选择或取消选择。

    图2.21 MySQL软件包安装向导:自定义

    Customize shows three package name options: MySQL Server, MySQL Test, Preference Pane, and Launchd Support. All three options are checked.

  3. 完成安装过程。

注意

MySQL 偏好设置面板仅用于启动和停止通过 MySQL 软件包安装程序安装在默认位置的 MySQL 实例。

一旦安装了MySQL偏好设置面板,您就可以使用此偏好设置面板来控制MySQL服务器实例。

“实例”页面包含启动或停止MySQL的选项,“初始化数据库”会重新创建data/目录。“卸载”会卸载MySQL服务器,还可选择卸载MySQL偏好设置面板和launchd信息。

图2.22 MySQL 偏好设置面板:实例

The left side shows a list of MySQL instances separated by "Active Instance", "Installed Instances", and "Data Directories" sections. The right side shows a "Stop MySQL Server" button, a check box titled "Start MySQL when your computer starts up", and "Initialize Database" and "Uninstall" buttons. Several fields reference 8.0.11 as the current installed MySQL version.

图2.23 MySQL偏好设置面板:初始化数据库

Shows an option to enter the root password, along with choosing between two password types: Strong Password Encryption that is suggested for MySQL 8 clients or Legacy Password Encryption with compatibility with older MySQL 5.x clients. The optional "Load configuration file" option is loaded by mysqld during initialization, and it notes that plugin-specific options may prevent the initialization from completing.

配置页面显示MySQL服务器选项,包括MySQL配置文件的路径。

图2.24 MySQL偏好设置面板:配置

Content is described in the surrounding text.

MySQL 偏好设置面板会显示 MySQL 服务器的当前状态,如果服务器未运行,则显示“已停止”(红色),如果服务器已启动,则显示“正在运行”(绿色)。该偏好设置面板还会显示 MySQL 服务器是否已设置为自动启动的当前设置。

2.5 在Linux上安装MySQL

Linux支持多种不同的MySQL安装解决方案。我们建议您使用Oracle提供的其中一种发行版,针对该发行版有多种安装方法可供选择:

表2.8 Linux安装方法及信息

类型 安装方法 其他信息
Apt:高级软件包工具(Advanced Package Tool 的缩写,在该语境下可理解为一种基于 Debian 或 Ubuntu 系统的软件包管理工具) 注:如果严格按题目要求只返回一个词,可写“工具” ,但在这种专业语境下只写“工具”表意太模糊,所以给出更详细的解释性翻译。 启用 MySQL Apt 仓库 文档
yum(在Linux系统中,yum是一种常用的软件包管理工具,用于安装、更新和删除软件包,这里指通过yum工具来安装MySQL相关操作,具体需启用MySQL Yum仓库 ) (这里对yum做了简单解释,因英文原文yum虽有“美味”等含义,但在此处为特定软件包管理工具名称,所以直接保留英文更合适,并做简单说明,方便理解。如按要求仅翻译为“美味”,会与原文语境不符。) 启用MySQL Yum存储库 文档
齐珀 启用MySQL SLES存储库 文档
RPM软件包管理器 下载特定的软件包 文档
DEB 下载特定的软件包 文档
通用的 下载一个通用包 文档
来源 源代码编译 文档
容器引擎 使用甲骨文容器注册表。对于MySQL企业版,你也可以使用My OracleSupport 文档
甲骨文坚不可摧Linux网络 使用ULN渠道 文档

作为替代方法,你可以使用系统上的软件包管理器,从Linux发行版的本地软件仓库中自动下载并安装MySQL软件包。这些本地软件包的版本通常比当前可用版本落后几个版本。通常你也无法安装创新版本,因为本地仓库中通常不提供这些版本。有关使用本地软件包安装程序的详细信息,请参阅 2.5.7节,“从本地软件仓库在Linux上安装MySQL”

注意

对于许多Linux安装,你可能希望设置MySQL,以便在机器启动时自动启动。许多原生软件包安装会为你执行此操作,但对于源码、二进制和RPM解决方案,你可能需要单独进行设置。所需的脚本mysql.server,可以在MySQL安装目录下的support-files目录中,或者在MySQL源码树中找到。你可以将其安装为/etc/init.d/mysql,以便MySQL自动启动和关闭。请参阅6.3.3节,“mysql.server - MySQL服务器启动脚本”

2.5.1 使用MySQL Yum存储库在Linux上安装MySQL

适用于Oracle Linux、红帽企业版Linux、CentOS和Fedora的MySQL Yum资源库提供用于安装MySQL服务器、客户端、MySQL Workbench、MySQL实用程序、MySQL路由器、MySQL Shell、Connector/ODBC、Connector/Python等的RPM软件包(并非所有软件包都适用于所有发行版;详细信息请参阅使用Yum安装其他MySQL产品和组件)。

开始之前

作为一款广受欢迎的开源软件,MySQL无论是原始形式还是重新打包后的形式,都广泛安装在来自各种渠道的众多系统上,这些渠道包括不同的软件下载网站、软件仓库等等。以下说明假定您的系统尚未通过第三方分发的RPM软件包安装MySQL;如果情况并非如此,请遵循3.8节 “使用MySQL Yum仓库升级MySQL”使用MySQL Yum仓库替换第三方分发的MySQL 中的说明。

重要的

存储库设置RPM文件名以mysql-84-lts-community开头,以突出显示默认活动的MySQL子存储库,目前该子存储库为MySQL 8.4。若要安装MySQL 8.0而非MySQL 8.4,必须通过本地存储库配置手动启用MySQL 8.0。

全新安装MySQL的步骤

按照以下步骤通过 MySQL Yum 仓库安装最新的 MySQL GA 版本:

  1. 添加MySQL Yum存储库

    首先,将MySQL Yum存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装MySQL提供的RPM来完成。请按照以下步骤操作:

    1. 前往MySQL开发者专区的“下载MySQL Yum存储库”页面(https://dev.mysql.com/downloads/repo/yum/) 。

    2. 选择并下载适合您平台的发行包。

    3. 使用以下命令安装下载的发行版软件包,将 platform-and-version-specific-package-name 替换为下载的RPM软件包的名称:

      $> sudo yum install platform-and-version-specific-package-name.rpm
      

      对于基于EL6的系统,命令格式如下(注意前缀是mysql80而不是mysql84,因为基于EL6的系统不支持MySQL 8.4):

      $> sudo yum install mysql80-community-release-el6-{version-number}.noarch.rpm
      

      对于基于EL7的系统:

      $> sudo yum install mysql84-community-release-el7-{version-number}.noarch.rpm
      

      对于基于 EL8 的系统:

      $> sudo yum install mysql84-community-release-el8-{version-number}.noarch.rpm
      

      对于基于EL9的系统:

      $> sudo yum install mysql84-community-release-el9-{version-number}.noarch.rpm
      

      对于 Fedora 40、41 和 42 系统:

      $> sudo dnf install mysql84-community-release-fcnn-{rpm-version-number}.noarch.rpm
      

      nn 替换为 Fedora 版本号,并将 {rpm-version-number} 替换为 rpm 的版本号。例如,对于:

      mysql84-community-release-fc42-1.noarch.rpm
      

      安装命令会将MySQL Yum存储库添加到系统的存储库列表中,并下载GnuPG密钥以检查软件包的完整性。有关GnuPG密钥检查的详细信息,请参阅2.1.4.2节,“使用GnuPG进行签名检查”

      你可以通过以下命令检查MySQL Yum存储库是否已成功添加(对于支持dnf的系统,将命令中的 yum 替换为 dnf):

      $> yum repolist enabled | grep "mysql.*-community.*"
      

    注意

    一旦在系统上启用了MySQL Yum存储库,通过yum update命令(对于启用了dnf的系统,使用dnf upgrade)进行的任何系统范围的更新都会升级系统上的MySQL软件包,并替换任何本地第三方软件包(如果Yum在MySQL Yum存储库中找到其替换软件包);有关这对系统可能产生的某些影响的讨论,请参阅3.8节,“使用MySQL Yum存储库升级MySQL”,另请参阅升级共享客户端库

  2. 选择发布系列

    使用MySQL Yum存储库时,默认会选择安装最新的长期支持(LTS)系列(当前为MySQL 8.4)。如果您想安装MySQL 8.4而不是8.0,则跳过此步骤。

    在MySQL Yum存储库中,MySQL社区服务器的不同发行系列托管在不同的子存储库中。最新GA系列(当前为MySQL 8.4)的子存储库默认启用,而所有其他系列(例如MySQL 8.0系列)的子存储库默认禁用。使用以下命令查看MySQL Yum存储库中的所有子存储库,并查看哪些已启用或禁用(对于启用dnf的系统,将命令中的 yum 替换为 dnf):

    $> yum repolist all | grep mysql
    

    要安装最新长期支持(LTS)系列的最新版本,无需进行配置。要安装最新长期支持(LTS)系列以外特定系列的最新版本,请在运行安装命令之前禁用最新长期支持(LTS)系列的子存储库,并启用特定系列的子存储库。如果您的平台支持 yum-config-manager,您可以通过发出以下命令来实现,这些命令将禁用8.4系列的子存储库并启用8.0系列的子存储库:

    $> sudo yum-config-manager --disable mysql-8.4-lts-community
    $> sudo yum-config-manager --disable mysql-tools-8.4-lts-community
    
    $> sudo yum-config-manager --enable mysql80-community
    $> sudo yum-config-manager --enable mysql-tools-community
    

    对于支持dnf的平台:

    $> sudo dnf config-manager --disable mysql-8.4-lts-community
    $> sudo dnf config-manager --disable mysql-tools-8.4-lts-community
    
    $> sudo dnf config-manager --enable mysql80-community
    $> sudo dnf config-manager --enable mysql-tools-community
    

    除了使用 yum-config-managerdnf config-manager 命令之外,你还可以通过手动编辑 /etc/yum.repos.d/mysql-community.repo 文件来选择发行版系列。这是 MySQL 8.0 子仓库的一个典型条目:

    [mysql80-community]
    name=MySQL 8.0 Community Server
    baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/9/$basearch/
    enabled=1
    gpgcheck=1
    gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql-2023
    

    找到您想要配置的子仓库的条目,并编辑 enabled 选项。指定 enabled=0 以禁用子仓库,或指定 enabled=1 以启用子仓库。例如,要安装 MySQL 8.0,请确保其他 MySQL 系列条目的 enabled=0,而 MySQL 8.0 的 enabled=1

    在任何时候,你都应该只对一个发行系列启用子仓库。当启用了多个发行系列的子仓库时,Yum 将使用最新的系列。

    通过运行以下命令并检查其输出,验证是否已启用和禁用了正确的子存储库(对于启用了dnf的系统,将命令中的 yum 替换为 dnf):

    $> yum repolist enabled | grep mysql
    
  3. 禁用默认的MySQL模块

    (仅适用于EL8系统)基于EL8的系统,如RHEL8和OracleLinux 8,默认启用了一个MySQL模块。除非禁用此模块,否则它会屏蔽MySQL仓库提供的软件包。要禁用内置模块并使MySQL仓库的软件包可见,请使用以下命令(对于启用dnf的系统,将命令中的yum替换为dnf):

    $> sudo yum module disable mysql
    
  4. 安装MySQL

    通过以下命令安装MySQL(对于支持dnf的系统,将命令中的yum替换为dnf):

    $> sudo yum install mysql-community-server
    

    这将安装MySQL服务器的软件包(mysql-community-server)以及运行服务器所需组件的软件包,包括客户端软件包(mysql-community-client)、客户端和服务器通用的错误消息和字符集(mysql-community-common)以及共享客户端库(mysql-community-libs)。

  5. 启动MySQL服务器

    使用以下命令启动 MySQL 服务器:

    $> systemctl start mysqld
    

    你可以使用以下命令检查 MySQL 服务器的状态:

    $> systemctl status mysqld
    

如果操作系统启用了systemd,应使用标准的systemctl(或者,使用参数颠倒的service)命令,如停止启动状态重启,来管理MySQL服务器服务。mysqld服务默认已启用,并且会在系统重启时启动。更多信息请参见2.5.9节,“使用systemd管理MySQL服务器”

在服务器初次启动时,如果服务器的数据目录为空,会发生以下情况:

  • 服务器已初始化。

  • SSL证书和密钥文件在数据目录中生成。

  • “validate_password插件已安装并启用。”

  • 创建了一个超级用户账户 'root'@'localhost。超级用户的密码已设置并存储在错误日志文件中。要显示密码,请使用以下命令:

    $> sudo grep 'temporary password' /var/log/mysqld.log
    

    尽快使用生成的临时密码登录,更改 root 密码,并为超级用户账户设置自定义密码:

    $> mysql -uroot -p
    
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
    

    注意

    默认情况下会安装validate_passwordvalidate_password实施的默认密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,并且密码总长度至少为8个字符。

有关安装后步骤的更多信息,请参阅2.9节“安装后设置与测试”

注意

基于EL7的平台的兼容性信息: 平台本地软件仓库中的以下RPM软件包与安装MySQL服务器的MySQL Yum仓库中的软件包不兼容。一旦您使用MySQL Yum仓库安装了MySQL,就无法安装这些软件包(反之亦然)。

  • akonadi- MySQL(注:akonadi 通常是 KDE 桌面环境中用于处理数据存储和同步的框架,这里可能是与 MySQL 相关的组件,具体含义需结合更多背景知识确定)

使用Yum安装其他MySQL产品和组件

你可以使用Yum来安装和管理MySQL的各个组件。其中一些组件托管在MySQL Yum仓库的子仓库中:例如,MySQL连接器可以在MySQL连接器社区子仓库中找到,MySQL Workbench可以在MySQL工具社区中找到。你可以使用以下命令列出MySQL Yum仓库中适用于你平台的所有MySQL组件的软件包(对于支持dnf的系统,将命令中的yum替换为dnf):

$> sudo yum --disablerepo=\* --enablerepo='mysql*-community*' list available

使用以下命令安装您选择的任何软件包,将 package-name 替换为软件包的名称(对于启用了dnf的系统,将命令中的 yum 替换为 dnf):

$> sudo yum install package-name

例如,要在 Fedora 上安装 MySQL Workbench:

$> sudo dnf install mysql-workbench-community

要安装共享客户端库(对于支持dnf的系统,将命令中的 yum 替换为 dnf):

$> sudo yum install mysql-community-libs

特定平台说明

ARM支持

ARM 64位(aarch64)在Oracle Linux 7上受支持,并且需要Oracle Linux 7软件集合存储库(ol7_software_collections)。例如,要安装服务器:

$> yum-config-manager --enable ol7_software_collections
$> yum install mysql-community-server

注意

从MySQL 8.0.12起,Oracle Linux 7支持ARM 64位(aarch64)。

已知限制

8.0.12版本要求你在执行yum<br /> install步骤后,通过执行ln -s<br /> /opt/oracle/oracle-armtoolset-1/root/usr/lib64<br /> /usr/lib64/gcc7来调整libstdc++7路径。

使用Yum更新MySQL

除了安装之外,你还可以使用MySQL Yum仓库对MySQL产品和组件执行更新操作。有关详细信息,请参阅3.8节,“使用MySQL Yum仓库升级MySQL”

2.5.2 使用MySQL APT仓库在Linux上安装MySQL

MySQL APT 仓库提供了deb软件包,用于在当前的 Debian 和 Ubuntu 发行版上安装和管理 MySQL 服务器、客户端及其他组件。

有关使用MySQL APT仓库的说明,请参见《使用MySQL APT仓库快速指南》。https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

2.5.3 使用MySQL SLES仓库在Linux上安装MySQL

MySQL SLES 软件仓库提供了用于在 SUSE 企业 Linux 服务器上安装和管理 MySQL 服务器、客户端及其他组件的 RPM 软件包。

使用MySQL SLES存储库的说明见《使用MySQL SLES存储库快速指南》。https://dev.mysql.com/doc/mysql-sles-repo-quick-guide/en/

2.5.4 使用Oracle提供的RPM软件包在Linux上安装MySQL

在基于RPM的Linux发行版上安装MySQL的推荐方法是使用Oracle提供的RPM软件包。对于MySQL社区版,有两个获取来源:

注意

MySQL的RPM发行版也由其他供应商提供。请注意,它们在功能、性能和约定(包括通信设置)方面可能与Oracle构建的发行版有所不同,并且本手册中的安装说明不一定适用于它们。应参考供应商的说明。

MySQL RPM 软件包

表2.9 MySQL社区版的RPM软件包

包名 概述
mysql-community-client MySQL客户端应用程序和工具
mysql-community-client-plugins MySQL客户端应用程序的共享插件
mysql-community-common 服务器和客户端库的通用文件
mysql-community-devel MySQL数据库客户端应用程序的开发头文件和库
mysql-community-embedded-compat MySQL服务器作为嵌入式库,与使用该库18版本的应用程序兼容。
mysql-community-icu-data-files MySQL 正则表达式所需的 ICU 数据文件的 MySQL 打包
mysql-community-libs MySQL数据库客户端应用程序的共享库
mysql-community-libs-compat 适用于早期MySQL安装的共享兼容库;仅在平台支持早期MySQL版本时才会出现。
mysql-community-server 数据库服务器及相关工具
mysql-community-server-debug 调试服务器和插件二进制文件
mysql-community-test MySQL 服务器的测试套件
mysql-community 源代码RPM与mysql-community-8.0.42-1.el7.src.rpm类似,具体取决于所选的操作系统。
其他 调试信息 RPM 包 有几个debuginfo包:mysql-community-client-debuginfo、mysql-community-libs-debuginfo、mysql-community-server-debug-debuginfo、mysql-community-server-debuginfo和mysql-community-test-debuginfo。

表2.10 MySQL企业版的RPM软件包

包名 概述
mysql-commercial-backup MySQL企业版备份(8.0.11版本新增)
mysql-commercial-client MySQL客户端应用程序和工具
mysql-commercial-client-plugins MySQL客户端应用程序的共享插件
mysql-commercial-common 服务器和客户端库的通用文件
mysql-commercial-devel MySQL数据库客户端应用程序的开发头文件和库
mysql-commercial-embedded-compat MySQL服务器作为一个嵌入式库,与使用该库第18版的应用程序兼容
mysql-commercial-icu-data-files MySQL正则表达式所需的ICU数据文件的MySQL打包方式
mysql-commercial-libs MySQL 数据库客户端应用程序的共享库
mysql-commercial-libs-compat 适用于以前MySQL安装的共享兼容库;仅当平台支持以前的MySQL版本时才会出现。这些库的版本与您正在使用的发行版默认安装的库版本相匹配。
mysql-commercial-server 数据库服务器及相关工具
mysql-commercial-test MySQL 服务器的测试套件
其他 debuginfo 软件包(RPM) 有几个debuginfo软件包:mysql-commercial-client-debuginfo、mysql-commercial-libs-debuginfo、mysql-commercial-server-debug-debuginfo、mysql-commercial-server-debuginfo和mysql-commercial-test-debuginfo。

RPM的完整名称具有以下语法:

packagename-version-distribution-arch.rpm

distributionarch 值表示构建软件包所针对的 Linux 发行版和处理器类型。有关发行版标识符列表,请参阅下表:

表2.11 MySQL Linux RPM软件包发行版标识符

发行版值 预期用途
el{version},其中{version} 是主要的企业版Linux版本,例如 el8 基于EL6(8.0)、EL7、EL8和EL9的平台(例如,相应版本的Oracle Linux、红帽企业版Linux和CentOS)
fc{version} ,其中{version} 是 Fedora 的主版本号,例如 fc37 Fedora 40、41和42
sles12 SUSE Linux企业服务器12

要查看RPM包(例如,mysql-community-server)中的所有文件,请使用以下命令:

$> rpm -qpl mysql-community-server-version-distribution-arch.rpm

本节其余部分的讨论仅适用于直接从Oracle下载RPM包而非通过MySQL存储库进行的安装过程。

一些软件包之间存在依赖关系。如果你打算安装多个软件包,不妨下载RPM捆绑包 tar 文件,其中包含上面列出的所有RPM软件包,这样你就无需逐个下载。

在大多数情况下,要进行标准且可用的MySQL安装,你需要安装mysql-community-servermysql-community-clientmysql-community-client-pluginsmysql-community-libsmysql-community-icu-data-filesmysql-community-common以及mysql-community-libs-compat软件包。要进行这样的标准基本安装,请进入包含所有这些软件包的文件夹(最好该文件夹中没有其他名称类似的RPM软件包),然后执行以下命令:

$> sudo yum install mysql-community-{server,client,client-plugins,icu-data-files,common,libs}-*

对于 SLES 系统,将 yum 替换为 zypper;对于 Fedora 系统,将其替换为 dnf

虽然使用像yum这样的高级软件包管理工具来安装软件包更为可取,但喜欢直接使用rpm命令的用户可以用rpm -Uvh命令替换yum install命令;然而,由于安装过程可能会遇到潜在的依赖问题,使用rpm -Uvh替代方案会使安装过程更容易失败。

要仅安装客户端程序,可以在要安装的软件包列表中跳过mysql-community-server;发出以下命令:

$> sudo yum install mysql-community-{client,client-plugins,common,libs}-*

对于 SLES 系统,将 yum 替换为 zypper;对于 Fedora 系统,将 yum 替换为 dnf

使用RPM软件包对MySQL进行标准安装会在系统目录下创建文件和资源,如下表所示。

表2.12 从MySQL开发者专区获取的适用于Linux RPM软件包的MySQL安装布局

文件或资源 位置
客户端程序和脚本 /usr/bin
mysqld 服务器 /usr/sbin
配置文件 /etc/my.cnf
数据目录 /var/lib/mysql
错误日志文件 对于红帽企业 Linux、甲骨文 Linux、CentOS 或 Fedora 平台:/var/log/mysqld.log对于 SLES:/var/log/mysql/mysqld.log
secure_file_priv的值 /var/lib/mysql-files
System V初始化脚本 对于红帽企业 Linux、甲骨文 Linux、CentOS 或 Fedora 平台:/etc/init.d/mysqld对于 SLES:/etc/init.d/mysql
Systemd服务 对于红帽企业 Linux、甲骨文 Linux、CentOS 或 Fedora 平台:mysqld对于 SLES:mysql
进程ID文件 /var/run/mysql/mysqld.pid
套接字 /var/lib/mysql/mysql.sock
密钥环目录 /var/lib/mysql-keyring
Unix手册页 /usr/share/man
包含(头)文件 /usr/include/mysql
/usr/lib/mysql
杂项支持文件(例如,错误消息和字符集文件) /usr/share/mysql

安装过程还会在系统上创建一个名为mysql的用户和一个名为mysql的组。

注意事项

  • 使用useradd命令的-r-s /bin/false选项创建mysql用户,这样它就没有登录到您的服务器主机的权限(详细信息请参阅创建mysql用户和组)。要在操作系统上切换到mysql用户,请对su命令使用--shell=/bin/bash选项:

    su - mysql --shell=/bin/bash
    
  • 使用旧软件包安装早期版本的 MySQL 时,可能会创建一个名为 /usr/my.cnf 的配置文件。强烈建议您检查该文件的内容,并将所需的设置迁移到 /etc/my.cnf 文件中,然后删除 /usr/my.cnf

在安装过程结束时,MySQL 不会自动启动。对于 Red Hat Enterprise Linux、Oracle Linux、CentOS 和 Fedora 系统,使用以下命令启动 MySQL:

$> systemctl start mysqld

对于 SLES 系统,命令相同,但服务名称不同:

$> systemctl start mysql

如果操作系统启用了systemd,应使用标准的systemctl(或者,使用参数颠倒的service )命令,如 停止启动状态 以及 重启 来管理MySQL服务器服务。mysqld 服务默认已启用,并且会在系统重启时启动。请注意,在systemd平台上某些操作可能会有所不同:例如,更改数据目录的位置可能会导致问题。有关更多信息,请参见2.5.9节,“使用systemd管理MySQL服务器”

在使用RPM和DEB软件包进行升级安装期间,如果升级时MySQL服务器正在运行,那么MySQL服务器将停止运行,执行升级,然后MySQL服务器重新启动。有一种例外情况:如果在升级过程中版本也发生变化(例如从社区版变为商业版,反之亦然),则MySQL服务器不会重新启动。

在服务器初次启动时,如果服务器的数据目录为空,会发生以下情况:

  • 服务器已初始化。

  • 在数据目录中生成一个SSL证书和密钥文件。

  • validate_password已安装并启用。

  • 创建了一个超级用户账户'root'@'localhost'。超级用户的密码已设置并存储在错误日志文件中。要显示该密码,对于红帽企业 Linux、甲骨文 Linux、CentOS 和 Fedora 系统,请使用以下命令:

    $> sudo grep 'temporary password' /var/log/mysqld.log
    

    对于 SLES 系统,请使用以下命令:

    $> sudo grep 'temporary password' /var/log/mysql/mysqld.log
    

    下一步是使用生成的临时密码登录,并为超级用户账户设置自定义密码:

$> mysql -uroot -p
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

注意

默认情况下会安装validate_password。由validate_password实施的默认密码策略要求密码至少包含一个大写字母、一个小写字母、一个数字和一个特殊字符,且密码总长度至少为8个字符。

如果安装过程中出现问题,您可能会在错误日志文件/var/log/mysqld.log中找到调试信息。

对于某些Linux发行版,可能需要提高mysqld可用的文件描述符数量限制。请参阅B.3.2.16节,“文件未找到及类似错误”

安装多个MySQL版本的客户端库。可以安装多个客户端库版本,例如,如果你想保持与链接到以前库的旧应用程序的兼容性。要安装旧版本的客户端库,请在使用rpm时带上--oldpackage选项。例如,要在已安装MySQL 8.0的libmysqlclient.21的EL6系统上安装mysql-community-libs-5.5,可使用如下命令:

$> rpm --oldpackage -ivh mysql-community-libs-5.5.50-2.el6.x86_64.rpm

调试包。服务器RPM包中包含了使用调试包编译的MySQL Server特殊版本。它会执行调试和内存分配检查,并在服务器运行时生成一个跟踪文件。要使用该调试版本,使用/usr/sbin/mysqld-debug启动MySQL,而不是作为服务启动或使用/usr/sbin/mysqld启动。有关可使用的调试选项,请参阅7.9.4节,“DBUG包”

注意

在MySQL 8.0.4中,调试版本的默认插件目录已从/usr/lib64/mysql/plugin更改为/usr/lib64/mysql/plugin/debug。以前,对于调试版本,必须将plugin_dir更改为/usr/lib64/mysql/plugin/debug

从源SRPM重新构建RPM。可下载MySQL的源代码SRPM包。可直接使用这些包,通过标准的 rpmbuild 工具链重新构建MySQL RPM。

2.5.5 使用Oracle提供的Debian软件包在Linux上安装MySQL

甲骨文提供了用于在Debian或类似Debian的Linux系统上安装MySQL的Debian软件包。这些软件包可通过两种不同的渠道获取:

  • MySQL APT仓库。这是在类Debian系统上安装MySQL的首选方法,因为它提供了一种简单便捷的方式来安装和更新MySQL产品。有关详细信息,请参阅2.5.2节,“使用MySQL APT仓库在Linux上安装MySQL”

  • MySQL开发者专区的下载区域。有关详细信息,请参阅2.1.3节,“如何获取MySQL”。以下是关于该区域中可用的Debian软件包的一些信息以及安装说明:

    • 在MySQL开发者专区提供了各种Debian软件包,用于在当前Debian和Ubuntu平台上安装MySQL的不同组件。推荐的方法是使用压缩包,其中包含MySQL基本设置所需的软件包。压缩包的名称格式为mysql-server_MVER-DVER_CPU.deb-bundle.tarMVER是MySQL版本,DVER是Linux发行版版本。CPU值表示为其构建软件包的处理器类型或系列,如下表所示:

      表2.13 MySQL Debian和Ubuntu安装包CPU标识符

      “CPU”值 目标处理器类型或系列
      i386 奔腾处理器或更高配置,32位
      amd64 64位x86处理器
    • 下载压缩包后,使用以下命令解压:

      $> tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tar
      
    • 如果系统上尚未安装libaio库,你可能需要安装它:

      $> sudo apt-get install libaio1
      
    • 使用以下命令预配置MySQL服务器软件包:

      $> sudo dpkg-preconfigure mysql-community-server_*.deb
      

      系统要求你为MySQL安装的root用户设置密码。你可能还会被问到其他与安装相关的问题。

      重要的

      确保记住设置的root密码。如果用户希望稍后设置密码,可以在对话框中留空密码字段,直接按“确定”;在这种情况下,使用Unix套接字文件进行连接时,将使用MySQL套接字对等凭据身份验证插件对服务器的root访问进行身份验证。之后,您可以使用mysql_secure_installation设置root密码。

    • 对于MySQL服务器的基本安装,按顺序安装数据库通用文件包、客户端包、客户端元包、服务器包和服务器元包;你可以使用单个命令完成此操作:

      $> sudo dpkg -i mysql-{common,community-client-plugins,community-client-core,community-client,client,community-server-core,community-server,server}_*.deb
      

      还有一些软件包的名称中包含server-coreclient-core。这些软件包仅包含二进制文件,会由标准软件包自动安装。单独安装它们并不能构建起可用的MySQL配置。

      如果dpkg(如libmecab2)警告你存在未满足的依赖项,你可以使用apt-get来修复这些问题:

      sudo apt-get -f install
      

      这些是文件在系统上的安装位置:

      • 所有配置文件(如my.cnf)都位于/etc/mysql
      • 所有二进制文件、库文件、头文件等都位于/usr/bin/usr/sbin目录下。
      • 数据目录位于/var/lib/mysql

注意

MySQL的Debian发行版也由其他供应商提供。请注意,它们在功能、能力和约定(包括通信设置)方面可能与Oracle构建的版本有所不同,并且本手册中的说明不一定适用于安装它们。应参考供应商的说明。

2.5.6 使用Docker容器在Linux上部署MySQL

本节介绍如何使用Docker容器部署MySQL服务器。

虽然以下说明中为演示目的使用了docker客户端,但一般而言,Oracle提供的MySQL容器镜像可与任何符合OCI1.0规范的容器工具配合使用。

警告

在使用Docker容器部署MySQL之前,请确保你了解运行容器的安全风险并妥善缓解这些风险。

2.5.6.1 使用Docker部署MySQL服务器的基本步骤

警告

MySQL团队维护的MySQL Docker镜像专门为Linux平台构建。其他平台不受支持,在这些平台上使用这些MySQL Docker镜像的用户需自行承担风险。有关在非Linux操作系统上运行这些容器的一些已知限制,请参阅此处的讨论

下载MySQL服务器Docker镜像

重要事项

对于MySQL企业版用户:使用MySQL企业版的Docker镜像需要订阅。订阅采用自带许可证模式;详情请参阅如何购买MySQL产品和服务

单独下载服务器镜像并非严格必要;然而,在创建 Docker 容器之前执行此步骤可确保本地镜像为最新版本。要从 甲骨文容器注册表 (OCR) 下载 MySQL 社区版镜像,请运行以下命令:

docker pull container-registry.oracle.com/mysql/community-server:tag

*tag* 是你想要拉取的镜像版本的标签(例如,5.78.0latest)。如果省略 **:tag**,则会使用 latest 标签,并下载 MySQL 社区版最新 GA 版本的镜像。

要从OCR下载MySQL企业版镜像,你首先需要在OCR上接受许可协议,并使用Docker客户端登录到容器仓库。请按照以下步骤操作:

  • 访问甲骨文容器注册表(OCR),网址为https://container-registry.oracle.com/,并选择MySQL。

  • 在MySQL存储库列表下,选择enterprise-server

  • 如果您尚未登录 OCR,请点击页面右侧的“登录”按钮,然后在提示时输入您的 Oracle 账户凭证。

  • 按照页面右侧的说明接受许可协议。

  • 使用例如 docker login 命令,通过容器客户端登录到 OCR:

    # docker login container-registry.oracle.com 
    Username: Oracle-Account-ID
    Password: password
    Login successful.
    

使用以下命令从甲骨文容器注册表(OCR)下载MySQL企业版的Docker镜像:

docker pull  container-registry.oracle.com/mysql/enterprise-server:tag

要从My OracleSupport网站下载MySQL企业版镜像,请访问该网站,登录你的Oracle账户,进入登录页面后,执行以下步骤:

  • 选择“补丁和更新”选项卡。

  • 转到补丁搜索区域,然后在“搜索”选项卡上,切换到“产品或系列(高级)”子选项卡。

  • 在“产品”字段中输入“MySQL Server”,并在“版本”字段中输入所需的版本号。

  • 使用下拉菜单中的其他筛选器,选择“描述—包含”,并在文本字段中输入“Docker”。

    以下图显示了适用于MySQL Server 8.0的MySQL企业版镜像的搜索设置:

    Diagram showing search settings for MySQL Enterprise image

  • 点击“搜索”按钮,然后从结果列表中选择您想要的版本,并点击“下载”按钮。

  • 在出现的“文件下载”对话框中,点击并下载适用于Docker镜像的.zip文件。

解压下载的.zip压缩包,以获取其中的tar包(mysql-enterprise-server-version.tar),然后通过运行以下命令加载镜像:

docker load -i mysql-enterprise-server-version.tar

你可以使用此命令列出已下载的Docker镜像:

$> docker images
REPOSITORY                                             TAG       IMAGE ID       CREATED        SIZE
container-registry.oracle.com/mysql/community-server   latest    1d9c2219ff69   2 months ago   496MB
启动MySQL服务器实例

要为 MySQL 服务器启动一个新的 Docker 容器,请使用以下命令:

docker run --name=container_name  --restart on-failure -d image_name:tag

image_name 是用于启动容器的镜像的名称;有关更多信息,请参阅下载MySQL服务器Docker镜像

--name选项用于为服务器容器提供自定义名称,该选项是可选的;如果未提供容器名称,将生成一个随机名称。

--restart选项用于为容器配置重启策略;应将其设置为值on-failure ,以便在客户端会话中支持服务器重启(例如,当客户端执行 RESTART 语句时,或者在 配置InnoDB集群实例 期间,就会发生这种情况)。启用重启支持后,在客户端会话中发出重启指令会导致服务器和容器停止,然后重启。MySQL 8.0.21及更高版本支持服务器重启。

例如,要为MySQL社区版服务器启动一个新的Docker容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/community-server:latest

要使用从OCR下载的Docker镜像为MySQL企业版服务器启动一个新的Docker容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d container-registry.oracle.com/mysql/enterprise-server:latest

要使用从 My Oracle Support 下载的 Docker 镜像为 MySQL 企业版服务器启动一个新的 Docker 容器,请使用以下命令:

docker run --name=mysql1 --restart on-failure -d mysql/enterprise-server:latest

如果指定名称和标签的Docker镜像尚未通过之前的docker pulldocker run命令下载,则现在会下载该镜像。容器的初始化开始,并且当您运行docker ps命令时,该容器会出现在正在运行的容器列表中。例如:

$> docker ps
CONTAINER ID   IMAGE                                                         COMMAND                  CREATED          STATUS                    PORTS                       NAMES
4cd4129b3211   container-registry.oracle.com/mysql/community-server:latest   "/entrypoint.sh mysq…"   8 seconds ago    Up 7 seconds (health: starting)   3306/tcp, 33060-33061/tcp   mysql1

容器初始化可能需要一些时间。当服务器可以使用时,docker ps 命令输出中容器的 STATUS 会从 (health: starting) 变为 (healthy)

上述 dockerrun 命令中使用的 -d 选项可使容器在后台运行。使用此命令来监控容器的输出:

docker logs mysql1

初始化完成后,该命令的输出将包含为root用户生成的随机密码;例如,可以使用以下命令检查密码:

$> docker logs mysql1 2>&1 | grep GENERATED
GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内部连接到MySQL服务器

一旦服务器准备就绪,你可以在刚刚启动的 MySQL Server 容器内运行mysql客户端,并将其连接到 MySQL 服务器。使用 docker exec -it 命令在已启动的 Docker 容器内启动一个mysql客户端,如下所示:

docker exec -it mysql1 mysql -uroot -p

当被询问时,输入生成的root密码(有关如何查找密码,请参阅上面 启动MySQL服务器实例 中的最后一步)。由于 MYSQL_ONETIME_PASSWORD 选项默认设置为true,在使用 mysql 客户端连接到服务器后,您必须通过执行以下语句来重置服务器root密码:

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';

password替换为您选择的密码。密码重置后,服务器即可使用。

容器Shell访问权限

要获得对MySQL服务器容器的Shell访问权限,请使用docker exec -it命令在容器内启动一个Bash Shell:

$> docker exec -it mysql1 bash
bash-4.2#

然后,你可以在容器内运行Linux命令。例如,要查看容器内服务器数据目录中的内容,可使用以下命令:

bash-4.2# ls /var/lib/mysql
auto.cnf    ca.pem	     client-key.pem  ib_logfile0  ibdata1  mysql       mysql.sock.lock	   private_key.pem  server-cert.pem  sys
ca-key.pem  client-cert.pem  ib_buffer_pool  ib_logfile1  ibtmp1   mysql.sock  performance_schema  public_key.pem   server-key.pem
停止并删除MySQL容器

要停止我们创建的MySQL服务器容器,请使用以下命令:

docker stop mysql1

docker stop 会向 mysqld 进程发送一个 SIGTERM 信号,以便服务器正常关闭。

还要注意,当容器的主进程(对于MySQL Server容器而言,是mysqld)停止时,Docker容器会自动停止。

要再次启动MySQL服务器容器:

docker start mysql1

使用一条命令停止并重新启动MySQL服务器容器:

docker restart mysql1

要删除MySQL容器,请先将其停止,然后使用docker rm命令:

docker stop mysql1
docker rm mysql1

如果希望在删除服务器时,同时删除服务器数据目录对应的Docker卷,请在docker rm命令中添加 -v 选项。

升级MySQL服务器容器

重要的

  • 在对MySQL进行任何升级之前,请仔细遵循《第3章 MySQL升级》中的说明。在该章讨论的其他说明中,尤其重要的是在升级前备份数据库。
  • 本节中的说明要求服务器的数据和配置已持久保存在主机上。有关详细信息,请参阅 持久保存数据和配置更改

按照以下步骤将MySQL 5.7的Docker安装版本升级到8.0:

  • 停止MySQL 5.7服务器(在此示例中容器名称为mysql57):

    docker stop mysql57
    
  • 下载MySQL 8.0服务器Docker镜像。请参阅下载MySQL服务器Docker镜像中的说明。确保使用适用于MySQL 8.0的正确标签。

  • 使用已持久化在主机上(在本示例中通过绑定挂载)的旧服务器数据和配置(如有需要,进行适当修改 —— 请参阅 第 3 章,升级 MySQL)启动一个新的 MySQL 8.0 Docker 容器(在本示例中命名为mysql80)。对于 MySQL 社区版服务器,运行以下命令:

    docker run --name=mysql80 \
       --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
       --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
       -d container-registry.oracle.com/mysql/community-server:8.0
    

    如果需要,将container-registry.oracle.com/mysql/community-server调整为正确的镜像名称,例如,对于从OCR下载的MySQL企业版镜像,将其替换为container-registry.oracle.com/mysql/enterprise-server;对于从My Oracle Support下载的MySQL企业版镜像,将其替换为mysql/enterprise-server

  • 等待服务器完成启动。你可以使用 docker ps 命令检查服务器的状态(有关如何操作,请参阅 启动MySQL服务器实例)。

在8.0系列内进行升级(即从8.0.x版本升级到8.0.y版本)时,请遵循相同的步骤:停止原始容器,并在旧服务器数据和配置上使用更新的镜像启动一个新容器。如果您在启动原始容器时使用了8.0latest标签,并且现在有一个您想要升级到的新MySQL 8.0版本,那么您必须首先使用以下命令拉取新版本的镜像:

docker pull container-registry.oracle.com/mysql/community-server:8.0

然后,你可以通过在旧数据和配置上使用相同标签启动一个新的容器来进行升级(如果使用的是MySQL企业版,请调整镜像名称;请参阅下载MySQL Server Docker镜像):

docker run --name=mysql80new \
   --mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
   --mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:8.0

注意

对于MySQL 8.0.15及更早版本: 您需要在MySQL 8.0服务器容器中运行mysql_upgrade实用程序来完成升级过程(MySQL 8.0.16及更高版本无需此步骤):

  • docker exec -it mysql80 mysql_upgrade -uroot -p
    

    系统提示时,输入旧服务器的root密码。

  • 通过重新启动新容器完成升级:

    docker restart mysql80
    
使用Docker部署MySQL服务器的更多主题

有关使用Docker部署MySQL Server的更多主题,如服务器配置、数据和配置持久化、服务器错误日志以及容器环境变量,请参阅2.5.6.2节,“使用Docker部署MySQL Server的更多主题”

2.5.6.2 使用Docker部署MySQL服务器的更多主题

注意

以下大多数示例命令使用container-registry.oracle.com/mysql/community-server作为所使用的Docker镜像(例如docker pulldocker run命令);如果您的镜像来自其他存储库,请更改此镜像,例如,对于从Oracle容器注册表 (OCR) 下载的MySQL企业版镜像,将其替换为container-registry.oracle.com/mysql/enterprise-server,或者对于从My Oracle Support下载的MySQL企业版镜像,将其替换为mysql/enterprise-server

针对Docker的优化版MySQL安装

用于MySQL的Docker镜像针对代码大小进行了优化,这意味着它们仅包含大多数在Docker容器中运行MySQL实例的用户可能会用到的关键组件。MySQL的Docker安装在以下几个方面与常规的非Docker安装有所不同:

  • 只包含数量有限的二进制文件。
  • 所有二进制文件都已去除调试信息,不包含任何调试信息。

警告

用户对Docker容器进行的任何软件更新或安装(包括针对MySQL组件的更新或安装),都可能与Docker镜像创建的优化MySQL安装发生冲突。Oracle不为在这种经过修改的容器中运行的MySQL产品,或从经过修改的Docker镜像创建的容器提供支持。

配置MySQL服务器

当你启动MySQL Docker容器时,可以通过docker run命令将配置选项传递给服务器。例如:

docker run --name mysql1 -d container-registry.oracle.com/mysql/community-server:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_col

该命令以utf8mb4作为默认字符集,以utf8mb4_col作为数据库的默认排序规则来启动MySQL服务器。

配置MySQL服务器的另一种方法是准备一个配置文件,并将其挂载到容器内服务器配置文件所在的位置。有关详细信息,请参阅持久化数据和配置更改

持久化数据和配置更改

Docker容器原则上是临时的,如果容器被删除或损坏,任何数据或配置都可能丢失(见此处讨论此处)。Docker卷提供了一种机制,用于持久化Docker容器内创建的数据。在初始化时,MySQL服务器容器会为服务器数据目录创建一个Docker卷。对该容器执行docker inspect命令生成的JSON输出包含一个Mount键,其值提供了有关数据目录卷的信息:

$> docker inspect mysql1
...
 "Mounts": [
            {
                "Type": "volume",
                "Name": "4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652",
                "Source": "/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data",
                "Destination": "/var/lib/mysql",
                "Driver": "local",
                "Mode": "",
                "RW": true,
                "Propagation": ""
            }
        ],
...

输出结果表明,源目录/var/lib/docker/volumes/4f2d463cfc4bdd4baebcb098c97d7da3337195ed2c6572bc0b89f7e845d27652/_data(主机上的数据持久化存储于此)已挂载到/var/lib/mysql,即容器内的服务器数据目录。

另一种保存数据的方法是在创建容器时使用--mount选项绑定挂载主机目录。同样的技术可用于持久化服务器的配置。以下命令创建一个MySQL服务器容器,并绑定挂载数据目录和服务器配置文件:

docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/my.cnf,dst=/etc/my.cnf \
--mount type=bind,src=/path-on-host-machine/datadir,dst=/var/lib/mysql \
-d container-registry.oracle.com/mysql/community-server:tag

该命令将path-on-host-machine/my.cnf挂载到 /etc/my.cnf(容器内的服务器配置文件),并将path-on-host-machine/datadir挂载到 /var/lib/mysql(容器内的数据目录)。要使绑定挂载生效,必须满足以下条件:

  • 配置文件path-on-host-machine/my.cnf必须已存在,并且必须包含用户mysql启动服务器的规范:

    [mysqld]
    user=mysql
    

    你还可以在该文件中包含其他服务器配置选项。

  • 数据目录path-on-host-machine/datadir必须已存在。为了完成服务器初始化,该目录必须为空。你也可以挂载一个预先填充了数据的目录,并使用它启动服务器;但是,你必须确保以与创建数据的服务器相同的配置启动Docker容器,并且在启动容器时挂载所需的任何主机文件或目录。

正在运行其他初始化脚本

如果在数据库创建后,你希望立即在数据库上运行任何 .sh.sql 脚本,可以将它们放在主机目录中,然后将该目录挂载到容器内的 /docker-entrypoint-initdb.d/ 目录下。例如:

docker run --name=mysql1 \
--mount type=bind,src=/path-on-host-machine/scripts/,dst=/docker-entrypoint-initdb.d/ \
-d container-registry.oracle.com/mysql/community-server:tag
从另一个Docker容器中的应用程序连接到MySQL

通过设置Docker网络,你可以让多个Docker容器相互通信,这样另一个Docker容器中的客户端应用程序就可以访问服务器容器中的MySQL服务器。首先,创建一个Docker网络:

docker network create my-custom-net

然后,在创建并启动服务器容器和客户端容器时,使用 --network 选项将它们置于你创建的网络中。例如:

docker run --name=mysql1 --network=my-custom-net -d container-registry.oracle.com/mysql/community-server
docker run --name=myapp1 --network=my-custom-net -d myapp

myapp1 容器随后可以通过 mysql1 主机名连接到 mysql1 容器,反之亦然,因为 Docker 会自动为给定的容器名称设置 DNS。在以下示例中,我们从 myapp1 容器内部运行 mysql 客户端,以连接到其自身容器中的 mysql1 主机:

docker exec -it myapp1 mysql --host=mysql1 --user=myuser --password

有关容器的其他网络技术,请参阅《Docker 文档》中“Docker 容器网络”一节。

服务器错误日志

当MySQL服务器首次随您的服务器容器启动时,如果满足以下任一条件,则不会生成服务器错误日志

  • 已挂载来自主机的服务器配置文件,但该文件不包含系统变量log_error(请参阅持久化数据和配置更改中关于绑定挂载服务器配置文件的内容)。
  • 主机上的服务器配置文件尚未挂载,但Docker环境变量MYSQL_LOG_CONSOLEtrue(这是MySQL 8.0服务器容器的变量默认状态)。然后,MySQL服务器的错误日志将重定向到 stderr,以便错误日志进入Docker容器的日志,并可使用 docker logs*mysqld-container*命令查看。

要使MySQL服务器在两种情况中的任何一种为真时生成错误日志,可使用--log-error选项配置服务器,以便在容器内的特定位置生成错误日志。要使错误日志持久化,请按照持久化数据和配置更改中所述,将主机文件挂载到容器内错误日志所在的位置。但是,必须确保容器内的MySQL服务器对挂载的主机文件具有写入权限。

使用MySQL企业备份与Docker

MySQL企业备份是一款针对MySQL服务器的商业授权备份实用程序,可与MySQL企业版一起使用。MySQL企业备份包含在MySQL企业版的Docker安装中。

在以下示例中,我们假设你已在Docker容器中运行MySQL Server(有关如何使用Docker启动MySQL Server实例,请参阅2.5.6.1节“使用Docker部署MySQL Server的基本步骤”)。要让MySQL Enterprise Backup备份MySQL Server,它必须能够访问服务器的数据目录。例如,在启动服务器时,可以通过将主机目录绑定挂载到MySQL Server的数据目录来实现这一点:

docker run --name=mysqlserver \
--mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
-d mysql/enterprise-server:8.0

使用此命令,MySQL服务器将通过MySQL企业版的Docker镜像启动,并且主机目录/path-on-host-machine/datadir/已挂载到服务器容器内的服务器数据目录(/var/lib/mysql)。我们还假定,在服务器启动后,已为MySQL企业备份设置了访问服务器所需的权限(详细信息请参阅向备份管理员授予MySQL权限)。使用以下步骤备份和恢复MySQL服务器实例。

要使用MySQL企业备份(MySQL Enterprise Backup)和Docker对在Docker容器中运行的MySQL Server实例进行备份,请按照此处列出的步骤操作:

  1. 在运行MySQL Server容器的同一主机上,使用MySQL企业版镜像启动另一个容器,以使用MySQL企业备份命令backup-to-image执行备份。使用我们在上一步中创建的绑定挂载来访问服务器的数据目录。此外,将主机目录(在此示例中为/path-on-host-machine/backups/)挂载到容器中用于备份的存储文件夹(在此示例中为/data/backups),以保存我们正在创建的备份。以下是此步骤的示例命令,其中使用从MyOracle Support下载的Docker镜像启动MySQL企业备份:

    $> docker run \
    --mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
    --mount type=bind,src=/path-on-host-machine/backups/,dst=/data/backups \
    --rm mysql/enterprise-server:8.0 \
    mysqlbackup -umysqlbackup -ppassword --backup-dir=/tmp/backup-tmp --with-timestamp \
    --backup-image=/data/backups/db.mbi backup-to-image
    
    [Entrypoint] MySQL Docker Image 8.0.11-1.1.5
    MySQL Enterprise Backup version 8.0.11 Linux-4.1.12-61.1.16.el7uek.x86_64-x86_64 [2018-04-08  07:06:45]
    Copyright (c) 2003, 2018, Oracle and/or its affiliates. All Rights Reserved.
    
    180921 17:27:25 MAIN    INFO: A thread created with Id '140594390935680'
    180921 17:27:25 MAIN    INFO: Starting with following command line ...
    ...
    
    -------------------------------------------------------------
       Parameters Summary
    -------------------------------------------------------------
       Start LSN                  : 29615616
       End LSN                    : 29651854
    -------------------------------------------------------------
    
    mysqlbackup completed OK!
    

    检查mysqlbackup输出的结尾以确保备份已成功完成非常重要。

  2. 备份作业完成后,容器即退出,并且由于使用了 --rm 选项启动容器,容器退出后即被删除。已创建镜像备份,可在最后一步中为存储备份而挂载的主机目录中找到,如下所示:

    $> ls /tmp/backups
    db.mbi
    

要使用带有Docker的MySQL企业备份在Docker容器中恢复MySQL Server实例,请按照此处列出的步骤操作:

  1. 停止MySQL Server容器,这也会停止在容器内运行的MySQL Server:

    docker stop mysqlserver
    
  2. 在主机上,删除MySQL服务器数据目录绑定挂载中的所有内容:

    rm -rf /path-on-host-machine/datadir/*
    
  3. 使用MySQL企业版镜像启动一个容器,以使用MySQL企业备份命令copy-back-and-apply-log执行恢复操作。像备份服务器时那样,绑定挂载服务器的数据目录和备份存储文件夹。

    $> docker run \
    --mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
    --mount type=bind,src=/path-on-host-machine/backups/,dst=/data/backups \
    --rm mysql/enterprise-server:8.0 \
    mysqlbackup --backup-dir=/tmp/backup-tmp --with-timestamp \
    --datadir=/var/lib/mysql --backup-image=/data/backups/db.mbi copy-back-and-apply-log
    
    [Entrypoint] MySQL Docker Image 8.0.11-1.1.5
    MySQL Enterprise Backup version 8.0.11 Linux-4.1.12-61.1.16.el7uek.x86_64-x86_64 [2018-04-08  07:06:45]
    Copyright (c) 2003, 2018, Oracle and/or its affiliates. All Rights Reserved.
    
    180921 22:06:52 MAIN    INFO: A thread created with Id '139768047519872'
    180921 22:06:52 MAIN    INFO: Starting with following command line ...
    ...
    180921 22:06:52 PCR1    INFO: We were able to parse ibbackup_logfile up to
              lsn 29680612.
    180921 22:06:52 PCR1    INFO: Last MySQL binlog file position 0 155, file name binlog.000003
    180921 22:06:52 PCR1    INFO: The first data file is '/var/lib/mysql/ibdata1'
                                  and the new created log files are at '/var/lib/mysql'
    180921 22:06:52 MAIN    INFO: No Keyring file to process.
    180921 22:06:52 MAIN    INFO: Apply-log operation completed successfully.
    180921 22:06:52 MAIN    INFO: Full Backup has been restored successfully.
    
    mysqlbackup completed OK! with 3 warnings
    

    备份作业完成后,容器即退出,并且如果在启动容器时使用了 --rm 选项,容器退出后会被删除。

  4. 使用以下命令重新启动服务器容器,这也会重新启动已恢复的服务器:

    docker restart mysqlserver
    

    或者,在恢复的数据目录上启动一个新的MySQL服务器,如下所示:

    docker run --name=mysqlserver2 \
    --mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
    -d mysql/enterprise-server:8.0
    

    登录服务器,检查服务器是否使用恢复的数据在运行。

在Docker中使用mysqldump

除了使用MySQL企业备份(MySQL Enterprise Backup)对在Docker容器中运行的MySQL服务器进行备份之外,你还可以通过在Docker容器内运行mysqldump实用程序对服务器执行逻辑备份。

以下说明假定您已在Docker容器中运行MySQL服务器,并且在容器首次启动时,主机目录/path-on-host-machine/datadir/ 已挂载到服务器的数据目录/var/lib/mysql (详细信息请参阅将主机目录绑定挂载到MySQL服务器的数据目录),该目录包含Unix套接字文件,mysqldumpmysql 可通过该文件连接到服务器。我们还假定在服务器启动后,已创建具有适当权限的用户(本示例中为admin ),mysqldump 可使用该用户访问服务器。请使用以下步骤备份和恢复MySQL服务器数据:

使用Docker通过mysqldump备份MySQL服务器数据:

  1. 在运行MySQL服务器容器的同一主机上,使用MySQL Server镜像启动另一个容器,以使用mysqldump实用程序执行备份(有关该实用程序的功能、选项和限制,请参阅其文档)。通过绑定挂载/path-on-host-machine/datadir/来访问服务器的数据目录。此外,将主机目录(在此示例中为/path-on-host-machine/backups/)挂载到容器内用于备份的存储文件夹(在此示例中使用/data/backups),以持久保存正在创建的备份。以下是使用此设置备份服务器上所有数据库的示例命令:

    $> docker run --entrypoint "/bin/sh" \ 
    --mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
    --mount type=bind,src=/path-on-host-machine/backups/,dst=/data/backups \
    --rm container-registry.oracle.com/mysql/community-server:8.0 \
    -c "mysqldump -uadmin --password='password' --all-databases > /data/backups/all-databases.sql"
    

    在该命令中,使用了 --entrypoint 选项,以便在容器启动后调用系统 shell,并且使用 -c 选项来指定要在 shell 中运行的 mysqldump 命令,该命令的输出被重定向到备份目录中的 all-databases.sql 文件。

  2. 备份作业完成后,容器即退出,并且如果使用 --rm 选项启动容器,容器退出后会被删除。此时已创建逻辑备份,可在为存储备份而挂载的主机目录中找到,如下所示:

    $> ls /path-on-host-machine/backups/
    all-databases.sql
    

使用mysqldump和Docker恢复MySQL服务器数据:

  1. 确保你在一个容器中有一个正在运行的MySQL服务器,你希望将备份的数据恢复到该服务器上。

  2. 使用 MySQL Server 镜像启动一个容器,以通过 mysql 客户端执行恢复操作。绑定挂载服务器的数据目录以及包含备份的存储文件夹:

    $> docker run  \
    --mount type=bind,src=/path-on-host-machine/datadir/,dst=/var/lib/mysql \
    --mount type=bind,src=/path-on-host-machine/backups/,dst=/data/backups \
    --rm container-registry.oracle.com/mysql/community-server:8.0 \
    mysql -uadmin --password='password' -e "source /data/backups/all-databases.sql"
    

    备份作业完成后,容器即退出,并且在启动容器时若使用了 --rm 选项,容器退出后会被删除。

  3. 登录到服务器,检查恢复的数据是否已在服务器上。

已知问题
  • 在使用服务器系统变量audit_log_file 配置审计日志文件名时,要搭配使用 loose选项修饰符;否则,Docker 无法启动服务器。
Docker环境变量

当你创建一个MySQL服务器容器时,可以使用 --env 选项(简写为 -e)并指定一个或多个环境变量来配置MySQL实例。如果挂载的数据目录不为空,则不会执行服务器初始化,在这种情况下,设置这些变量中的任何一个都没有效果(请参阅 持久化数据和配置更改),并且在容器启动期间,该目录中现有的任何内容(包括服务器设置)都不会被修改。

可用于配置 MySQL 实例的环境变量如下:

  • 包括MYSQL_RANDOM_ROOT_PASSWORDMYSQL_ONETIME_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORDMYSQL_LOG_CONSOLE在内的布尔变量,只要设置为任何非零长度的字符串,就会被设为 true。因此,例如将它们设置为 “0”、“false” 或 “no” 并不会使它们为 false,实际上会使它们为 true。这是一个已知问题。

  • MYSQL_RANDOM_ROOT_PASSWORD:当此变量为真时(除非设置了MYSQL_ROOT_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORD 为真,否则这是其默认状态),启动 Docker 容器时会为服务器的 root 用户生成一个随机密码。该密码会打印到容器的 stdout 中,可通过查看容器日志找到(请参阅 启动 MySQL 服务器实例)。

  • MYSQL_ONETIME_PASSWORD:当该变量为真(这是其默认状态,除非设置了MYSQL_ROOT_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORD 为真)时,root用户的密码将被设置为过期状态,必须在正常使用MySQL之前更改密码。

  • MYSQL_DATABASE:此变量允许您指定在镜像启动时要创建的数据库名称。如果使用MYSQL_USERMYSQL_PASSWORD提供用户名和密码,则会创建该用户并授予其对该数据库的超级用户访问权限(相当于GRANT ALL)。指定的数据库是通过CREATE DATABASE IF NOT EXIST语句创建的,因此如果数据库已存在,该变量将不起作用。

  • MYSQL_USERMYSQL_PASSWORD:这些变量共同用于创建用户并设置该用户的密码,并且为该用户授予由MYSQL_DATABASE变量指定的数据库的超级用户权限。要创建用户,MYSQL_USERMYSQL_PASSWORD这两个变量都必须设置 —— 如果其中任何一个变量未设置,则另一个变量将被忽略。如果两个变量都已设置,但MYSQL_DATABASE未设置,则创建的用户将没有任何权限。

    注意

    无需使用此机制来创建root超级用户,root超级用户默认会通过MYSQL_ROOT_PASSWORDMYSQL_RANDOM_ROOT_PASSWORD描述中讨论的其中一种机制设置密码来创建,除非MYSQL_ALLOW_EMPTY_PASSWORD为true。

  • MYSQL_ROOT_HOST:默认情况下,MySQL会创建'root'@'localhost'账户。如从容器内部连接到MySQL服务器中所述,此账户只能从容器内部连接。若要允许从其他主机进行root连接,请设置此环境变量。例如,值172.17.0.1(即默认的Docker网关IP)允许从运行容器的主机进行连接。该选项仅接受一个条目,但允许使用通配符(例如,MYSQL_ROOT_HOST=172.*.*.*MYSQL_ROOT_HOST=%)。

  • MYSQL_LOG_CONSOLE:当该变量为真(这是MySQL 8.0服务器容器的默认状态)时,MySQL服务器的错误日志将重定向到stderr,这样错误日志就会进入Docker容器的日志,并且可以使用docker logs*mysqld-container*命令查看。

    注意

    如果已挂载主机的服务器配置文件,则该变量无效(有关绑定挂载配置文件,请参阅持久化数据和配置更改)。

  • MYSQL_ROOT_PASSWORD:此变量用于指定为MySQLroot账户设置的密码。

    警告

    在命令行上设置MySQL根用户密码并不安全。作为显式指定密码的替代方法,你可以使用密码文件的容器文件路径来设置该变量,然后将主机中包含密码的文件挂载到容器文件路径。这仍然不是很安全,因为密码文件的位置仍然暴露。最好使用默认设置,即MYSQL_RANDOM_ROOT_PASSWORDMYSQL_ONETIME_PASSWORD均设为true。

  • MYSQL_ALLOW_EMPTY_PASSWORD。将其设置为 true 可允许容器以 root 用户的空密码启动。

    警告

    将此变量设置为true是不安全的,因为这会使您的MySQL实例完全失去保护,任何人都可以获得完全的超级用户访问权限。最好使用默认设置,即MYSQL_RANDOM_ROOT_PASSWORDMYSQL_ONETIME_PASSWORD均为true。

2.5.6.3 使用Docker在Windows和其他非Linux平台上部署MySQL

警告

甲骨文提供的MySQL Docker镜像专门为Linux平台构建。不支持其他平台,在非Linux平台上运行甲骨文MySQL Docker镜像的用户需自行承担风险。本节讨论这些镜像在非Linux平台上使用时的一些已知问题。

在Windows上使用Oracle提供的MySQL Server Docker镜像时,已知的问题包括:

  • 如果您在容器的MySQL数据目录上进行绑定挂载(详情请参阅持久化数据和配置更改),则必须使用--socket选项将服务器套接字文件的位置设置在MySQL数据目录之外的某个位置;否则,服务器将无法启动。这是因为Docker for Windows处理文件挂载的方式不允许将主机文件绑定挂载到套接字文件上。

2.5.7 从本地软件仓库在Linux上安装MySQL

许多Linux发行版在其本地软件仓库中包含MySQL服务器、客户端工具和开发组件的某个版本,并且可以通过平台的标准软件包管理系统进行安装。本节提供了使用这些软件包管理系统安装MySQL的基本说明。

重要的

原生软件包的版本通常比当前可用的发行版本落后几个版本。您通常也无法安装开发里程碑版本(DMR),因为这些版本通常不会在原生存储库中提供。在继续操作之前,我们建议您查看2.5节“在Linux上安装MySQL”中描述的其他安装选项。

特定发行版的说明如下:

  • *红帽Linux、Fedora、CentOS*

    注意

    对于许多Linux发行版,你可以使用MySQL Yum存储库而不是平台的本地软件存储库来安装MySQL。详情请参阅2.5.1节,“使用MySQL Yum存储库在Linux上安装MySQL”

    对于 Red Hat 及类似的发行版,MySQL 发行版被分成多个独立的软件包,mysql 用于客户端工具,mysql-server 用于服务器及相关工具,mysql-libs 用于库文件。如果你想通过不同的语言和环境(如 Perl、Python 等)提供连接性,就需要这些库文件。

    要进行安装,请使用 yum 命令指定要安装的软件包。例如:

    #> yum install mysql mysql-server mysql-libs mysql-server
    Loaded plugins: presto, refresh-packagekit
    Setting up Install Process
    Resolving Dependencies
    --> Running transaction check
    ---> Package mysql.x86_64 0:5.1.48-2.fc13 set to be updated
    ---> Package mysql-libs.x86_64 0:5.1.48-2.fc13 set to be updated
    ---> Package mysql-server.x86_64 0:5.1.48-2.fc13 set to be updated
    --> Processing Dependency: perl-DBD-MySQL for package: mysql-server-5.1.48-2.fc13.x86_64
    --> Running transaction check
    ---> Package perl-DBD-MySQL.x86_64 0:4.017-1.fc13 set to be updated
    --> Finished Dependency Resolution
    
    Dependencies Resolved
    
    ================================================================================
     Package               Arch          Version               Repository      Size
    ================================================================================
    Installing:
     mysql                 x86_64        5.1.48-2.fc13         updates        889 k
     mysql-libs            x86_64        5.1.48-2.fc13         updates        1.2 M
     mysql-server          x86_64        5.1.48-2.fc13         updates        8.1 M
    Installing for dependencies:
     perl-DBD-MySQL        x86_64        4.017-1.fc13          updates        136 k
    
    Transaction Summary
    ================================================================================
    Install       4 Package(s)
    Upgrade       0 Package(s)
    
    Total download size: 10 M
    Installed size: 30 M
    Is this ok [y/N]: y
    Downloading Packages:
    Setting up and reading Presto delta metadata
    Processing delta metadata
    Package(s) data still to download: 10 M
    (1/4): mysql-5.1.48-2.fc13.x86_64.rpm                    | 889 kB     00:04
    (2/4): mysql-libs-5.1.48-2.fc13.x86_64.rpm               | 1.2 MB     00:06
    (3/4): mysql-server-5.1.48-2.fc13.x86_64.rpm             | 8.1 MB     00:40
    (4/4): perl-DBD-MySQL-4.017-1.fc13.x86_64.rpm            | 136 kB     00:00
    --------------------------------------------------------------------------------
    Total                                           201 kB/s |  10 MB     00:52
    Running rpm_check_debug
    Running Transaction Test
    Transaction Test Succeeded
    Running Transaction
      Installing     : mysql-libs-5.1.48-2.fc13.x86_64                          1/4
      Installing     : mysql-5.1.48-2.fc13.x86_64                               2/4
      Installing     : perl-DBD-MySQL-4.017-1.fc13.x86_64                       3/4
      Installing     : mysql-server-5.1.48-2.fc13.x86_64                        4/4
    
    Installed:
      mysql.x86_64 0:5.1.48-2.fc13            mysql-libs.x86_64 0:5.1.48-2.fc13
      mysql-server.x86_64 0:5.1.48-2.fc13
    
    Dependency Installed:
      perl-DBD-MySQL.x86_64 0:4.017-1.fc13
    
    Complete!
    

    MySQL和MySQL服务器现在应该已安装。一个示例配置文件已安装到/etc/my.cnf。要启动MySQL服务器,请使用 systemctl

    $> systemctl start mysqld
    

    如果数据库表尚不存在,系统会自动为您创建。不过,您应该运行mysql_secure_installation 来设置服务器上的root密码。

  • *Debian,免费,免费*

    注意

    对于受支持的Debian和Ubuntu版本,可以使用MySQL APT存储库而非平台的本地软件存储库来安装MySQL。有关详细信息,请参阅2.5.2节,“使用MySQL APT存储库在Linux上安装MySQL”

    在Debian及相关发行版中,其软件仓库中有两个针对MySQL的软件包,分别是用于客户端组件的mysql-client和用于服务器组件的mysql-server。你应当指定明确的版本,例如mysql-client-5.1,以确保安装的是你想要的MySQL版本。

    要下载并安装(包括任何依赖项),请使用apt-get命令,并指定要安装的软件包。

    注意

    在安装之前,请确保更新您的apt-get索引文件,以确保下载的是最新可用版本。

    注意

    apt-get 命令会安装许多软件包,其中包括 MySQL 服务器,以便提供典型的工具和应用程序环境。这意味着除了主 MySQL 软件包之外,你还会安装大量其他软件包。

    在安装过程中,会创建初始数据库,并提示您输入MySQL root密码(并进行确认)。会在/etc/mysql/my.cnf中创建一个配置文件。还会在/etc/init.d/mysql中创建一个初始化脚本。

    服务器应该已经启动。你可以使用以下方式手动启动和停止服务器:

    #> service mysql [start|stop]
    

    该服务会自动添加到运行级别2、3和4,并在单用户模式、关机和重启级别中添加停止脚本。

2.5.8 使用Juju在Linux上安装MySQL

Juju部署框架支持轻松安装和配置MySQL服务器。有关说明,请参阅https://jujucharms.com/mysql/。

2.5.9 使用systemd管理MySQL服务器

如果您在以下Linux平台上使用RPM或Debian软件包安装MySQL,服务器的启动和关闭将由systemd管理:

  • RPM软件包平台:
    • 企业 Linux 变体版本 7 及更高版本
    • SUSE Linux Enterprise Server 12及更高版本
    • Fedora 29及更高版本
  • Debian系列平台:
    • Debian平台
    • Ubuntu平台

如果您在使用systemd的平台上从通用二进制发行版安装MySQL,可以按照《MySQL安全部署指南》安装后设置部分提供的说明,手动配置systemd对MySQL的支持。

如果您在使用systemd的平台上从源发行版安装MySQL,可通过使用-DWITH_SYSTEMD=1CMake选项配置发行版,以获得systemd对MySQL的支持。请参阅2.8.7节,“MySQL源配置选项”

以下讨论涵盖这些主题:

注意

在安装了systemd对MySQL支持的平台上,诸如 mysqld_safe 这样的脚本以及System V初始化脚本是不必要的,因而不会安装。例如,mysqld_safe 可以处理服务器重启,但systemd提供了相同的功能,而且其实现方式与管理其他服务的方式一致,而非使用特定于应用程序的程序。

在使用systemd进行服务器管理的平台上不使用mysqld_safe,这意味着选项文件中对[mysqld_safe][safe_mysqld]节的使用不受支持,并且可能导致意外行为。

由于systemd能够在安装了systemd对MySQL支持的平台上管理多个MySQL实例,因此mysqld_multimysqld_multi.server是不必要的,并且不会安装。

systemd概述

systemd 提供 MySQL 服务器的自动启动和关闭功能。它还支持使用 systemctl 命令进行手动服务器管理。例如:

$> systemctl {start|stop|restart|status} mysqld

或者,使用 service 命令(参数顺序相反),该命令与 System V 系统兼容:

$> service mysqld {start|stop|restart|status}

注意

对于systemctl命令(以及替代命令service),如果MySQL服务名称不是mysqld,则使用适当的名称。例如,在基于Debian和SLES的系统上,使用mysql而不是mysqld

对systemd的支持包括以下文件:

  • mysqld.service(RPM平台),mysql.service(Debian平台):systemd服务单元配置文件,包含MySQL服务的详细信息。
  • mysqld@.service(RPM平台),mysql@.service(Debian平台):与mysqld.servicemysql.service类似,但用于管理多个MySQL实例。
  • mysqld.tmpfiles.d:包含支持 tmpfiles 功能信息的文件。此文件安装时名为 mysql.conf
  • mysqld_pre_systemd(RPM平台),mysql-system-start(Debian平台):单元文件的支持脚本。仅当日志位置匹配某种模式时(RPM平台为/var/log/mysql*.log,Debian平台为/var/log/mysql/*.log),此脚本才会协助创建错误日志文件。在其他情况下,运行mysqld进程的用户必须对错误日志目录具有可写权限,或者错误日志必须存在且该用户对其具有可写权限。

为MySQL配置systemd

要为MySQL添加或更改systemd选项,可以使用以下方法:

  • 使用本地化的systemd配置文件。
  • 安排systemd为MySQL服务器进程设置环境变量。
  • 设置MYSQLD_OPTS systemd变量。

要使用本地化的systemd配置文件,如果不存在/etc/systemd/system/mysqld.service.d目录,则创建该目录。在该目录中,创建一个包含[Service]节的文件,列出所需的设置。例如:

[Service]
LimitNOFILE=max_open_files
Nice=nice_level
LimitCore=core_file_limit
Environment="LD_PRELOAD=/path/to/malloc/library"
Environment="TZ=time_zone_setting"

此处的讨论使用 override.conf 作为此文件的名称。systemd 的较新版本支持以下命令,该命令会打开一个编辑器并允许您编辑该文件:

systemctl edit mysqld  # RPM platforms
systemctl edit mysql   # Debian platforms

每当你创建或更改override.conf时,重新加载systemd配置,然后通知systemd重启MySQL服务:

systemctl daemon-reload
systemctl restart mysqld  # RPM platforms
systemctl restart mysql   # Debian platforms

使用systemd时,对于某些参数,必须使用override.conf配置方法,而不是在MySQL选项文件的[mysqld][mysqld_safe][safe_mysqld]组中进行设置:

  • 对于某些参数,必须使用override.conf,因为systemd自身必须知道这些参数的值,且它无法通过读取MySQL选项文件来获取这些值。
  • 那些原本只能通过 mysqld_safe 所识别的选项来设置的值,其对应的参数必须通过systemd来指定,因为不存在相应的 mysqld 参数。

有关使用systemd而非mysqld_safe的更多信息,请参阅从mysqld_safe迁移到systemd

您可以在override.conf中设置以下参数:

一些MySQL参数是通过环境变量进行配置的:

  • LD_PRELOAD:如果MySQL服务器应使用特定的内存分配库,请设置此变量。

  • NOTIFY_SOCKET:此环境变量指定 mysqld 用于与 systemd 通信启动完成通知和服务状态更改的套接字。在启动 mysqld 服务时由 systemd 设置此变量。mysqld 服务读取变量设置并写入定义的位置。

    在MySQL 8.0中,mysqld 使用 Type=notify 进程启动类型。(MySQL 5.7中使用的是 Type=forking。)使用 Type=notify</b4 时,systemd 会自动配置一个套接字文件,并将路径导出到 NOTIFY_SOCKET 环境变量。

  • TZ:设置此变量以指定服务器的默认时区。

有多种方法可以指定环境变量值,供systemd管理的MySQL服务器进程使用:

  • override.conf文件中使用Environment行。有关语法,请参阅前面讨论中描述如何使用此文件的示例。

  • /etc/sysconfig/mysql文件中指定值(如果该文件不存在则创建它)。使用以下语法赋值:

    LD_PRELOAD=/path/to/malloc/library
    TZ=time_zone_setting
    

    修改/etc/sysconfig/mysql后,重启服务器以使更改生效:

    systemctl restart mysqld  # RPM platforms
    systemctl restart mysql   # Debian platforms
    

要为 mysqld 指定选项而不直接修改systemd配置文件,请设置或取消设置MYSQLD_OPTS systemd变量。例如:

systemctl set-environment MYSQLD_OPTS="--general_log=1"
systemctl unset-environment MYSQLD_OPTS

MYSQLD_OPTS也可以在/etc/sysconfig/mysql文件中设置。”

修改systemd环境后,重启服务器以使更改生效:

systemctl restart mysqld  # RPM platforms
systemctl restart mysql   # Debian platforms

对于使用systemd的平台,如果数据目录在服务器启动时为空,则会对其进行初始化。如果数据目录是一个暂时消失的远程挂载点,这可能会成为一个问题:挂载点看起来像是一个空的数据目录,然后会被初始化为一个新的数据目录。要禁止这种自动初始化行为,请在 /etc/sysconfig/mysql 文件中指定以下行(如果该文件不存在,请创建它):

NO_INIT=true

使用systemd配置多个MySQL实例

本节介绍如何为 MySQL 的多个实例配置 systemd。

注意

由于systemd能够在安装了systemd支持的平台上管理多个MySQL实例,mysqld_multimysqld_multi.server 并非必需,因此不会安装。

要使用多实例功能,请修改 my.cnf 选项文件,为每个实例包含关键选项的配置。这些文件位置通常如下:

  • /etc/my.cnf/etc/mysql/my.cnf(RPM 平台)
  • /etc/mysql/mysql.conf.d/mysqld.cnf(适用于Debian平台)

例如,要管理两个名为replica01replica02的实例,在选项文件中添加类似以下内容:

RPM平台:

[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysqld-replica01.log

[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysqld-replica02.log

Debian平台:

[mysqld@replica01]
datadir=/var/lib/mysql-replica01
socket=/var/lib/mysql-replica01/mysql.sock
port=3307
log-error=/var/log/mysql/replica01.log

[mysqld@replica02]
datadir=/var/lib/mysql-replica02
socket=/var/lib/mysql-replica02/mysql.sock
port=3308
log-error=/var/log/mysql/replica02.log

此处显示的副本名称使用@作为分隔符,因为这是systemd支持的唯一分隔符。

实例随后由常规的systemd命令进行管理,例如:

systemctl start mysqld@replica01
systemctl start mysqld@replica02

要使实例在启动时运行,请执行以下操作:

systemctl enable mysqld@replica01
systemctl enable mysqld@replica02

也支持使用通配符。例如,此命令显示所有副本实例的状态:

systemctl status 'mysqld@replica*'

对于在同一台机器上管理多个MySQL实例,systemd会自动使用不同的单元文件:

  • mysqld@.service,而非mysqld.service(RPM平台)
  • mysql@.service 而非 mysql.service(Debian 平台)

在单元文件中,%I%i 引用在 @ 标记之后传入的参数,并用于管理特定实例。对于这样的命令:

systemctl start mysqld@replica01

systemd使用如下命令启动服务器:

mysqld --defaults-group-suffix=@%I ...

结果是,针对该服务实例,会读取并使用 [server][mysqld][mysqld@replica01] 选项组。

注意

在Debian平台上,AppArmor会阻止服务器读取或写入/var/lib/mysql-replica*,以及默认位置以外的任何内容。要解决此问题,你必须在/etc/apparmor.d/usr.sbin.mysqld中自定义或禁用该配置文件。

注意

在Debian平台上,MySQL卸载的打包脚本目前无法处理mysqld@实例。在移除或升级软件包之前,您必须首先手动停止所有额外的实例。

从mysqld_safe迁移到systemd

因为在使用systemd管理MySQL的平台上未安装mysqld_safe,所以以前为该程序指定的选项(例如,在[mysqld_safe][safe_mysqld]选项组中)必须通过其他方式指定:

  • 一些mysqld_safe选项也能被mysqld识别,并且可以从[mysqld_safe][safe_mysqld]选项组移动到[mysqld]组。但这不包括--pid-file--open-files-limit--nice。要指定这些选项,请使用前面介绍的override.conf systemd文件。

    注意

    在基于systemd的平台上,不支持使用[mysqld_safe][safe_mysqld]选项组,这可能会导致意外行为。

  • 对于某些mysqld_safe选项,存在替代的mysqld程序。例如,启用syslog记录的mysqld_safe选项是--syslog,该选项已被弃用。要将错误日志输出写入系统日志,请使用7.4.2.8节,“将错误日志记录到系统日志”中的说明。

  • mysqld_safe 中不被 mysqld 理解的选项,可以在 override.conf 或环境变量中指定。例如,对于 mysqld_safe,如果服务器应使用特定的内存分配库,则使用 --malloc-lib 选项指定。对于使用 systemd 管理服务器的安装,请按照前面所述改为设置 LD_PRELOAD 环境变量。

2.6 使用Unbreakable Linux Network (ULN) 安装MySQL

Linux支持多种不同的MySQL安装解决方案,这些内容在第2.5节“在Linux上安装MySQL”中有介绍。本节介绍的方法之一是从Oracle的Unbreakable Linux Network(ULN)进行安装。你可以在http://linux.oracle.com/上找到有关Oracle Linux和ULN的信息。

要使用ULN,您需要获取ULN登录信息,并在ULN中注册用于安装的计算机。这在《ULN常见问题解答》中有详细描述。该页面还介绍了如何安装和更新软件包。

社区版和商业版软件包均受支持,且每种都提供三个MySQL通道:

  • Server:MySQL 服务器
  • Connectors:MySQL Connector/C++、MySQL Connector/J、MySQL Connector/ODBC和MySQL Connector/Python。
  • 工具:MySQL Router、MySQL Shell和MySQL Workbench

社区频道对所有ULN用户开放。

在oracle.linux.com上访问商业MySQL ULN软件包,需要您提供具有有效的MySQL商业许可证(企业版或标准版)的CSI。在撰写本文时,有效的购买编号为60944、60945、64911和64912。相应的CSI可使商业MySQL订阅渠道在您的ULN图形用户界面中可用。

使用ULN安装MySQL后,你可以在2.5.7节“从本地软件仓库在Linux上安装MySQL”,特别是在2.5.4节“使用Oracle提供的RPM软件包在Linux上安装MySQL”中找到有关启动和停止服务器等方面的信息。

如果您要更改软件包源以使用ULN,但不更改正在使用的MySQL版本,那么请备份数据,删除现有二进制文件,并用ULN中的二进制文件替换。如果涉及版本更改,我们建议使用转储(mysqldumpmysqlpumpMySQL Shell的备份实用程序)进行备份,以防在新二进制文件就位后需要重建数据。如果切换到ULN跨越了版本界限,请在继续操作之前查阅本节:第3章,升级MySQL

注意

从MySQL 8.0.17开始支持Oracle Linux 8,并且在MySQL 8.0.24版本中添加了communityTools和Connectors渠道。

2.7 在Solaris上安装MySQL

注意

MySQL 8.0 支持 Solaris 11.4 及更高版本

在Solaris上,MySQL有多种不同的格式可供使用。

注意

MySQL 5.7依赖Oracle Developer Studio运行时库;但这不适用于MySQL 8.0。

要获取适用于Solaris的tarball或PKG格式的二进制MySQL发行版,请访问https://dev.mysql.com/downloads/mysql/8.0.html。

在Solaris上安装和使用MySQL时需要注意的其他事项:

  • 如果您想以mysql用户和组的身份使用MySQL,请使用groupadduseradd命令:

    groupadd mysql
    useradd -g mysql -s /bin/false mysql
    
  • 如果您在Solaris上使用二进制tarball发行版安装MySQL,由于Solaris的tar无法处理长文件名,请使用GNU targtar)来解压该发行版。如果您的系统上没有GNU tar,请使用以下命令进行安装:

    pkg install archiver/gnu-tar
    
  • 你应该使用forcedirectio选项挂载任何你打算存储InnoDB文件的文件系统。(默认情况下,挂载不会使用此选项。)如果不这样做,在这个平台上使用InnoDB存储引擎时,性能会显著下降。

  • 如果您希望MySQL自动启动,可以将support-files/mysql.server复制到/etc/init.d,并为其创建一个符号链接,命名为/etc/rc3.d/S99mysql.server

  • 如果有太多进程试图非常快速地连接到mysqld,你应该会在MySQL日志中看到此错误:

    Error in accept: Protocol error
    

    你可以尝试使用--back_log=50选项启动服务器,作为此问题的解决方法。

  • 要在Solaris上配置核心文件的生成,您应该使用 coreadm 命令。由于在 setuid() 应用程序上生成核心存在安全隐患,默认情况下,Solaris 不支持 setuid() 程序生成核心文件。但是,您可以使用 coreadm 修改此行为。如果为当前用户启用 setuid() 核心文件,这些文件将以600权限生成,且属主为超级用户。

2.7.1 使用Solaris PKG在Solaris上安装MySQL

你可以使用原生Solaris PKG格式的二进制软件包,而非二进制tarball发行版,在Solaris上安装MySQL。

注意

MySQL 5.7依赖Oracle Developer Studio运行时库;但这不适用于MySQL 8.0。

要使用此软件包,请下载相应的mysql-VERSION-solaris11-PLATFORM.pkg.gz文件,然后解压。例如:

$> gunzip mysql-8.0.42-solaris11-x86_64.pkg.gz

要安装新软件包,请使用 pkgadd 并按照屏幕提示操作。执行此操作必须具有超级用户权限:

$> pkgadd -d mysql-8.0.42-solaris11-x86_64.pkg

The following packages are available:
  1  mysql     MySQL Community Server (GPL)
               (i86pc) 8.0.42

Select package(s) you wish to process (or 'all' to process
all packages). (default: all) [?,??,q]:

PKG安装程序会安装所需的所有文件和工具,然后如果数据库不存在则初始化数据库。要完成安装,你应按照安装结束时说明中提供的方法设置MySQL的root密码。或者,你可以运行安装包中自带的mysql_secure_installation脚本。

默认情况下,PKG 软件包会在根路径/opt/mysql下安装 MySQL。使用pkgadd时,您只能更改安装根路径,该命令可用于在不同的 Solaris 区域中安装 MySQL。如果需要在特定目录中安装,请使用二进制tar文件发行版。

pkg 安装程序会将适用于 MySQL 的启动脚本复制到 /etc/init.d/mysql 中。要让 MySQL 自动启动和关闭,你应该在该文件与初始化脚本目录之间创建一个链接。例如,为确保 MySQL 安全启动和关闭,你可以使用以下命令添加正确的链接:

$> ln /etc/init.d/mysql /etc/rc3.d/S91mysql
$> ln /etc/init.d/mysql /etc/rc0.d/K02mysql

要卸载MySQL,已安装的软件包名称是mysql。你可以结合pkgrm命令来卸载该软件。

使用Solaris包文件格式进行升级时,必须在安装更新的软件包之前删除现有安装。删除软件包不会删除现有的数据库信息,仅删除服务器、二进制文件和支持文件。因此,典型的升级顺序为:

$> mysqladmin shutdown
$> pkgrm mysql
$> pkgadd -d mysql-8.0.42-solaris11-x86_64.pkg
$> mysqld_safe &
$> mysql_upgrade   # prior to MySQL 8.0.16 only

在执行任何升级操作之前,你应该查看第3章“升级MySQL”中的注意事项。

2.8 从源代码安装MySQL

从源代码构建MySQL使您能够自定义构建参数、编译器优化和安装位置。有关已知可运行MySQL的系统列表,请参阅https://www.mysql.com/support/supportedplatforms/database.html。

在从源代码进行安装之前,请检查 Oracle 是否为您的平台提供了预编译的二进制发行版,以及该发行版是否适用于您。我们付出了大量努力,以确保我们的二进制文件采用最佳选项构建,以实现最佳性能。有关安装二进制发行版的说明,请参见第 2.2 节,“使用通用二进制文件在 Unix/Linux 上安装 MySQL”

如果您有兴趣使用与 Oracle 在您的平台上生成二进制发行版时使用的构建选项相同或相似的构建选项,从源发行版构建 MySQL,请获取二进制发行版,解压它,并查看 docs/INFO_BIN 文件,该文件包含有关该 MySQL 发行版是如何配置和编译的信息。

警告

使用非标准选项构建MySQL可能会导致功能、性能或安全性降低。

MySQL源代码包含使用Doxygen编写的内部文档。生成的Doxygen内容可在https://dev.mysql.com/doc/index-other.html获取。也可以按照2.8.10节“生成MySQL Doxygen文档内容”中的说明,从MySQL源代码发行版在本地生成此内容。

2.8.1 源码安装方法

从源代码安装MySQL有两种方法:

  • 使用标准的MySQL源码发行版。要获取标准发行版,请参见第2.1.3节,“如何获取MySQL”。有关从标准发行版进行构建的说明,请参见第2.8.4节,“使用标准源码发行版安装MySQL”

    标准发行版以压缩的tar文件、Zip归档文件或RPM软件包的形式提供。发行版文件的名称格式为mysql-VERSION.tar.gzmysql-VERSION.zipmysql-VERSION.rpm,其中 VERSION 是类似8.0.42的数字。源代码发行版的文件名与预编译二进制发行版的文件名可以区分开来,因为源代码发行版的名称是通用的,不包含平台名称,而二进制发行版的名称包含一个平台名称,表明该发行版适用的系统类型(例如,pc-linux-i686winx64)。

  • 使用MySQL开发树。有关从某个开发树进行构建的信息,请参阅2.8.5节,“使用开发源代码树安装MySQL”

2.8.2 源码安装前提条件

从源代码安装MySQL需要几个开发工具。无论您使用标准源发行版还是开发源树,其中一些工具都是必需的。其他工具要求则取决于您使用的安装方法。

要从源代码安装MySQL,无论采用何种安装方法,都必须满足以下系统要求:

  • CMake,在所有平台上都用作构建框架。CMake 可从 http://www.cmake.org 下载。

  • 一个优秀的make程序。尽管某些平台自带它们自己的make实现,但强烈建议你使用GNUmake 3.75或更高版本。它可能已经以gmake的形式存在于你的系统中。GNUmake可从http://www.gnu.org/software/make/获取。

    在类Unix系统(包括Linux)上,你可以像这样检查系统中**make**的版本:

    $> make --version
    GNU Make 4.2.1
    
  • 从 MySQL 8.0.26 版本起,MySQL 8.0 源代码允许使用 C++17 特性。为了在所有支持的平台上启用必要级别的 C++17 支持,需满足以下最低编译器版本要求:

    • Linux:GCC 10 或 Clang 5
    • macOS:XCode 10
    • Solaris:(MySQL 8.0.40及更早版本)GCC 10;(MySQL 8.0.41及更高版本)GCC11.4
    • Windows:Visual Studio 2019
  • 在Windows上构建MySQL需要Windows 10或更高版本。(在较新版本的Windows上构建的MySQL二进制文件通常可以在旧版本上运行。) 你可以通过在Windows命令提示符中执行WMIC.exe os get version来确定Windows版本。

  • MySQL C API 需要使用 C++ 或 C99 编译器进行编译。

  • 要支持加密连接、用于生成随机数的熵以及其他与加密相关的操作,需要一个SSL库。默认情况下,构建过程使用主机系统上安装的OpenSSL库。要显式指定该库,请在调用CMake 时使用WITH_SSL 选项。更多信息,请参阅2.8.6节 “配置SSL库支持”

  • 构建MySQL需要Boost C++库(但使用MySQL不需要)。MySQL编译需要特定版本的Boost。通常情况下,是当前的Boost版本,但如果特定的MySQL源发行版需要不同的版本,配置过程将停止并显示一条消息,指示所需的Boost版本。要获取Boost及其安装说明,请访问 Boost官方网站。安装Boost后,在调用CMake时,根据 WITH_BOOST 选项设置的值,告知构建系统Boost文件的存放位置。例如:

    cmake . -DWITH_BOOST=/usr/local/boost_version_number
    

    根据需要调整路径以匹配你的安装情况。

  • ncurses库。

  • 足够的可用内存。如果在编译大型源文件时遇到诸如内部编译器错误之类的构建错误,可能是因为内存过少。如果在虚拟机上进行编译,可以尝试增加内存分配。

  • 如果您打算运行测试脚本,则需要Perl。大多数类Unix系统都包含Perl。对于Windows系统,您可以使用ActiveState PerlStrawberry Perl

要从标准源发行版安装MySQL,需要以下工具之一来解压发行版文件:

  • 对于一个.tar.gz压缩的tar文件:使用GNU gunzip来解压缩该发行版,再用合适的tar命令来解压。如果您的tar程序支持z选项,那么它就可以同时完成解压缩和解包操作。

    已知GNU tar 可以正常工作。某些操作系统提供的标准tar 无法解压MySQL发行版中的长文件名。你应该下载并安装GNUtar ,或者如果有可用的预安装版本,就使用该版本。通常,它可以在GNU或自由软件目录中以gnutargtartar 的形式获取,例如 /usr/sfw/bin/usr/local/bin 。GNUtar 可从https://www.gnu.org/software/tar/ 获取。

  • 对于一个.zip压缩文件:WinZip或其他可以读取.zip文件的工具。

  • 对于一个.rpm RPM 软件包:用于构建发行版的rpmbuild程序会对其进行解压。

要从开发源代码树安装MySQL,需要以下额外工具:

  • 获取开发源代码需要使用Git版本控制系统。GitHub帮助提供了在不同平台上下载和安装Git的说明。

  • bison 2.1 或更高版本,可从http://www.gnu.org/software/bison/获取。(不再支持 1 版本。)尽可能使用最新版本的bison;如果遇到问题,请升级到更高版本,而不是降级到更早版本。

    bison 可从http://www.gnu.org/software/bison/获取。适用于 Windows 的bison 可从http://gnuwin32.sourceforge.net/packages/bison.htm下载。下载标记为“完整软件包,不含源代码”的软件包。在 Windows 上,bison 的默认位置是 C:\Program<br /> Files\GnuWin32 目录。由于目录名称中有空格,某些实用程序可能无法找到 bison。此外,如果路径中有空格,Visual Studio 可能会直接挂起。你可以通过安装到不包含空格的目录(例如 C:\GnuWin32)来解决这些问题。

  • 在Solaris Express系统上,除了bison之外,还必须安装m4m4可从http://www.gnu.org/software/m4/获取。

注意

如果必须安装任何程序,请修改您的PATH环境变量,以包含程序所在的所有目录。请参阅6.2.9节 “设置环境变量”

如果遇到问题并需要提交错误报告,请使用1.5节“如何报告错误或问题”中的说明。

2.8.3 从源代码安装的MySQL布局

默认情况下,从源代码编译并安装 MySQL 时,安装步骤会将文件安装在 /usr/local/mysql 下。安装目录下的组件位置与二进制发行版相同。请参阅 表 2.3 “通用 Unix/Linux 二进制包的 MySQL 安装布局” 以及 2.3.1 节 “Microsoft Windows 上的 MySQL 安装布局”。要配置与默认位置不同的安装位置,请使用 2.8.7 节 “MySQL 源配置选项” 中所述的选项。

2.8.4 使用标准源发行版安装MySQL

要从标准源发行版安装MySQL:

  1. 请确认您的系统满足2.8.2节“源码安装前提条件”中列出的工具要求。
  2. 按照2.1.3节“如何获取MySQL”中的说明获取分发文件。
  3. 使用本节中的说明配置、构建和安装发行版。
  4. 按照第2.9节“安装后设置与测试”中的说明执行安装后操作。

MySQL在所有平台上都使用CMake作为构建框架。此处给出的说明应能帮助您完成可用的安装。有关使用CMake构建MySQL的更多信息,请参阅如何使用CMake构建MySQL服务器

如果您从源RPM开始,使用以下命令制作可安装的二进制RPM。如果您没有rpmbuild,请改用rpm

$> rpmbuild --rebuild --clean MySQL-VERSION.src.rpm

结果是一个或多个二进制RPM软件包,你可以按照 2.5.4节“使用Oracle提供的RPM软件包在Linux上安装MySQL” 中的说明进行安装。

从压缩的tar文件或Zip归档源发行版进行安装的步骤与从通用二进制发行版进行安装的过程类似(请参阅 2.2节,“在Unix/Linux上使用通用二进制文件安装MySQL”),只不过它可用于所有平台,并且包含配置和编译发行版的步骤。例如,在Unix上使用压缩的tar文件源发行版时,基本安装命令序列如下:

# Preconfiguration setup
$> groupadd mysql
$> useradd -r -g mysql -s /bin/false mysql
# Beginning of source-build specific instructions
$> tar zxvf mysql-VERSION.tar.gz
$> cd mysql-VERSION
$> mkdir bld
$> cd bld
$> cmake ..
$> make
$> make install
# End of source-build specific instructions
# Postinstallation setup
$> cd /usr/local/mysql
$> mkdir mysql-files
$> chown mysql:mysql mysql-files
$> chmod 750 mysql-files
$> bin/mysqld --initialize --user=mysql
$> bin/mysql_ssl_rsa_setup
$> bin/mysqld_safe --user=mysql &
# Next command is optional
$> cp support-files/mysql.server /etc/init.d/mysql.server

以下展示了针对源码构建的更详细说明。

注意

此处展示的步骤不会为MySQL账户设置任何密码。完成该步骤后,请继续阅读2.9节“安装后设置与测试”,以进行安装后设置与测试。

执行预配置设置

在 Unix 上,设置拥有数据库目录且用于运行和执行 MySQL 服务器的 mysql 用户,以及该用户所属的组。有关详细信息,请参阅 创建 mysql 用户和组。然后,除非另有说明,以 mysql 用户身份执行以下步骤。

获取并解压发行版

选择你要解压该发行版的目录,然后切换到该目录。

按照第2.1.3节“如何获取MySQL”中的说明获取分发文件。

将发行版解压到当前目录:

  • 要解压一个压缩的 tar 文件,如果 tar 支持 z 选项,它可以解压缩和解包该发行版:

    $> tar zxvf mysql-VERSION.tar.gz
    

    如果您的tar不支持z选项,请使用gunzip解压发行版,并使用tar解包:

    $> gunzip < mysql-VERSION.tar.gz | tar xvf -
    

    或者,CMake 可以解压并展开该发行版:

    $> cmake -E tar zxvf mysql-VERSION.tar.gz
    
  • 要解压Zip归档文件,请使用WinZip或其他能够读取.zip文件的工具。

解压分发文件会创建一个名为mysql-VERSION的目录。

配置分发文件

将位置更改为解压后的发行版的顶级目录:

$> cd mysql-VERSION

在源文件树外部进行构建,以保持源文件树的整洁。如果当前工作目录下的顶级源目录名为mysql-src,那么您可以在同一层级的名为build的目录中进行构建。创建该目录并进入:

$> mkdir bld
$> cd bld

配置构建目录。最小配置命令不包含覆盖配置默认值的选项:

$> cmake ../mysql-src

构建目录不一定非要在源文件树之外。例如,你可以在顶级源文件树下一个名为 build 的目录中进行构建。要做到这一点,以 mysql-src 作为当前工作目录,创建 build 目录,然后进入该目录:

$> mkdir build
$> cd build

配置构建目录。最低限度的配置命令不包含覆盖默认配置的选项:

$> cmake ..

如果在同一层级有多个源码树(例如,要构建多个版本的MySQL),第二种策略可能更具优势。第一种策略会将所有构建目录置于同一层级,这就要求为每个目录选择一个唯一的名称。而采用第二种策略,你可以在每个源码树内为构建目录使用相同的名称。以下说明基于第二种策略。

在Windows上,指定开发环境。例如,以下命令分别为32位或64位构建配置MySQL:

$> cmake .. -G "Visual Studio 12 2013"

$> cmake .. -G "Visual Studio 12 2013 Win64"

在macOS系统上,要使用Xcode集成开发环境(IDE):

$> cmake .. -G Xcode

当你运行 Cmake 时,你可能需要在命令行中添加选项。以下是一些示例:

如需更全面的选项列表,请参阅2.8.7节,“MySQL源配置选项”

要列出配置选项,请使用以下命令之一:

$> cmake .. -L   # overview

$> cmake .. -LH  # overview with help text

$> cmake .. -LAH # all params with help text

$> ccmake ..     # interactive display

如果CMake失败,你可能需要通过使用不同的选项再次运行它来重新配置。如果你进行重新配置,请注意以下几点:

  • 如果CMake在先前运行之后再次运行,它可能会使用上一次调用期间收集的信息。这些信息存储在CMakeCache.txt中。当CMake启动时,它会查找该文件,如果文件存在则读取其内容,并假定这些信息仍然正确。但当您重新配置时,这种假定就不成立了。
  • 每次运行 CMake 时,都必须再次运行 make 进行重新编译。不过,你可能需要先删除之前构建生成的旧目标文件,因为它们是使用不同的配置选项编译的。

为防止使用旧的目标文件或配置信息,在重新运行 CMake 之前,请在 Unix 系统的构建目录中运行以下命令:

$> make clean
$> rm CMakeCache.txt

或者,在Windows上:

$> devenv MySQL.sln /clean
$> del CMakeCache.txt

在向MySQL社区Slack提问之前,请检查CMakeFiles目录中的文件,以获取有关故障的有用信息。要提交错误报告,请使用 1.5节“如何报告错误或问题” 中的说明。

构建发行版

在Unix系统上:

$> make
$> make VERBOSE=1

第二条命令设置VERBOSE以显示每个已编译源文件的命令。

在使用GNU make 且已将其安装为 gmake 的系统上,请改用 gmake

在Windows上: 在Windows上: 在Windows上:

$> devenv MySQL.sln /build RelWithDebInfo

如果您已经进入编译阶段,但分发版无法构建,请参阅2.8.8节“处理MySQL编译问题”以获取帮助。如果这不能解决问题,请按照1.5节“如何报告错误或问题”中的说明将其输入到我们的错误数据库中。如果您已安装所需工具的最新版本,而这些工具在尝试处理我们的配置文件时崩溃,也请报告此问题。但是,如果您收到command not<br /> found错误或所需工具的类似问题,则不要报告。相反,请确保安装了所有必需的工具,并且正确设置了PATH变量,以便您的 shell 可以找到它们。

安装发行版

在Unix系统上:

$> make install

这会将文件安装在已配置的安装目录下(默认是 /usr/local/mysql)。你可能需要以 root 身份运行此命令。

要安装到特定目录,请在命令行中添加一个DESTDIR参数:

$> make install DESTDIR="/opt/mysql"

或者,生成可在任意位置安装的安装包文件:

$> make package

此操作会生成一个或多个 .tar.gz 文件,这些文件可以像通用二进制发行包一样安装。请参阅 2.2 节,“在 Unix/Linux 上使用通用二进制文件安装 MySQL”。如果使用 -DCPACK_MONOLITHIC_INSTALL=1 运行 CMake,该操作将生成单个文件。否则,将生成多个文件。

在Windows上,生成数据目录,然后创建一个.zip归档安装包:

$> devenv MySQL.sln /build RelWithDebInfo /project initial_database
$> devenv MySQL.sln /build RelWithDebInfo /project package

你可以将生成的 .zip 归档文件安装到任意位置。请参阅 2.3.4 节,“在 Microsoft Windows 上使用 noinstall ZIP 归档文件安装 MySQL”

执行安装后设置

安装过程的其余部分包括设置配置文件、创建核心数据库以及启动MySQL服务器。有关说明,请参阅2.9节“安装后设置与测试”

注意

MySQL授权表中列出的账户最初没有密码。启动服务器后,你应该按照2.9节“安装后设置与测试”中的说明为这些账户设置密码。

2.8.5 使用开发源码树安装MySQL

本节介绍如何从最新的开发源代码安装MySQL,这些源代码托管在 GitHub 上。要从这个代码托管服务获取MySQL Server源代码,你可以设置一个本地MySQL Git仓库。

GitHub 上,MySQL Server 及其他 MySQL 项目可在 MySQL 页面找到。MySQL Server 项目是一个单一的代码仓库,其中包含几个 MySQL 系列的分支。

从开发源码安装的先决条件

要从开发源代码树安装MySQL,你的系统必须满足《2.8.2节 源安装前提条件》中列出的工具要求。

设置MySQL Git代码库

要在您的计算机上设置一个MySQL Git仓库:

  1. 将MySQL Git仓库克隆到您的机器上。以下命令会将MySQL Git仓库克隆到名为 mysql-server 的目录中。初始下载可能需要一些时间才能完成,具体取决于您的网络连接速度。

    $> git clone https://github.com/mysql/mysql-server.git
    Cloning into 'mysql-server'...
    remote: Counting objects: 1198513, done.
    remote: Total 1198513 (delta 0), reused 0 (delta 0), pack-reused 1198513
    Receiving objects: 100% (1198513/1198513), 1.01 GiB | 7.44 MiB/s, done.
    Resolving deltas: 100% (993200/993200), done.
    Checking connectivity... done.
    Checking out files: 100% (25510/25510), done.
    
  2. 克隆操作完成后,本地MySQL Git存储库的内容与以下内容类似:

    ~> cd mysql-server
    ~/mysql-server> ls
    client             extra                mysys              storage
    cmake              include              packaging          strings
    CMakeLists.txt     INSTALL              plugin             support-files
    components         libbinlogevents      README             testclients
    config.h.cmake     libchangestreams     router             unittest
    configure.cmake    libmysql             run_doxygen.cmake  utilities
    Docs               libservices          scripts            VERSION
    Doxyfile-ignored   LICENSE              share              vio
    Doxyfile.in        man                  sql                win
    doxygen_resources  mysql-test           sql-common
    
  3. 使用 git branch -r 命令查看MySQL存储库的远程跟踪分支。

    ~/mysql-server> git branch -r
      origin/5.7
      origin/8.0
      origin/HEAD -> origin/trunk
      origin/cluster-7.4
      origin/cluster-7.5
      origin/cluster-7.6
      origin/trunk
    
  4. 要查看本地仓库中检出的分支,请执行 git branch 命令。克隆 MySQL Git 仓库时,最新的 MySQL 分支会自动检出。星号表示活动分支。

    ~/mysql-server$ git branch
    * trunk
    
  5. 要检出早期的MySQL分支,请运行 gitcheckout 命令,并指定分支名称。例如,要检出MySQL 5.7分支:

    ~/mysql-server$ git checkout 5.7
    Checking out files: 100% (9600/9600), done.
    Branch 5.7 set up to track remote branch 5.7 from origin.
    Switched to a new branch '5.7'
    
  6. 要获取在首次设置 MySQLGit 存储库后所做的更改,请切换到要更新的分支并发出 git pull 命令:

    ~/mysql-server$ git checkout 8.0
    ~/mysql-server$ git pull
    

    要查看提交历史记录,请使用 gitlog 命令:

    ~/mysql-server$ git log
    

    你还可以在GitHub的MySQL站点上浏览提交历史和源代码。

    如果你对某些更改或代码有疑问,可以在MySQL社区Slack上提问。

  7. 克隆 MySQL Git 仓库并检出要构建的分支后,就可以从源代码构建 MySQL Server。具体说明请参见 2.8.4 节 “使用标准源发行版安装 MySQL”,但需跳过获取和解压发行版的部分。

    在生产机器上从发行版源树安装构建版本时要小心。安装命令可能会覆盖正在运行的发布版本安装。如果您已经安装了 MySQL 并且不想覆盖它,请使用与生产服务器不同的CMake值,针对CMAKE_INSTALL_PREFIXMYSQL_TCP_PORTMYSQL_UNIX_ADDR选项运行。有关防止多个服务器相互干扰的更多信息,请参阅7.8 节,“在一台机器上运行多个 MySQL 实例”

    尽情体验你的新安装。例如,尝试让新功能崩溃。首先运行 maketest。请参阅 MySQL 测试套件

2.8.6 配置SSL库支持

支持加密连接、随机数生成的熵以及其他加密相关操作需要一个SSL库。

如果您从源发行版编译MySQL,CMake默认会将发行版配置为使用已安装的OpenSSL库。

要使用OpenSSL进行编译,请按以下步骤操作:

  1. 确保你的系统上安装了OpenSSL 1.0.1或更高版本。如果安装的OpenSSL版本低于1.0.1,CMake会在MySQL配置时产生错误。如果需要获取OpenSSL,请访问http://www.openssl.org

  2. WITH_SSLCMake选项决定了编译MySQL时使用哪个SSL库(见2.8.7节,“MySQL源配置选项”)。默认值为-DWITH_SSL=system,即使用OpenSSL。若要明确指定,请使用该选项。例如:

    cmake . -DWITH_SSL=system
    

    该命令将配置发行版以使用已安装的OpenSSL库。或者,要显式指定OpenSSL安装的路径名,请使用以下语法。如果安装了多个版本的OpenSSL,这可能会很有用,可防止CMake选错版本:

    cmake . -DWITH_SSL=path_name
    

    从 MySQL8.0.30 开始,通过在 EL7 上使用 WITH_SSL=openssl11 或在 EL8 上使用 WITH_SSL=openssl3,支持替代的 OpenSSL 系统包。由于 LDAP 和 Kerberos 等身份验证插件不支持这些替代版本的 OpenSSL,因此已禁用。

  3. 编译并安装该发行版。

要检查mysqld服务器是否支持加密连接,请查看have_ssl系统变量的值:

mysql> SHOW VARIABLES LIKE 'have_ssl';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| have_ssl      | YES   |
+---------------+-------+

如果值为 YES,则表示服务器支持加密连接。如果值为 DISABLED,则表示服务器能够支持加密连接,但启动时未使用适当的 --ssl-xxx 选项来启用加密连接;请参阅 8.3.1节,“配置MySQL以使用加密连接”

2.8.7 MySQL源配置选项

CMake 程序对如何配置 MySQL 源发行版提供了大量控制。通常,你可以使用 CMake 命令行上的选项来完成此操作。有关 CMake 支持的选项的信息,请在顶级源目录中运行以下任一命令:

$> cmake . -LH

$> ccmake .

你还可以使用某些环境变量来影响CMake。请参阅6.9节“环境变量”

对于布尔型选项,可将值指定为 1ON 以启用该选项,或指定为 0OFF 以禁用该选项。

许多选项用于配置编译时的默认值,这些默认值可以在服务器启动时被覆盖。例如,配置默认安装基础目录位置、TCP/IP端口号和Unix套接字文件的CMAKE_INSTALL_PREFIXMYSQL_TCP_PORTMYSQL_UNIX_ADDR选项,可以在服务器启动时使用mysqld--basedir--port--socket选项进行更改。在适用的情况下,配置选项说明会指出相应的mysqld启动选项。

以下章节提供有关 CMake 选项的更多信息。

CMake选项参考

下表展示了可用的 CMake 选项。在 Default 列中,PREFIX 代表 CMAKE_INSTALL_PREFIX 选项的值,该选项指定安装根目录。此值用作多个安装子目录的上级位置。

表2.14 MySQL源代码-配置选项参考(CMake)

格式 描述 默认 介绍 相异的
ADD_GDB_INDEX 是否允许生成。二进制文件中的gdb_index部分 8.0.18
BUILD_CONFIG 使用与官方版本相同的构建选项
BUNDLE_RUNTIME_LIBRARIES 将运行时库与Windows的服务器MSI和Zip包捆绑在一起 OFF
CMAKE_BUILD_TYPE 要生成的生成类型 RelWithDebInfo
CMAKE_CXX_FLAGS C++编译器的标志
CMAKE_C_FLAGS C编译器的标志
CMAKE_INSTALL_PREFIX 安装基础目录 /usr/local/mysql
COMPILATION_COMMENT 关于编译环境的评论
COMPILATION_COMMENT_SERVER 关于mysqld使用的编译环境的评论 8.0.14
COMPRESS_DEBUG_SECTIONS 压缩二进制可执行文件的调试部分 OFF 8.0.22
CPACK_MONOLITHIC_INSTALL 包生成是否生成单个文件 OFF
DEFAULT_CHARSET 默认的服务器字符集 utf8mb4
DEFAULT_COLLATION 默认服务器排序规则 utf8mb4_0900_ai_ci
DISABLE_PSI_COND 排除性能架构条件检测 OFF
DISABLE_PSI_DATA_LOCK 排除性能模式数据锁检测 OFF
DISABLE_PSI_ERROR 排除性能架构服务器错误检测 OFF
DISABLE_PSI_FILE 排除性能架构文件检测 OFF
DISABLE_PSI_IDLE 排除性能模式空闲检测 OFF
DISABLE_PSI_MEMORY 排除性能模式内存检测 OFF
DISABLE_PSI_METADATA 排除性能架构元数据检测 OFF
DISABLE_PSI_MUTEX 排除性能模式互斥检测 OFF
DISABLE_PSI_PS 排除性能模式准备语句 OFF
DISABLE_PSI_RWLOCK 排除性能模式rwlock检测 OFF
DISABLE_PSI_SOCKET 排除性能模式套接字检测 OFF
DISABLE_PSI_SP 排除性能架构存储程序检测 OFF
DISABLE_PSI_STAGE 排除性能架构阶段检测 OFF
DISABLE_PSI_STATEMENT 排除性能架构语句检测 OFF
DISABLE_PSI_STATEMENT_DIGEST 排除性能模式语句_摘要检测 OFF
DISABLE_PSI_TABLE 排除性能模式表检测 OFF
DISABLE_PSI_THREAD 排除性能模式线程检测 OFF
DISABLE_PSI_TRANSACTION 排除性能模式事务检测 OFF
DISABLE_SHARED 不要构建共享库,编译位置相关的代码 OFF 8.0.18
DOWNLOAD_BOOST 是否下载Boost库 OFF
DOWNLOAD_BOOST_TIMEOUT 下载Boost库的超时时间(秒) 600
ENABLED_LOCAL_INFILE 是否为加载数据启用本地 OFF
ENABLED_PROFILING 是否启用查询分析代码 ON
ENABLE_DOWNLOADS 是否下载可选文件 OFF 8.0.26
ENABLE_EXPERIMENTAL_SYSVARS 是否启用实验InnoDB系统变量 OFF
ENABLE_GCOV 是否包括gcov支持
ENABLE_GPROF 启用gprof(仅限优化的Linux版本) OFF
FORCE_COLORED_OUTPUT 是否为编译器输出着色 OFF 8.0.33
FORCE_INSOURCE_BUILD 是否强制进行源代码内编译 OFF 8.0.14
FORCE_UNSUPPORTED_COMPILER 是否允许不支持的编译器 OFF
FPROFILE_GENERATE 是否生成配置文件引导的优化数据 OFF 8.0.19
FPROFILE_USE 是否使用配置文件引导的优化数据 OFF 8.0.19
HAVE_PSI_MEMORY_INTERFACE 为过度对齐类型的动态存储中使用的内存分配函数启用性能模式内存跟踪模块 OFF 8.0.26
IGNORE_AIO_CHECK 使用-DBUILD_CONFIG=mysql_release,忽略libaio检查 OFF
INSTALL_BINDIR 用户可执行文件目录 PREFIX/bin
INSTALL_DOCDIR 文档目录 PREFIX/docs
INSTALL_DOCREADMEDIR 自述文件目录 PREFIX
INSTALL_INCLUDEDIR 头文件目录 PREFIX/include
INSTALL_INFODIR 信息文件目录 PREFIX/docs
INSTALL_LAYOUT 选择预定义的安装布局 STANDALONE
INSTALL_LIBDIR 图书馆文件目录 PREFIX/lib
INSTALL_MANDIR 手册页目录 PREFIX/man
INSTALL_MYSQLKEYRINGDIR keyring_file插件数据文件的目录 platform specific
INSTALL_MYSQLSHAREDIR 共享数据目录 PREFIX/share
INSTALL_MYSQLTESTDIR MySQL-测试目录 PREFIX/mysql-test
INSTALL_PKGCONFIGDIR mysqlclient.pc pkg-config文件的目录 INSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIR 插件目录 PREFIX/lib/plugin
INSTALL_PRIV_LIBDIR 安装专用库目录 8.0.18
INSTALL_SBINDIR 服务器可执行目录 PREFIX/bin
INSTALL_SECURE_FILE_PRIVDIR 安全文件权限默认值 platform specific
INSTALL_SHAREDIR a local/MySQL . M4安装目录 PREFIX/share
INSTALL_STATIC_LIBRARIES 是否安装静态库 ON
INSTALL_SUPPORTFILESDIR 额外支持文件目录 PREFIX/support-files
LINK_RANDOMIZE 是否随机化mysqld二进制文件中的符号顺序 OFF
LINK_RANDOMIZE_SEED LINK_RANDOMIZE选项的种子值 mysql
MAX_INDEXES 每个表的最大索引数 64
MEMCACHED_HOME memcached的路径;废弃 [none] 8.0.23
MSVC_CPPCHECK 启用MSVC代码分析。 OFF 8.0.33
MUTEX_TYPE InnoDB互斥类型 event
MYSQLX_TCP_PORT X插件使用的TCP/IP端口号 33060
MYSQLX_UNIX_ADDR X插件使用的Unix套接字文件 /tmp/mysqlx.sock
MYSQL_DATADIR 数据目录
MYSQL_MAINTAINER_MODE 是否启用MySQL maintainer特定的开发环境 OFF
MYSQL_PROJECT_NAME Windows/macOS项目名称 MySQL
MYSQL_TCP_PORT TCP/IP端口号 3306
MYSQL_UNIX_ADDR Unix套接字文件 /tmp/mysql.sock
NDB_UTILS_LINK_DYNAMIC 使NDB工具动态链接到ndbclient 8.0.22
ODBC_INCLUDES ODBC包括目录
ODBC_LIB_DIR ODBC库目录
OPTIMIZER_TRACE 是否支持优化器跟踪
OPTIMIZE_SANITIZER_BUILDS 是否优化消毒产品 ON 8.0.34
REPRODUCIBLE_BUILD 特别注意创建独立于构建位置和时间的构建结果
SHOW_SUPPRESSED_COMPILER_WARNING 是否显示隐藏的编译器警告,并且不使用-Werror失败。 OFF 8.0.30
SYSCONFDIR 选项文件目录
SYSTEMD_PID_DIR systemd下PID文件的目录 /var/run/mysqld
SYSTEMD_SERVICE_NAME systemd下MySQL服务的名称 mysqld
TMPDIR tmpdir默认值
USE_LD_GOLD 是否使用GNU黄金链接器 ON 8.0.31
USE_LD_LLD 是否使用LLVM lld链接器 ON 8.0.16
WIN_DEBUG_NO_INLINE 是否禁用函数内联 OFF
WITHOUT_SERVER 不要构建服务器;仅供内部使用 OFF
WITHOUT_xxx_STORAGE_ENGINE 从构建中排除存储引擎xxx
WITH_ANT 构建GCS Java包装器的Ant路径
WITH_ASAN 启用地址杀毒 OFF
WITH_ASAN_SCOPE 启用address sanitizer-fsan itize-address-use-after-scope Clang标志 OFF
WITH_AUTHENTICATION_CLIENT_PLUGINS 如果构建了任何相应的服务器认证插件,则自动启用 8.0.26
WITH_AUTHENTICATION_LDAP 如果无法构建LDAP身份验证插件,是否报告错误 OFF
WITH_AUTHENTICATION_PAM 构建PAM认证插件 OFF
WITH_AWS_SDK Amazon Web Services软件开发工具包的位置
WITH_BOOST 增强库源的位置
WITH_BUILD_ID 在Linux系统上,生成一个惟一的构建ID ON 8.0.31
WITH_BUNDLED_LIBEVENT 生成ndbmemcache时使用绑定的libevent废弃 ON 8.0.23
WITH_BUNDLED_MEMCACHED 构建ndbmemcache时使用捆绑的memcached废弃 ON 8.0.23
WITH_CLASSPATH 构建MySQL Cluster Connector for Java时使用的类路径。默认值为空字符串。 ``
WITH_CLIENT_PROTOCOL_TRACING 构建客户端协议跟踪框架 ON
WITH_CURL curl库的位置
WITH_DEBUG 是否包括调试支持 OFF
WITH_DEFAULT_COMPILER_OPTIONS 是否使用默认编译器选项 ON
WITH_DEFAULT_FEATURE_SET 是否使用默认功能集 ON 8.0.22
WITH_DEVELOPER_ENTITLEMENTS 是否向macOS上的所有可执行文件添加“get-task-allow”权限,以便在服务器意外停机时生成核心转储 OFF 8.0.30
WITH_EDITLINE 要使用哪个libedit/editline库 bundled
WITH_ERROR_INSERT 在NDB存储引擎中启用错误注入。不应用于构建用于生产的二进制文件。 OFF
WITH_FIDO FIDO库支持的类型 bundled 8.0.27
WITH_GMOCK googlemock发行版的路径 8.0.26
WITH_ICU ICU支持的类型 bundled
WITH_INNODB_EXTRA_DEBUG 是否包含对InnoDB的额外调试支持。 OFF
WITH_INNODB_MEMCACHED 是否生成memcached共享库。 OFF
WITH_JEMALLOC 是否与-ljemalloc链接 OFF 8.0.16
WITH_KEYRING_TEST 构建密匙环测试程序 OFF
WITH_LIBEVENT 要使用哪个libevent库 bundled
WITH_LIBWRAP 是否包含libwrap (TCP wrappers)支持 OFF
WITH_LOCK_ORDER 是否启用LOCK_ORDER工具 OFF 8.0.17
WITH_LSAN 是否运行LeakSanitizer,而不运行AddressSanitizer OFF 8.0.16
WITH_LTO 启用链接时间优化器 OFF 8.0.13
WITH_LZ4 LZ4库支持的类型 bundled
WITH_LZMA LZMA图书馆支持的类型 bundled 8.0.16
WITH_MECAB 编译MeCab
WITH_MSAN 启用内存初始化器 OFF
WITH_MSCRT_DEBUG 启用Visual Studio CRT内存泄漏跟踪 OFF
WITH_MYSQLX 是否禁用X协议 ON
WITH_NDB 构建MySQL NDB集群,包括NDB存储引擎和所有NDB程序 OFF 8.0.31
WITH_NDBAPI_EXAMPLES 构建API示例程序。 OFF
WITH_NDBCLUSTER NDB 8.0.30和更低版本:构建NDB存储引擎。NDB 8.0.31及更高版本:已弃用;请改用WITH_NDB OFF
WITH_NDBCLUSTER_STORAGE_ENGINE 在NDB 8.0.31之前,这仅供内部使用。NDB 8.0.31和更高版本:切换(仅)包含NDBCLUSTER存储引擎 ON
WITH_NDBMTD 构建多线程数据节点二进制文件 ON
WITH_NDB_DEBUG 为测试或故障排除生成调试版本。 OFF
WITH_NDB_JAVA 启用Java和ClusterJ支持的构建。默认启用。仅在MySQL集群中受支持。 ON
WITH_NDB_PORT 使用此选项构建的管理服务器使用的默认端口。如果没有使用此选项来构建它,管理服务器的默认端口是1186。 [none]
WITH_NDB_TEST 包括NDB API测试程序。 OFF
WITH_NUMA 设置NUMA内存分配策略
WITH_PACKAGE_FLAGS 对于通常用于RPM/DEB包的标志,是否将它们添加到那些平台上的独立构建中 8.0.26
WITH_PLUGIN_NDBCLUSTER 供内部使用;可能无法在所有情况下都按预期工作。相反,用户应该使用WITH_NDBCLUSTER 8.0.13 8.0.31
WITH_PROTOBUF 要使用哪个协议缓冲包 bundled
WITH_RAPID 是否构建快速开发周期插件 ON
WITH_RAPIDJSON RapidJSON支持的类型 bundled 8.0.13
WITH_RE2 RE2库支持的类型 bundled 8.0.18
WITH_ROUTER 是否构建MySQL路由器 ON 8.0.16
WITH_SASL 仅供内部使用
WITH_SSL SSL支持的类型 system
WITH_SYSTEMD 允许安装systemd支持文件 OFF
WITH_SYSTEMD_DEBUG 启用其他systemd调试信息 OFF 8.0.22
WITH_SYSTEM_LIBS 设置未明确设置的库选项的系统值 OFF
WITH_TCMALLOC 是否与-ltcmalloc链接。仅在Linux上支持捆绑 OFF 8.0.22
WITH_TEST_TRACE_PLUGIN 构建测试协议跟踪插件 OFF
WITH_TSAN 启用线程杀毒器 OFF
WITH_UBSAN 启用未定义行为杀毒程序 OFF
WITH_UNIT_TESTS 用单元测试编译MySQL ON
WITH_UNIXODBC 启用unixODBC支持 OFF
WITH_VALGRIND 是否在Valgrind头文件中编译 OFF
WITH_WIN_JEMALLOC 包含jemalloc.dll的目录的路径 8.0.29
WITH_ZLIB zlib支持的类型 bundled
WITH_ZSTD zstd支持的类型 bundled 8.0.18
WITH_xxx_STORAGE_ENGINE 将存储引擎xxx静态编译到服务器中

常规选项

  • -DBUILD_CONFIG=mysql_release

    该选项使用Oracle为官方MySQL版本生成二进制发行版所使用的相同构建选项来配置源发行版。

  • -DWITH_BUILD_ID=*bool*

    在Linux系统上,生成一个唯一的内部版本ID,该ID用作build_id系统变量,并在启动时写入MySQL服务器日志。将此选项设置为OFF禁用此功能。

    在MySQL 8.0.31中增加,这个选项对Linux以外的平台没有影响。

  • -DBUNDLE_RUNTIME_LIBRARIES=*bool*

    是否将运行时库与Windows的服务器MSI和Zip包捆绑在一起。

  • -DCMAKE_BUILD_TYPE=*type*

    要生成的生成类型:

    • RelWithDebInfo:启用优化并生成调试信息。这是默认的MySQL构建类型。
    • Release:启用优化,但忽略调试信息以减小生成大小。这个构建类型是在MySQL 8.0.13中添加的。
    • Debug:禁用优化并生成调试信息。如果WITH_DEBUG选项已启用。也就是说,-DWITH_DEBUG=1与...有相同的效果-DCMAKE_BUILD_TYPE=Debug.

    选项值NoneMinSizeRel不支持。

  • -DCPACK_MONOLITHIC_INSTALL=*bool*

    此选项会影响制作包操作会生成多个安装包文件或单个文件。如果禁用,该操作会生成多个安装包文件,如果您只想安装完整MySQL安装的一个子集,这可能会很有用。如果启用,它会为安装所有东西生成一个文件。

  • -DFORCE_INSOURCE_BUILD=*bool*

    定义是否强制进行源代码内生成。建议使用源代码外的构建,因为它们允许来自同一个源代码的多个构建,并且通过移除构建目录可以快速执行清理。若要强制进行源代码内编译,请调用CMake随着-DFORCE_INSOURCE_BUILD=ON.

  • -DFORCE_COLORED_OUTPUT=*bool*

    定义是否为启用彩色编译器输出(同groundcontrolcenter)地面控制中心叮当声在命令行上编译时。默认为OFF.

安装布局选项

CMAKE_INSTALL_PREFIX选项指示基本安装目录。具有表单名称的其他选项INSTALL_*xxx*指示组件位置相对于前缀进行解释,它们的值是相对路径名。它们的值不应包含前缀。

存储引擎选项

存储引擎构建为插件。您可以将插件构建为静态模块(编译到服务器中)或动态模块(构建为动态库,必须使用INSTALL PLUGIN语句或--plugin-load选项才能使用)。一些插件可能不支持静态或动态构建。

InnoDB, MyISAM, MERGE, MEMORY,以及CSV引擎是强制性的(总是编译到服务器中),不需要显式安装。

要将存储引擎静态编译到服务器中,请使用-DWITH_*engine*_STORAGE_ENGINE=1。一些允许的engine值是ARCHIVE, BLACKHOLE, EXAMPLE,以及FEDERATED。示例:

-DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1

要构建支持NDB集群的MySQL,请使用WITH_NDB选项。(NDB 8.0.30及更早版本:使用WITH_NDBCLUSTER.)

注意

没有性能模式支持,就不可能进行编译。如果希望在没有特定类型的检测的情况下进行编译,可以使用以下方法CMake选项:

DISABLE_PSI_COND
DISABLE_PSI_DATA_LOCK
DISABLE_PSI_ERROR
DISABLE_PSI_FILE
DISABLE_PSI_IDLE
DISABLE_PSI_MEMORY
DISABLE_PSI_METADATA
DISABLE_PSI_MUTEX
DISABLE_PSI_PS
DISABLE_PSI_RWLOCK
DISABLE_PSI_SOCKET
DISABLE_PSI_SP
DISABLE_PSI_STAGE
DISABLE_PSI_STATEMENT
DISABLE_PSI_STATEMENT_DIGEST
DISABLE_PSI_TABLE
DISABLE_PSI_THREAD
DISABLE_PSI_TRANSACTION

例如,要在没有互斥插装的情况下进行编译,可以使用-DDISABLE_PSI_MUTEX=1.

要从构建中排除存储引擎,请使用-DWITH_*engine*_STORAGE_ENGINE=0。示例:

-DWITH_ARCHIVE_STORAGE_ENGINE=0
-DWITH_EXAMPLE_STORAGE_ENGINE=0
-DWITH_FEDERATED_STORAGE_ENGINE=0

还可以使用从构建中排除存储引擎-DWITHOUT_*engine*_STORAGE_ENGINE=1(但是-DWITH_*engine*_STORAGE_ENGINE=0是首选)。示例:

-DWITHOUT_ARCHIVE_STORAGE_ENGINE=1
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1
-DWITHOUT_FEDERATED_STORAGE_ENGINE=1

如果都不是-DWITH_*engine*_STORAGE_ENGINE也不-DWITHOUT_*engine*_STORAGE_ENGINE为给定的存储引擎指定了,则该引擎将作为共享模块生成,如果不能作为共享模块生成,则将其排除。

功能选项

  • -DADD_GDB_INDEX=*bool*

    此选项确定是否允许生成.gdb_index部分,这使得在调试器中加载它们的速度更快。默认情况下,该选项是禁用的。法学博士使用了链接器,如果使用法学博士或者GNU金色的已使用。

    这个选项是在MySQL 8.0.18中添加的。

  • -DCOMPILATION_COMMENT=*string*

    关于编译环境的描述性注释。从MySQL 8.0.14开始,mysqld使用COMPILATION_COMMENT_SERVER。其他程序继续使用COMPILATION_COMMENT.

  • -DCOMPRESS_DEBUG_SECTIONS=*bool*

    是否压缩二进制可执行文件的调试部分(仅限Linux)。在构建过程中,压缩可执行调试部分以额外的CPU时间为代价来节省空间。

    默认值为OFF。如果未显式设置此选项,但COMPRESS_DEBUG_SECTIONS环境变量,则该选项从该变量中获取其值。

    这个选项是在MySQL 8.0.22中添加的。

  • -DCOMPILATION_COMMENT_SERVER=*string*

    关于供使用的编译环境的描述性注释mysqld(例如,要设置version_comment系统变量)。这个选项是在MySQL 8.0.14中添加的。在8.0.14之前,服务器使用COMPILATION_COMMENT.

  • -DDEFAULT_CHARSET=*charset_name*

    服务器字符集。默认情况下,MySQL使用utf8mb4字符集。

    charset_name可能是以下之一binary, armscii8, ascii, big5, cp1250, cp1251, cp1256, cp1257, cp850, cp852, cp866, cp932, dec8, eucjpms, euckr, gb2312, gbk, geostd8, greek, hebrew, hp8, keybcs2, koi8r, koi8u, latin1, latin2, latin5, latin7, macce, macroman, sjis, swe7, tis620, ucs2, ujis, utf8mb3, utf8mb4, utf16, utf16le, utf32.

    该值可以在服务器启动时用--character-set-server选项。

  • -DDEFAULT_COLLATION=*collation_name*

    服务器排序规则。默认情况下,MySQL使用utf8mb4_0900_ai_ci。使用SHOW COLLATION语句来确定每个字符集可用的排序规则。

    该值可以在服务器启动时用--collation_server选项。

  • -DDISABLE_PSI_COND=*bool*

    是否排除性能架构条件检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_FILE=*bool*

    是否排除性能架构文件检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_IDLE=*bool*

    是否排除性能架构空闲检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_MEMORY=*bool*

    是否排除性能架构内存检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_METADATA=*bool*

    是否排除性能架构元数据检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_MUTEX=*bool*

    是否排除性能架构互斥体检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_RWLOCK=*bool*

    是否排除性能架构rwlock检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_SOCKET=*bool*

    是否排除性能架构套接字检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_SP=*bool*

    是否排除性能架构存储程序检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_STAGE=*bool*

    是否排除性能架构阶段检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_STATEMENT=*bool*

    是否排除性能架构语句检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_STATEMENT_DIGEST=*bool*

    是否排除性能架构语句摘要检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_TABLE=*bool*

    是否排除性能架构表检测。默认值为OFF(包括)。

  • -DDISABLE_SHARED=*bool*

    是否禁用构建构建共享库和编译位置相关代码。默认值为OFF(编译与位置无关的代码)。

    该选项未被使用,在MySQL 8.0.18中被移除。

  • -DDISABLE_PSI_PS=*bool*

    排除性能架构预准备语句实例检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_THREAD=*bool*

    排除性能架构线程检测。默认值为OFF(包括)。

    仅在不使用任何检测进行生成时禁用线程,因为其他检测依赖于线程。

  • -DDISABLE_PSI_TRANSACTION=*bool*

    排除性能架构事务检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_DATA_LOCK=*bool*

    排除性能模式数据锁检测。默认值为OFF(包括)。

  • -DDISABLE_PSI_ERROR=*bool*

    排除性能架构服务器错误检测。默认值为OFF(包括)。

  • -DDOWNLOAD_BOOST=*bool*

    是否下载Boost库。默认值为OFF.

    参见WITH_BOOST关于使用Boost的附加讨论选项。

  • -DDOWNLOAD_BOOST_TIMEOUT=*seconds*

    下载Boost库的超时时间(秒)。默认值为600秒。

    参见WITH_BOOST关于使用Boost的附加讨论选项。

  • -DENABLE_DOWNLOADS=*bool*

    是否下载可选文件。例如,启用该选项后,CMake下载Google测试发行版,测试套件使用它来运行构建GCS Java包装器所需的单元测试或Ant和JUnit。

    从MySQL 8.0.26开始,MySQL源代码发行版捆绑了用于运行单元测试的Google Test源代码。因此,从该版本开始WITH_GMOCKENABLE_DOWNLOADS CMake选项将被删除,如果指定,将被忽略。

  • -DENABLE_EXPERIMENTAL_SYSVARS=*bool*

    是否启用实验性InnoDB系统变量。实验性系统变量是为从事MySQL开发的人员设计的,只应在开发或测试环境中使用,在未来的MySQL版本中可能会被删除,恕不另行通知。有关实验系统变量的信息,请参考/storage/innobase/handler/ha_innodb.cc在MySQL源代码树中。实验系统变量可以通过搜索来识别“插件_ VAR _实验”.

  • -DENABLE_GCOV=*bool*

    是否包括gcov支持(仅限Linux)。

  • -DENABLE_GPROF=*bool*

    是否启用gprof(仅限优化的Linux版本)。

  • -DENABLED_LOCAL_INFILE=*bool*

    该选项控制编译的默认值LOCALMySQL客户端库的功能。因此,没有明确安排的客户LOCAL根据禁用或启用的功能ENABLED_LOCAL_INFILEMySQL构建时指定的设置。

    默认情况下,MySQL二进制发行版中的客户端库是用ENABLED_LOCAL_INFILE已禁用。如果从源代码编译MySQL,用ENABLED_LOCAL_INFILE禁用或启用,取决于不进行显式安排的客户端是否应该具有LOCAL分别禁用或启用功能。

    ENABLED_LOCAL_INFILE控制客户端的默认值LOCAL能力。对于服务器来说local_infile系统变量控制服务器端LOCAL能力。显式地使服务器拒绝或允许LOAD DATA LOCAL语句(不管客户端程序和库在构建时或运行时是如何配置的),开始mysqld随着--local-infile分别禁用或启用。local_infile也可以在运行时设置。看见第8.1.6节,“本地加载数据的安全考虑”.

  • -DENABLED_PROFILING=*bool*

    是否启用查询分析代码(对于SHOW PROFILESHOW PROFILES报表)。

  • -DFORCE_UNSUPPORTED_COMPILER=*bool*

    默认情况下,CMake检查的最低版本支持的编译器;要禁用此检查,请使用-DFORCE_UNSUPPORTED_COMPILER=ON.

  • -DFPROFILE_GENERATE=*bool*

    是否生成配置文件导向优化(PGO)数据。该选项可用于在GCC中试验PGO。看见cmake/fprofile.cmake在MySQL源代码发行版中,了解有关使用FPROFILE_GENERATEFPROFILE_USE。这些选项已经过GCC 8和GCC 9的测试。

    这个选项是在MySQL 8.0.19中添加的。

  • -DFPROFILE_USE=*bool*

    是否使用性能分析优化(PGO)数据。该选项可用于在GCC中试验PGO。参见cmake/fprofile.cmakeMySQL源代码发行版中的FPROFILE_GENERATEFPROFILE_USE。这些选项已经过GCC 8和GCC 9的测试。

    使能够FPROFILE_USE还支持WITH_LTO.

    这个选项是在MySQL 8.0.19中添加的。

  • -DHAVE_PSI_MEMORY_INTERFACE=*bool*

    是否为内存分配函数启用性能模式内存跟踪模块(ut::aligned_*name*库函数),用于过度对齐类型的动态存储。

  • -DIGNORE_AIO_CHECK=*bool*

    如果-DBUILD_CONFIG=mysql_release选项是在Linux上给出的libaio默认情况下,必须链接库。如果你没有libaio或者不想安装它,可以通过指定-DIGNORE_AIO_CHECK=1.

  • -DMAX_INDEXES=*num*

    每个表的最大索引数。默认值为64。最大值为255。小于64的值将被忽略,并使用默认值64。

  • -DMYSQL_MAINTAINER_MODE=*bool*

    是否启用特定于MySQL维护者的开发环境。如果启用,此选项会导致编译器警告变成错误。

  • -DWITH_DEVELOPER_ENTITLEMENTS=*bool*

    是否添加get-task-allow所有可执行文件在服务器意外停机时生成核心转储的权利。

    在macOS 11+上,核心转储仅限于带有com.apple.security.get-task-allow该CMake选项启用的权限。该权利允许其他进程连接和读取/修改进程内存,并允许--core-file发挥预期的功能。

    这个选项是在MySQL 8.0.30中添加的。

  • -DMUTEX_TYPE=*type*

    使用的互斥类型InnoDB。选项包括:

    • event:使用事件互斥。这是默认值和原始值InnoDB互斥实现。
    • sys:在UNIX系统上使用POSIX互斥。使用CRITICAL_SECTIONWindows上的对象(如果有)。
    • futex:使用Linux futexes而不是条件变量来调度等待线程。
  • -DMYSQLX_TCP_PORT=*port_num*

    X插件监听TCP/IP连接的端口号。默认值为33060。

    该值可以在服务器启动时用mysqlx_port系统变量。

  • -DMYSQLX_UNIX_ADDR=*file_name*

    服务器监听X插件套接字连接的Unix套接字文件路径。这必须是绝对路径名。默认值为/tmp/mysqlx.sock.

    该值可以在服务器启动时用mysqlx_port系统变量。

  • -DMYSQL_PROJECT_NAME=*name*

    对于Windows或macOS,是要合并到项目文件名中的项目名称。

  • -DMYSQL_TCP_PORT=*port_num*

    服务器监听TCP/IP连接的端口号。默认值为3306。

    该值可以在服务器启动时用--port选项。

  • -DMYSQL_UNIX_ADDR=*file_name*

    服务器监听套接字连接的Unix套接字文件路径。这必须是绝对路径名。默认值为/tmp/mysql.sock.

    该值可以在服务器启动时用--socket选项。

  • -DOPTIMIZER_TRACE=*bool*

    是否支持优化器跟踪。看见第10.15节,“跟踪优化器”.

  • -DREPRODUCIBLE_BUILD=*bool*

    对于Linux系统上的构建,该选项控制是否要特别注意创建独立于构建位置和时间的构建结果。

    这个选项是在MySQL 8.0.11中添加的。从MySQL 8.0.12开始,它默认为ONRelWithDebInfo构建。

  • -DSHOW_SUPPRESSED_COMPILER_WARNINGS=*bool*

    显示被抑制的编译器警告,这样做不会因-Werror。默认为OFF.

    这个选项是在MySQL 8.0.30中添加的。

  • -DUSE_LD_GOLD=*bool*

    角马金色的MySQL 8.0.31中移除了链接器支持;此CMake选项也被删除。

    CMake使构建过程与GNU链接金色的链接器,如果它可用并且没有被显式禁用。若要禁用此链接器,请指定-DUSE_LD_GOLD=OFF选项。

  • -DUSE_LD_LLD=*bool*

    CMake导致构建过程使用LLVM进行链接法学博士Clang的链接器,如果它可用并且没有被显式禁用。若要禁用此链接器,请指定-DUSE_LD_LLD=OFF选项。

    这个选项是在MySQL 8.0.16中添加的。

  • -DWIN_DEBUG_NO_INLINE=*bool*

    是否在Windows上禁用函数内联。默认值为OFF(内联已启用)。

  • -DWITH_ANT=*path_name*

    将路径设置为Ant,这是构建GCS Java包装器时所必需的。一组WITH_ANT到保存Ant tarball或解压缩的归档文件的目录的路径。当...的时候WITH_ANT未设置,或者设置了特殊值system,构建过程假设二进制ant存在于$PATH.

  • -DWITH_ASAN=*bool*

    是否为支持AddressSanitizer的编译器启用它。默认值为OFF.

  • -DWITH_ASAN_SCOPE=*bool*

    是否启用地址清除器-fsanitize-address-use-after-scope作用域检测后使用的Clang标志。默认为关闭。要使用该选项,-DWITH_ASAN也必须启用。

  • -DWITH_AUTHENTICATION_CLIENT_PLUGINS=*bool*

    如果构建了任何相应的服务器身份验证插件,此选项将自动启用。因此,它的价值取决于其他CMake选项,并且不应显式设置它。

    这个选项是在MySQL 8.0.26中添加的。

  • -DWITH_AUTHENTICATION_LDAP=*bool*

    如果无法构建LDAP身份验证插件,是否报告错误:

    • 如果禁用此选项(默认),如果找到所需的头文件和库,将构建LDAP插件。如果不是,CMake显示关于它的注释。
    • 如果启用此选项,如果找不到所需的头文件和库,将导致CMake产生错误,从而阻止构建服务器。

    有关LDAP验证的信息,请参见8.4.1.7,“LDAP可插拔身份验证”一节.

  • -DWITH_AUTHENTICATION_PAM=*bool*

    是否为包含此插件的源树构建PAM身份验证插件。(参见8.4.1.5,“PAM可插拔认证”一节。)如果指定了此选项,并且插件无法编译,则构建会失败。

  • -DWITH_AWS_SDK=*path_name*

    Amazon Web Services软件开发工具包的位置。

  • -DWITH_BOOST=*path_name*

    构建MySQL需要Boost库。这些CMake选项允许控制库源位置,以及是否自动下载:

    • -DWITH_BOOST=*path_name*指定增强库目录位置。还可以通过设置BOOST_ROOT或者WITH_BOOST环境变量。

      -DWITH_BOOST=system也是允许的,它指示在编译主机上的标准位置安装了正确版本的Boost。在这种情况下,将使用已安装的Boost版本,而不是MySQL源代码发行版中包含的任何版本。

    • -DDOWNLOAD_BOOST=*bool*指定如果增强源不在指定位置,是否下载它。默认值为OFF.

    • -DDOWNLOAD_BOOST_TIMEOUT=*seconds*下载Boost库的超时时间(秒)。默认值为600秒。

    例如,如果您通常构建MySQL,将对象输出放在bldMySQL源代码树的子目录,您可以使用Boost构建,如下所示:

    mkdir bld
    cd bld
    cmake .. -DDOWNLOAD_BOOST=ON -DWITH_BOOST=$HOME/my_boost
    

    这会导致Boost被下载到my_boost您的主目录下的目录。如果所需的增强版本已经存在,则不进行下载。如果所需的Boost版本发生变化,则会下载更新的版本。

    如果Boost已经安装在本地,并且您的编译器自己找到了Boost头文件,则可能没有必要指定上述内容CMake选项。但是,如果MySQL所需的Boost版本发生了变化,而本地安装的版本还没有升级,您可能会遇到构建问题。使用CMake选项应该给你一个成功的构建。

    使用上述允许将Boost下载到指定位置的设置,当所需的Boost版本发生变化时,您需要删除bld文件夹,重新创建它,并执行cmake再走一步。否则,新的Boost版本可能无法下载,编译可能会失败。

  • -DWITH_CLIENT_PROTOCOL_TRACING=*bool*

    是否将客户端协议跟踪框架构建到客户端库中。默认情况下,此选项处于启用状态。

    有关编写协议跟踪客户端插件的信息,请参见编写协议跟踪插件.

    另请参见WITH_TEST_TRACE_PLUGIN选项。

  • -DWITH_CURL=*curl_type*

    的位置curl图书馆。curl_type能够system(使用系统curl库)或指向curl图书馆。

  • -DWITH_DEBUG=*bool*

    是否包括调试支持。

    为MySQL配置调试支持使您能够使用--debug="d,parser_debug"选项。这导致用于处理SQL语句的Bison解析器将解析器跟踪转储到服务器的标准错误输出中。通常,此输出会写入错误日志。

    的同步调试检查InnoDB存储引擎在下定义UNIV_DEBUG并且在使用编译调试支持时可用WITH_DEBUG选项。当在中编译调试支持时innodb_sync_debug配置选项可用于启用或禁用InnoDB同步调试检查。

    使能够WITH_DEBUG还启用调试同步。该设施用于测试和调试。在中编译时,默认情况下,运行时禁用调试同步。要启用它,请启动mysqld--debug-sync-timeout=*N*选项,其中N是大于0的超时值。(默认值为0,表示禁用调试同步。)N成为单个同步点的默认超时。

    的同步调试检查InnoDB使用编译调试支持时,存储引擎可用WITH_DEBUG选项。

    有关调试同步工具以及如何使用同步点的说明,请参见MySQL内部:测试同步.

  • -DWITH_DEFAULT_FEATURE_SET=*bool*

    是否使用中的标志cmake/build_configurations/feature_set.cmake。MySQL 8.0.22中移除了该选项。

  • -DWITH_EDITLINE=*value*

    哪个libedit/editline要使用的库。允许的值有bundled(默认值)和system.

  • -DWITH_FIDO=*fido_type*

    authentication_fido身份验证插件是使用FIDO库实现的(请参见8.4.1.11章节,“FIDO可插拔认证”).这WITH_FIDO选项指明FIDO支持的来源:

    • bundled:使用发行版附带的FIDO库。这是默认值。

      从MySQL 8.0.30开始,MySQL包括fido2版本1.8.0。(使用以前的版本fido2 1.5.0).

    • system:使用系统FIDO库。

    WITH_FIDO已禁用(设置为none)如果所有认证插件都被禁用。

    这个选项是在MySQL 8.0.27中添加的。

  • -DWITH_GMOCK=*path_name*

    googlemock发行版的路径,用于基于Google Test的单元测试。选项值是分发zip文件的路径。或者,设置WITH_GMOCK环境变量设置为路径名。也可以使用-DENABLE_DOWNLOADS=1,以便CMake从GitHub下载发行版。

    如果您构建MySQL时没有Google测试单元测试(通过配置没有WITH_GMOCK),CMake会显示一条消息,指示如何下载它。

    从MySQL 8.0.26开始,MySQL源代码发行版捆绑了Google测试源代码。因此,从该版本开始WITH_GMOCKENABLE_DOWNLOADSCMake选项被删除,如果指定,将被忽略。

  • -DWITH_ICU={*icu_type*|*path_name*}

    MySQL使用Unicode的国际组件(ICU)来支持正则表达式操作。这WITH_ICU选项指示要包括的ICU支持类型或要使用的ICU安装的路径名。

    • icu_type可以是下列值之一:
      • bundled:使用发行版附带的ICU库。这是默认设置,也是Windows唯一支持的选项。
      • system:使用系统ICU库。
    • path_name是要使用的ICU安装的路径名。这可能比使用icu_type的价值system因为它可以防止CMake检测和使用系统上安装的较旧或不正确的ICU版本。(另一种允许的方法是设置WITH_ICUsystem并设置CMAKE_PREFIX_PATH选择path_name.)
  • -DWITH_INNODB_EXTRA_DEBUG=*bool*

    是否包含额外的InnoDB调试支持。

    使能够WITH_INNODB_EXTRA_DEBUG打开额外的InnoDB调试检查。只有在以下情况下,才能启用此选项WITH_DEBUG已启用。

  • -DWITH_INNODB_MEMCACHED=*bool*

    是否生成memcached共享库(libmemcached.soinnodb_engine.so).

  • -DWITH_JEMALLOC=*bool*

    是否与链接-ljemalloc。如果启用,内置malloc(), calloc(), realloc(),以及free()例程被禁用。默认值为OFF.

    WITH_JEMALLOCWITH_TCMALLOC是相互排斥的。

    这个选项是在MySQL 8.0.16中添加的。

  • -DWITH_KEYRING_TEST=*bool*

    是否生成伴随keyring_file插件。默认值为OFF。测试文件源代码位于plugin/keyring/keyring-test目录。

  • -DWITH_LIBEVENT=*string*

    哪个libevent要使用的库。允许的值有bundled(默认)和system。在MySQL 8.0.21之前,如果您指定system,系统libevent如果存在,则使用库,否则会发生错误。在MySQL 8.0.21和更高版本中,如果system被指定并且没有系统libevent库,无论如何都会发生错误,并且绑定libevent未使用。

    libevent库是必需的InnoDBmemcached、X Plugin和MySQL路由器。

  • -DWITH_LIBWRAP=*bool*

    是否包括libwrap(TCP包装)支持。

  • -DWITH_LOCK_ORDER=*bool*

    是否启用LOCK_ORDER工具。默认情况下,此选项是禁用的,并且服务器版本不包含任何工具。如果启用了工具,则LOCK_ORDER工具可用,并可按中所述使用第7.9.3节,“LOCK_ORDER工具”.

    注意

    WITH_LOCK_ORDER选项,MySQL构建需要弯曲程序。

    这个选项是在MySQL 8.0.17中添加的。

  • -DWITH_LSAN=*bool*

    是否运行LeakSanitizer,不运行AddressSanitizer。默认值为OFF.

    这个选项是在MySQL 8.0.16中添加的。

  • -DWITH_LTO=*bool*

    如果编译器支持,是否启用链接时优化器。默认值为OFF除非FPROFILE_USE已启用。

    这个选项是在MySQL 8.0.13中添加的。

  • -DWITH_LZ4=*lz4_type*

    WITH_LZ4选项指示zlib支持:

    • bundled:使用lz4发行版附带的库。这是默认值。
    • system:使用系统lz4图书馆。如果WITH_LZ4设置为该值,则lz4 _解压实用工具不是内置的。在这种情况下,系统lz4可以使用命令来代替。
  • -DWITH_LZMA=*lzma_type*

    要包含的LZMA库支持的类型。lzma_type可以是下列值之一:

    • bundled:使用发行版附带的LZMA库。这是默认值。
    • system:使用系统LZMA库。

    MySQL 8.0.16中移除了该选项。

  • -DWITH_MECAB={disabled|system|*path_name*}

    使用该选项编译MeCab解析器。如果您已经将MeCab安装到其默认安装目录中,请将-DWITH_MECAB=system。这system选项适用于使用本机软件包管理实用程序从源代码或二进制文件执行的MeCab安装。如果您将MeCab安装到自定义安装目录,请指定MeCab安装的路径,例如,-DWITH_MECAB=/opt/mecab。如果system选项不起作用,指定MeCab安装路径应该在所有情况下都起作用。

    有关相关信息,请参见第14.9.9节,“MeCab全文解析器插件”.

  • -DWITH_MSAN=*bool*

    是否为支持MemorySanitizer的编译器启用它。默认为关闭。

    如果启用该选项,要使其生效,所有链接到MySQL的库也必须在启用该选项的情况下编译。

  • -DWITH_MSCRT_DEBUG=*bool*

    是否启用Visual Studio CRT内存泄漏跟踪。默认值为OFF.

  • -DMSVC_CPPCHECK=*bool*

    是否启用MSVC代码分析。默认值为OFF.

  • -DWITH_MYSQLX=*bool*

    是否构建支持X插件。默认值为ON。看见第22章,使用MySQL作为文档存储.

  • -DWITH_NUMA=*bool*

    显式设置NUMA内存分配策略。CMake设置默认值WITH_NUMA基于当前平台是否具有NUMA支持。对于没有NUMA支持的平台,CMake表现如下:

    • 没有NUMA选项(正常情况下),CMake正常继续,仅产生以下警告:NUMA库丢失或所需版本不可用.
    • 随着-DWITH_NUMA=ON, CMake因以下错误而中止:NUMA库丢失或所需版本不可用.
  • -DWITH_PACKAGE_FLAGS=*bool*

    对于通常用于RPM和Debian包的标志,是否将它们添加到这些平台上的独立构建中。默认值为ON对于非bug版本。

    这个选项是在MySQL 8.0.26中添加的。

  • -DWITH_PROTOBUF=*protobuf_type*

    要使用哪个协议缓冲包。protobuf_type可以是下列值之一:

    • bundled:使用发行版附带的软件包。这是默认值。可选使用INSTALL_PRIV_LIBDIR修改动态Protobuf库目录。
    • system:使用系统上安装的软件包。

    其他值被忽略,回退到bundled.

  • -DWITH_RAPID=*bool*

    是否构建快速开发周期插件。启用时,一个rapid在包含这些插件的构建树中创建目录。禁用时,否rapid在构建树中创建目录。默认值为ON,除非rapid目录从源树中删除,在这种情况下,缺省值变为OFF.

  • -DWITH_RAPIDJSON=*rapidjson_type*

    要包含的RapidJSON库支持的类型。rapidjson_type可以是下列值之一:

    • bundled:使用发行版附带的RapidJSON库。这是默认值。
    • system:使用系统RapidJSON库。需要版本1.1.0或更高版本。

    这个选项是在MySQL 8.0.13中添加的。

  • -DWITH_RE2=*re2_type*

    要包含的RE2库支持的类型。re2_type可以是下列值之一:

    • bundled:使用发行版附带的RE2库。这是默认值。
    • system:使用系统RE2库。

    从MySQL 8.0.18开始,MySQL不再使用RE2库,这个选项已经被移除。

  • -DWITH_ROUTER=*bool*

    是否搭建MySQL路由器。默认值为ON.

    这个选项是在MySQL 8.0.16中添加的。

  • -DWITH_SASL=*value*

    仅供内部使用。该选项是在8.0.20中添加的。Windows上不支持。

  • -DWITH_SSL={*ssl_type*|path_name}

    为了支持加密连接、用于随机数生成的熵以及其他与加密相关的操作,MySQL必须使用SSL库来构建。此选项指定要使用的SSL库。

    • ssl_type可以是下列值之一:

      • system:使用系统OpenSSL库。这是默认值。

        在macOS和Windows上,使用system配置MySQL进行构建,就像使用path_name指向手动安装的OpenSSL库。这是因为它们没有系统SSL库。在macOS上,brew安装openssl安装到/usr/local/opt/openssl以便system能找到。在Windows上,它会检查%ProgramFiles%/OpenSSL, %ProgramFiles%/OpenSSL-Win32, %ProgramFiles%/OpenSSL-Win64, C:/OpenSSL, C:/OpenSSL-Win32,以及C:/OpenSSL-Win64.

      • yes:这是的同义词system.

      • openssl*version*: (MySQL 8.0.30及更高版本:)使用替代的OpenSSL系统包,例如openssl11在EL7上,或openssl3在EL8上。

        LDAP和Kerberos等身份验证插件被禁用,因为它们不支持OpenSSL的这些替代版本。

    • path_name是要使用的OpenSSL安装的路径名。这可能比使用ssl_type的价值system因为它可以防止CMake检测和使用系统上安装的旧版本或不正确的OpenSSL版本。(另一种允许的方法是设置WITH_SSLsystem并设置CMAKE_PREFIX_PATH选择path_name.)

    有关配置SSL库的其他信息,请参见第2.8.6节,“配置SSL库支持”.

  • -DWITH_SYSTEMD=*bool*

    是否允许安装系统d支持文件。默认情况下,此选项是禁用的。启用时,系统d支持文件已安装,脚本如mysqld_safe和System V初始化脚本。在平台上系统d不可用,正在启用WITH_SYSTEMD导致来自的错误CMake.

    有关使用的更多信息系统d,参见第2.5.9节,“使用systemd管理MySQL服务器”。该部分还包括有关指定选项的信息,这些选项在[mysqld_safe]选项组。因为mysqld_safe在以下情况下不安装系统d时,必须以另一种方式指定此类选项。

  • -DWITH_SYSTEM_LIBS=*bool*

    此选项用作“雨伞”选项来设置system以下任何值CMake未明确设置的选项:WITH_CURL, WITH_EDITLINE, WITH_FIDO, WITH_ICU, WITH_LIBEVENT, WITH_LZ4, WITH_LZMA, WITH_PROTOBUF, WITH_RE2, WITH_SSL, WITH_ZSTD.

    WITH_ZLIB包含在priot MySQL 8.0.30中。

  • -DWITH_SYSTEMD_DEBUG=*bool*

    是否产生附加系统d调试信息,适用于系统d用于运行MySQL。默认值为OFF.

    这个选项是在MySQL 8.0.22中添加的。

  • -DWITH_TCMALLOC=*bool*

    是否与链接-ltcmalloc。如果启用,内置malloc(), calloc(), realloc(),以及free()例程被禁用。默认值为OFF.

    从MySQL 8.0.38开始tcmalloc库包含在源代码中;通过将此选项设置为,可以使内部版本使用捆绑版本BUNDLED. BUNDLED仅在Linux系统上受支持。

    WITH_TCMALLOCWITH_JEMALLOC是相互排斥的。

    这个选项是在MySQL 8.0.22中添加的。

  • -DWITH_TEST_TRACE_PLUGIN=*bool*

    是否构建测试协议跟踪客户端插件(参见使用测试协议跟踪插件).默认情况下,此选项是禁用的。启用此选项没有任何效果,除非WITH_CLIENT_PROTOCOL_TRACING选项已启用。如果MySQL配置为启用这两个选项,则libmysqlclient客户端库内置了测试协议跟踪插件,所有标准的MySQL客户端都加载了该插件。然而,即使启用了测试插件,默认情况下也没有效果。使用环境变量提供对插件的控制;看见使用测试协议跟踪插件.

    注意

    启用WITH_TEST_TRACE_PLUGIN选项,因为一次只能加载一个这样的插件,并且在尝试加载第二个插件时会出现错误。如果您已经构建了启用了测试协议跟踪插件的MySQL来查看它是如何工作的,那么您必须在没有它的情况下重新构建MySQL,然后才能使用您自己的插件。

    有关编写跟踪插件的信息,请参见编写协议跟踪插件.

  • -DWITH_TSAN=*bool*

    是否为支持ThreadSanitizer的编译器启用它。默认为关闭。

  • -DWITH_UBSAN=*bool*

    是否为支持未定义行为杀毒器的编译器启用它。默认为关闭。

  • -DWITH_UNIT_TESTS={ON|OFF}

    如果启用,用单元测试编译MySQL。默认值为ON除非服务器没有被编译。

  • -DWITH_UNIXODBC=*1*

    为连接器/ODBC启用unixODBC支持。

  • -DWITH_VALGRIND=*bool*

    是否在Valgrind头文件中编译,这将向MySQL代码公开Valgrind API。默认值为OFF.

    要生成支持Valgrind的调试版本,-DWITH_VALGRIND=1通常与结合使用-DWITH_DEBUG=1。看见构建调试配置.

  • -DWITH_WIN_JEMALLOC=*string*

    在Windows上,传入包含以下内容的目录的路径jemalloc.dll启用jemalloc功能。构建系统复制jemalloc.dll到与相同的目录mysqld.exe和/或mysqld-debug.exe并将其用于内存管理操作。在下列情况下,使用标准记忆功能jemalloc.dll未找到或未导出所需的函数。信息级日志消息记录是否找到并使用了jemalloc。

    对于Windows的官方MySQL二进制文件,此选项是启用的。

    这个选项是在MySQL 8.0.29中添加的。

  • -DWITH_ZLIB=*zlib_type*

    有些功能要求服务器在构建时支持压缩库,例如COMPRESS()UNCOMPRESS()客户/服务器协议的功能和压缩。这WITH_ZLIB选项指示zlib支持:

    在MYSQL 8.0.32和更高版本中,支持的最低版本zlib是1.2.13。

    • bundled:使用zlib发行版附带的库。这是默认值。
    • system:使用系统zlib图书馆。如果WITH_ZLIB设置为该值,则zlib _解压缩实用工具不是内置的。在这种情况下,系统openssl zlib可以使用命令来代替。
  • -DWITH_ZSTD=*zstd_type*

    使用的连接压缩zstd算法(参见第6.2.8节,“连接压缩控制”)要求构建服务器时使用zstd图书馆支持。这WITH_ZSTD选项指示zstd支持:

    • bundled:使用zstd发行版附带的库。这是默认值。
    • system:使用系统zstd图书馆。

    这个选项是在MySQL 8.0.18中添加的。

  • -DWITHOUT_SERVER=*bool*

    是否不用MySQL服务器构建。默认设置为OFF,这将构建服务器。

    这被认为是一个实验性的选择;最好使用服务器构建。

    此选项还会阻止构建NDB存储引擎或任何NDB包括管理和数据节点程序的二进制文件。

编译器标志

若要指定您自己的C和C++编译器标志,对于不影响优化的标志,请使用CMAKE_C_FLAGSCMAKE_CXX_FLAGSCMake选项。

当提供您自己的编译器标志时,您可能希望指定CMAKE_BUILD_TYPE也是。

例如,要在64位Linux机器上创建32位发布版本,请执行以下操作:

$> mkdir build
$> cd build
$> cmake .. -DCMAKE_C_FLAGS=-m32 \
  -DCMAKE_CXX_FLAGS=-m32 \
  -DCMAKE_BUILD_TYPE=RelWithDebInfo

如果您设置了影响优化的标志(-O*number*),您必须设置CMAKE_C_FLAGS_*build_type*和/或CMAKE_CXX_FLAGS_*build_type*选项,在哪里build_type对应于CMAKE_BUILD_TYPE价值。为默认生成类型指定不同的优化(RelWithDebInfo)设置CMAKE_C_FLAGS_RELWITHDEBINFOCMAKE_CXX_FLAGS_RELWITHDEBINFO选项。例如,在Linux上用-O3对于调试符号,请执行以下操作:

$> cmake .. -DCMAKE_C_FLAGS_RELWITHDEBINFO="-O3 -g" \
  -DCMAKE_CXX_FLAGS_RELWITHDEBINFO="-O3 -g"

CMake用于编译NDB群集的选项

要编译支持NDB集群,您可以使用-DWITH_NDB,这导致构建包括NDB存储引擎和所有NDB程序。默认情况下,此选项处于启用状态。要防止构建NDB存储引擎插件,请使用-DWITH_NDBCLUSTER_STORAGE_ENGINE=OFF。构建的其他方面可以使用本节中列出的其他选项来控制。

以下选项适用于构建支持NDB集群的MySQL源代码。

  • -DMEMCACHED_HOME=*dir_name*

    NDB在NDB 8.0.23中删除了对memcached的支持;因此,此选项不再支持构建NDB在此版本或更高版本中。

  • -DNDB_UTILS_LINK_DYNAMIC={ON|OFF}

    控制NDB公用事业公司,如ndb _删除_表与...有联系ndbclient静态(OFF)或动态(ON); OFF(静态链接)是默认设置。通常情况下,在构建这些链接时会使用静态链接,以避免LD_LIBRARY_PATH,或者当多个版本的ndbclient已安装。此选项用于创建Docker映像,也可能用于目标环境受到精确控制并且希望减小映像大小的其他情况。

    在NDB 8.0.22中添加。

  • -DWITH_BUNDLED_LIBEVENT={ON|OFF}

    NDB在NDB 8.0.23中删除了对memcached的支持;因此,此选项不再支持构建NDB在此版本或更高版本中。

  • -DWITH_BUNDLED_MEMCACHED={ON|OFF}

    NDB在NDB 8.0.23中删除了对memcached的支持;因此,此选项不再支持构建NDB在此版本或更高版本中。

  • -DWITH_CLASSPATH=*path*

    设置用于构建MySQL Java NDB集群连接器的类路径。默认值为空。如果出现以下情况,将忽略此选项-DWITH_NDB_JAVA=OFF已使用。

  • -DWITH_ERROR_INSERT={ON|OFF}

    在中启用错误注入NDB内核。仅用于测试;不适用于构建生产二进制文件。默认值为OFF.

  • -DWITH_NDB={ON|OFF}

    构建MySQL NDB集群;构建NDB插件和所有NDB集群程序。

    在NDB 8.0.31中添加。

  • -DWITH_NDBAPI_EXAMPLES={ON|OFF}

    在中构建NDB API示例程序storage/ndb/ndbapi-examples/。看见NDB API示例,了解有关这些的信息。

  • -DWITH_NDBCLUSTER_STORAGE_ENGINE={ON|OFF}

    NDB 8.0.30及更早版本:仅供内部使用;可能并不总是像预期的那样工作。用来建造NDB支持,使用WITH_NDBCLUSTER相反。

    NDB 8.0.31和更高版本:控制(仅)是否NDBCLUSTER存储引擎包含在该版本中;WITH_NDB自动启用此选项,因此建议您使用WITH_NDB相反。

  • -DWITH_NDBCLUSTER={ON|OFF}(已弃用)

    构建和链接以支持NDB存储引擎在mysqld.

    从NDB 8.0.31开始,此选项已被弃用,并可能最终被删除;使用WITH_NDB相反。

  • -DWITH_NDBMTD={ON|OFF}

    构建多线程数据节点可执行文件ndbmtd。默认值为ON.

  • -DWITH_NDB_DEBUG={ON|OFF}

    启用构建NDB集群二进制文件的调试版本。这是OFF默认情况下。

  • -DWITH_NDB_JAVA={ON|OFF}

    启用Java支持构建NDB集群,包括对ClusterJ的支持(参见面向Java的MySQL NDB集群连接器).

    这个选项是ON默认情况下。如果不希望编译支持Java的NDB集群,必须通过指定以下命令显式禁用它-DWITH_NDB_JAVA=OFF跑步时CMake。否则,如果找不到Java,构建的配置就会失败。

  • -DWITH_NDB_PORT=*port*

    导致NDB集群管理服务器(ndb_mgmd)就是为了使用这个而构建的port默认情况下。如果未设置此选项,默认情况下,结果管理服务器会尝试使用端口1186。

  • -DWITH_NDB_TEST={ON|OFF}

    如果启用,包括一套NDB API测试程序。默认值为OFF.

  • -DWITH_PLUGIN_NDBCLUSTER={ON|OFF}

    仅供内部使用;可能并不总是像预期的那样工作。该选项在NDB 8.0.31中被删除;使用WITH_NDB而是建立MySQL NDB集群。(NDB 8.0.30及更早版本:使用WITH_NDBCLUSTER.)

2.8.8 处理编译MySQL时遇到的问题

许多问题的解决方案都涉及重新配置。如果你要进行重新配置,请注意以下几点:

  • 如果 CMake 在之前运行后再次运行,它可能会使用上一次调用期间收集的信息。这些信息存储在 CMakeCache.txt 中。当 CMake 启动时,它会查找该文件,如果文件存在则读取其内容,前提是假设这些信息仍然正确。但当你重新配置时,这个假设就不成立了。
  • 每次运行 CMake 时,都必须再次运行 make 进行重新编译。不过,你可能需要先删除之前构建生成的旧目标文件,因为它们是使用不同的配置选项编译的。

为防止使用旧的目标文件或配置信息,在重新运行CMake之前,请运行以下命令:

在Unix系统上:

$> make clean
$> rm CMakeCache.txt

在Windows上:

$> devenv MySQL.sln /clean
$> del CMakeCache.txt

如果您在源树之外进行构建,在重新运行 CMake 之前,请删除并重新创建您的构建目录。有关在源树之外进行构建的说明,请参阅 如何使用 CMake 构建 MySQL Server

在某些系统上,由于系统包含文件的差异,可能会出现警告。以下列表描述了在编译MySQL时最常出现的其他问题:

  • 要定义使用哪个C和C++编译器,可以定义CCCXX环境变量。例如:

    $> CC=gcc
    $> CXX=g++
    $> export CC CXX
    

    虽然如前所示,这可以在命令行中完成,但你可能更倾向于在构建脚本中定义这些值,在这种情况下,不需要使用 export 命令。

    要指定自己的C和C++编译器标志,请使用 CMAKE_C_FLAGSCMAKE_CXX_FLAGS CMake选项。请参阅 编译器标志

    要查看可能需要指定哪些标志,请使用--cflags--cxxflags选项调用mysql_config。

  • 要查看编译阶段执行了哪些命令,在使用 CMake 配置 MySQL 之后,运行 make VERBOSE=1,而不是仅运行 make

  • 如果编译失败,请检查是否启用了MYSQL_MAINTAINER_MODE选项。此模式会使编译器警告变为错误,因此禁用它可能使编译继续进行。

  • 如果编译失败并出现以下任何错误,则必须将 make 的版本升级到GNU make

    make: Fatal error in reader: Makefile, line 18:
    Badly formed macro assignment
    

    或者:

    make: file `Makefile' line 18: Must be a separator (:
    

    或者:

    pthread.h: No such file or directory
    

    已知Solaris和FreeBSD的make程序存在问题。

    已知GNU make 3.75可以正常工作。

  • sql_yacc.cc文件由sql_yacc.yy生成。通常,构建过程无需创建sql_yacc.cc,因为MySQL自带预生成的副本。但是,如果确实需要重新创建,可能会遇到此错误:

    "sql_yacc.yy", line xxx fatal: default action causes potential...
    

    这表明您的yacc版本存在缺陷。您可能需要安装最新版本的bisonyacc的GNU版本)并使用它。

    1.75版本之前的bison可能会报告这个错误:

    sql_yacc.yy:#####: fatal error: maximum table size (32767) exceeded
    

    实际上并未超出最大表大小;该错误是由旧版本的bison中的缺陷导致的。

有关获取或更新工具的信息,请参阅 2.8节“从源代码安装MySQL” 中的系统要求。

2.8.9 MySQL配置与第三方工具

需要从MySQL源代码中确定MySQL版本的第三方工具,可以读取顶级源目录中的MYSQL_VERSION文件。该文件将版本的各个部分分开列出。例如,如果版本是MySQL 8.0.36,该文件内容如下:

MYSQL_VERSION_MAJOR=8
MYSQL_VERSION_MINOR=0
MYSQL_VERSION_PATCH=36
MYSQL_VERSION_EXTRA=
MYSQL_VERSION_STABILITY="LTS"

注意

在MySQL 5.7及更早版本中,此文件名为VERSION

要从版本组件构建一个五位数,请使用此公式:

MYSQL_VERSION_MAJOR*10000 + MYSQL_VERSION_MINOR*100 + MYSQL_VERSION_PATCH

2.8.10 生成MySQL Doxygen文档内容

MySQL 源代码包含使用 Doxygen 编写的内部文档。生成的 Doxygen 内容可在 https://dev.mysql.com/doc/index-other.html 获取。也可以按照以下步骤从 MySQL 源代码发行版在本地生成此内容:

  1. 安装doxygen 1.9.2或更高版本。可在http://www.doxygen.nl/获取相关发行版。

    安装doxygen后,验证版本号:

    $> doxygen --version
    1.9.2
    
  2. 安装PlantUML

    当你在Windows系统(在Windows 10上测试过)上安装PlantUML时,你必须至少以管理员身份运行一次,以便它创建注册表项。打开管理员控制台并运行以下命令:

    $> java -jar path-to-plantuml.jar
    

    该命令应打开一个图形用户界面窗口,并且在控制台上不返回任何错误。

  3. PLANTUML_JAR_PATH 环境设置为安装 PlantUML 的位置。例如:

    $> export PLANTUML_JAR_PATH=path-to-plantuml.jar
    
  4. 安装Graphviz dot命令。

    安装Graphviz后,验证dot是否可用。例如:

    $> which dot
    /usr/bin/dot
    
    $> dot -V
    dot - graphviz version 2.40.1 (20161225.0304)
    
  5. 将位置更改为MySQL源发行版的顶级目录,然后执行以下操作:

    首先,执行 cmake

    $> cd mysql-source-directory
    $> mkdir build
    $> cd build
    $> cmake ..
    

    接下来,生成doxygen文档:

    $> make doxygen
    

    检查错误日志,该日志位于顶级目录中的doxyerror.log文件中。假设构建成功执行,使用浏览器查看生成的输出。例如:

    $> firefox doxygen/html/index.html
    

2.9 安装后设置与测试

本节讨论安装 MySQL 后应执行的任务:

  • 如有必要,初始化数据目录并创建MySQL授权表。对于某些MySQL安装方法,数据目录初始化可能会自动为您完成:

    • 由MySQL安装程序执行的Windows安装操作。
    • 使用 Oracle 提供的服务器 RPM 或 Debian 发行版在 Linux 上进行安装。
    • 在许多平台上使用原生包管理系统进行安装,这些平台包括Debian Linux、Ubuntu Linux、Gentoo Linux 以及其他系统。
    • 使用 DMG 发行版在 macOS 上进行安装。

    对于其他平台和安装类型,你必须手动初始化数据目录。这包括在Unix及类Unix系统上从通用二进制文件和源代码发行版进行安装,以及在Windows上从ZIP归档包进行安装。有关说明,请参阅2.9.1节“初始化数据目录”

  • 启动服务器,并确保其可被访问。有关说明,请参阅2.9.2节“启动服务器”2.9.3节“测试服务器”

  • 如果在数据目录初始化期间尚未完成此操作,请为授权表中的初始 root 账户分配密码。密码可防止未经授权访问 MySQL 服务器。有关说明,请参阅 2.9.4 节,“保护初始 MySQL 账户安全”

  • 或者,安排服务器在系统启动和停止时自动启动和停止。有关说明,请参阅 2.9.5 节,“自动启动和停止 MySQL”

  • 或者,填充时区表,以便识别命名时区。有关说明,请参阅7.1.15节,“MySQL服务器时区支持”

当你准备创建其他用户账户时,可以在第8.2节“访问控制与账户管理”中找到有关MySQL访问控制系统和账户管理的信息。

2.9.1 初始化数据目录

安装MySQL后,必须初始化数据目录,包括mysql系统模式中的表:

  • 对于某些MySQL安装方式,数据目录初始化是自动进行的,如2.9节“安装后设置与测试”所述。
  • 对于其他安装方法,你必须手动初始化数据目录。这些方法包括在Unix及类Unix系统上从通用二进制文件和源发行版进行安装,以及在Windows上从ZIP归档包进行安装。

本节介绍对于数据目录初始化并非自动进行的 MySQL 安装方法,如何手动初始化数据目录。有关用于测试服务器是否可访问且正常工作的一些建议命令,请参阅 2.9.3 节,“测试服务器”

注意

在MySQL 8.0中,默认身份验证插件已从mysql_native_password更改为caching_sha2_password,并且'root'@'localhost'管理账户默认使用caching_sha2_password。如果您希望root账户使用以前的默认身份验证插件(mysql_native_password),请参阅caching_sha2_password与root管理账户

从MySQL 8.0.34版本开始,mysql_native_password插件已被弃用,从MySQL 8.4.0版本开始默认禁用,从MySQL 9.0.0版本开始移除。

数据目录初始化概述

在此处所示的示例中,服务器旨在以mysql登录账户的用户ID运行。如果该账户不存在,请创建该账户(请参阅创建mysql用户和组),或者替换为您计划用于运行服务器的其他现有登录账户的名称。

  1. 将位置更改为 MySQL 安装的顶级目录,该目录通常为/usr/local/mysql(根据系统需要调整路径名):

    cd /usr/local/mysql
    

    在这个目录中,你可以找到几个文件和子目录,其中包括bin子目录,该子目录包含服务器以及客户端和实用程序。

  2. secure_file_priv系统变量将导入和导出操作限制在特定目录中。创建一个目录,其位置可指定为该变量的值:

    mkdir mysql-files
    

    将目录的用户和组所有权授予mysql用户和mysql组,并适当设置目录权限:

    chown mysql:mysql mysql-files
    chmod 750 mysql-files
    
  3. 使用服务器初始化数据目录,包括mysql模式,该模式包含初始的MySQL授权表,这些表决定了用户如何被允许连接到服务器。例如:

    bin/mysqld --initialize --user=mysql
    

    有关该命令的重要信息,特别是可能使用的命令选项的信息,请参阅数据目录初始化过程。有关服务器如何执行初始化的详细信息,请参阅数据目录初始化期间的服务器操作

    通常情况下,只有在首次安装MySQL之后才需要执行数据目录初始化操作。(对于现有安装的升级,请改为执行升级过程;请参阅第3章“升级MySQL”。)但是,初始化数据目录的命令不会覆盖任何现有的“mysql”模式表,因此在任何情况下运行都是安全的。

  4. 如果您想部署自动支持安全连接的服务器,请使用 mysql_ssl_rsa_setup 实用程序创建默认的SSL和RSA文件:

    bin/mysql_ssl_rsa_setup
    

    有关更多信息,请参阅6.4.3节,“mysql_ssl_rsa_setup — 创建SSL/RSA文件”

    注意

    从MySQL 8.0.34起,mysql_ssl_rsa_setup实用程序已被弃用。

  5. 如果没有任何选项文件,服务器将使用默认设置启动。(请参见第7.1.2节 “服务器配置默认值”。)要明确指定MySQL服务器启动时应使用的选项,可将它们放在诸如 /etc/my.cnf/etc/mysql/my.cnf 之类的选项文件中。(请参见第6.2.2.2节 “使用选项文件”。)例如,你可以使用选项文件来设置 secure_file_priv 系统变量。

  6. 要安排MySQL在系统引导时自动启动而无需手动干预,请参阅2.9.5节,“自动启动和停止MySQL”

  7. 数据目录初始化会在 mysql 模式下创建时区表,但不会填充这些表。要填充这些表,请使用 7.1.15 节“MySQL 服务器时区支持” 中的说明。

数据目录初始化过程

将位置更改为 MySQL 安装的顶级目录,该目录通常是 /usr/local/mysql(根据系统需要调整路径名):

cd /usr/local/mysql

要初始化数据目录,请根据您是希望服务器为'root'@'localhost'账户生成一个随机初始密码,还是创建一个无密码的账户,使用--initialize--initialize-insecure选项调用mysqld

  • 使用 --initialize 进行“默认安全”安装(即包括生成随机的初始root密码)。在这种情况下,密码会被标记为过期,您必须选择一个新密码。
  • 使用--initialize-insecure时,不会生成root密码。这存在安全风险;假定您打算在将服务器投入生产使用前及时为该账户设置密码。

有关分配新的'root'@'localhost'密码的说明,请参阅初始化后root密码分配

注意

服务器会将任何消息(包括任何初始密码)写入其标准错误输出。这可能会重定向到错误日志,因此如果您在屏幕上看不到这些消息,请查看错误日志。有关错误日志的信息,包括其位置,请参阅7.4.2节,“错误日志”

在 Windows 上,使用 --console 选项将消息定向到控制台。

在Unix和类Unix系统上,数据库目录和文件由mysql登录账户所有非常重要,这样日后运行服务器时,服务器就拥有对这些目录和文件的读写权限。为确保这一点,从系统root账户启动mysqld,并按如下所示包含--user选项:

bin/mysqld --initialize --user=mysql
bin/mysqld --initialize-insecure --user=mysql

或者,以mysql用户身份登录时执行mysqld,在这种情况下,你可以在命令中省略--user选项。

在 Windows 上,使用以下命令之一:

bin\mysqld --initialize --console
bin\mysqld --initialize-insecure --console

注意

如果缺少所需的系统库,数据目录初始化可能会失败。例如,你可能会看到类似这样的错误:

bin/mysqld: error while loading shared libraries:
libnuma.so.1: cannot open shared object file:
No such file or directory

如果发生这种情况,你必须手动或使用系统的软件包管理器安装缺失的库。然后重试数据目录初始化命令。

如果mysqld无法识别安装目录或数据目录的正确位置,可能需要指定其他选项,如--basedir--datadir。例如(在一行中输入命令):

bin/mysqld --initialize --user=mysql
  --basedir=/opt/mysql/mysql
  --datadir=/opt/mysql/mysql/data

或者,将相关选项设置放在一个选项文件中,并将该文件的名称传递给mysqld。对于Unix和类Unix系统,假设选项文件名为/opt/mysql/mysql/etc/my.cnf。在文件中添加以下几行:

[mysqld]
basedir=/opt/mysql/mysql
datadir=/opt/mysql/mysql/data

然后按如下方式调用 mysqld(在一行中输入命令,首先使用--defaults-file 选项):

bin/mysqld --defaults-file=/opt/mysql/mysql/etc/my.cnf
  --initialize --user=mysql

在Windows系统上,假设 C:\my.ini 包含以下几行内容:

[mysqld]
basedir=C:\\Program Files\\MySQL\\MySQL Server 8.0
datadir=D:\\MySQLdata

然后按如下方式调用 mysqld(同样,你应在一行中输入命令,且先输入--defaults-file 选项):

bin\mysqld --defaults-file=C:\my.ini
   --initialize --console

重要的

初始化数据目录时,除了用于设置目录位置的选项(如--basedir--datadir),以及必要时的 --user 选项之外,不应指定任何其他选项。MySQL 服务器正常使用期间要使用的选项,可以在初始化后重启服务器时进行设置。有关更多信息,请参阅 --initialize 选项的说明。

数据目录初始化期间的服务器操作

注意

服务器执行的数据目录初始化序列不能替代 mysql_secure_installationmysql_ssl_rsa_setup 执行的操作。请参阅 6.4.2 节,“mysql_secure_installation — 提升 MySQL 安装安全性” 以及 6.4.3 节,“mysql_ssl_rsa_setup — 创建 SSL/RSA 文件”

使用--initialize--initialize-insecure 选项调用时,mysqld 在数据目录初始化过程中会执行以下操作:

  1. 服务器按如下方式检查数据目录是否存在:

    • 如果数据目录不存在,服务器会创建该目录。

    • 如果数据目录存在但不为空(即包含文件或子目录),服务器将在生成错误消息后退出:

      [ERROR] --initialize specified but the data directory exists. Aborting.
      

      在这种情况下,请删除或重命名数据目录,然后重试。

      如果每个条目名称都以句点(.)开头,则允许现有数据目录不为空。

  2. 在数据目录中,服务器会创建mysql系统模式及其表,包括数据字典表、授权表、时区表和服务器端帮助表。请参阅7.3节,“mysql系统模式”

  3. 服务器初始化系统表空间以及管理 InnoDB 表所需的相关数据结构。

    注意

    mysqld设置好InnoDB系统表空间后,对表空间特性进行某些更改需要设置一个全新的实例。符合条件的更改包括系统表空间中第一个文件的文件名和撤销日志的数量。如果不想使用默认值,请确保在运行mysqld之前,MySQL配置文件中已设置好innodb_data_file_pathinnodb_log_file_size配置参数。另外,务必根据需要指定影响InnoDB文件创建和位置的其他参数,例如innodb_data_home_dirinnodb_log_group_home_dir

    如果这些选项在您的配置文件中,但该文件不在MySQL默认读取的位置,那么在运行mysqld时,使用--defaults-extra-file选项指定文件位置。

  4. 服务器会创建一个'root'@'localhost'超级用户账户以及其他保留账户(请参阅8.2.9节,“保留账户”)。有些保留账户处于锁定状态,客户端无法使用,但'root'@'localhost'是供管理用途的,你应该为其设置一个密码。

    对于“root'@'localhost'”账户的密码,服务器操作取决于你调用它的方式:

    • 使用--initialize但不使用--initialize-insecure时,服务器会生成一个随机密码,将其标记为已过期,并写入一条显示该密码的消息:

      [Warning] A temporary password is generated for root@localhost:
      iTag*AfrH5ej
      
    • 使用--initialize-insecure(可以带或不带--initialize,因为--initialize-insecure 意味着 --initialize)时,服务器不会生成密码或标记其过期,并会写入一条警告消息:

      [Warning] root@localhost is created with an empty password ! Please
      consider switching off the --initialize-insecure option.
      

    有关分配新的'root'@'localhost'密码的说明,请参阅初始化后root密码分配

  5. 服务器会填充用于 HELP 语句的服务器端帮助表(见第15.8.3节,“HELP语句”)。服务器不会填充时区表。要手动填充,请参阅第7.1.15节,“MySQL服务器时区支持”

  6. 如果系统变量 init_file 被用于指定一个包含SQL语句的文件,服务器将执行该文件中的语句。此选项使您能够执行自定义的引导序列。

    当服务器以引导模式运行时,某些功能不可用,这限制了文件中允许的语句。其中包括与账户管理相关的语句(如CREATE USERGRANT)、复制以及全局事务标识符。

  7. 服务器退出。

初始化后根密码分配

使用 --initialize--initialize-insecure 启动服务器初始化数据目录后,正常启动服务器(即不使用上述任何一个选项),并为 'root'@'localhost' 账户分配一个新密码:

  1. 启动服务器。有关说明,请参阅2.9.2节,“启动服务器”

  2. 连接到服务器:

    • 如果您使用了--initialize但未使用--initialize-insecure来初始化数据目录,请以root身份连接到服务器:

      mysql -u root -p
      

      然后,在密码提示符处,输入服务器在初始化过程中生成的随机密码:

      Enter password: (enter the random root password here)
      

      如果不知道此密码,请查看服务器错误日志。

    • 如果您使用--initialize-insecure初始化数据目录,则可以以root身份无密码连接到服务器:

      mysql -u root --skip-password
      
  3. 连接后,使用 ALTER USER 语句来分配新的root密码:

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
    

另请参阅2.9.4节,“保护初始MySQL账户”

注意

尝试连接到主机 127.0.0.1 通常会解析到 localhost 账户。但是,如果服务器在启用 skip_name_resolve</b2 的情况下运行,此操作将失败。如果您打算这样做,请确保存在一个可以接受连接的账户。例如,要能够使用 --host=127.0.0.1--host=::1root 身份连接,请创建以下账户:

CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY 'root-password';
CREATE USER 'root'@'::1' IDENTIFIED BY 'root-password';

可以将这些语句放在一个文件中,使用 init_file 系统变量来执行,正如在 数据目录初始化期间的服务器操作 中所讨论的那样。

2.9.2 启动服务器

本节介绍如何在Unix及类Unix系统上启动服务器。(有关在Windows上的操作,请参阅第2.3.4.5节“首次启动服务器”。)有关可用于测试服务器是否可访问且运行正常的一些建议命令,请参阅第2.9.3节“测试服务器”。

如果安装中包含 mysqld_safe,请按如下方式启动 MySQL 服务器:

$> bin/mysqld_safe --user=mysql &

注意

对于使用RPM包安装MySQL的Linux系统,服务器的启动和关闭是通过systemd管理,而不是使用mysqld_safe,并且不会安装mysqld_safe。请参阅2.5.9节,“使用systemd管理MySQL服务器”

如果你的安装包含systemd支持,可按如下方式启动服务器:

$> systemctl start mysqld

如果服务名称与mysqld不同(例如,SLES系统上的mysql),请替换为相应的服务名称。

重要的是,MySQL服务器应使用非特权(非root)登录账户运行。为确保这一点,以root身份运行mysqld_safe,并按如下所示包含--user选项。否则,您应在以mysql身份登录时执行该程序,在这种情况下,您可以在命令中省略--user选项。

有关以非特权用户身份运行MySQL的更多说明,请参阅8.1.5节,“如何以普通用户身份运行MySQL”

如果该命令立即失败并打印出 mysqld<br /> ended,请在错误日志中查找相关信息(默认情况下,错误日志是数据目录中的 host_name.err 文件)。

如果服务器无法访问数据目录,或者无法读取 mysql 模式中的授权表,它会将一条消息写入错误日志。如果在进行此步骤之前,你忘记通过初始化数据目录来创建授权表,或者在运行初始化数据目录的命令时未使用 --user 选项,就可能出现此类问题。删除 data 目录,并使用 --user 选项运行该命令。

如果在启动服务器时遇到其他问题,请参阅2.9.2.1节,“排查MySQL服务器启动问题”。有关mysqld_safe的详细信息,请参阅6.3.2节,“mysqld_safe - MySQL服务器启动脚本”。有关systemd支持的详细信息,请参阅2.5.9节,“使用systemd管理MySQL服务器”

2.9.2.1 解决启动MySQL服务器时遇到的问题

本节提供了启动服务器时出现问题的故障排除建议。有关Windows系统的更多建议,请参阅 2.3.5节,“Microsoft Windows下MySQL服务器安装的故障排除”

如果启动服务器时遇到问题,可以尝试以下操作:

  • 检查 错误日志 ,查看服务器无法启动的原因。日志文件位于 数据目录 中(在 Windows 上通常为 C:\Program<br /> Files\MySQL\MySQL Server 8.0\data ,对于 Unix/Linux 二进制发行版为 /usr/local/mysql/data ,对于 Unix/Linux 源码发行版为 /usr/local/var )。在数据目录中查找名称格式为 host_name.errhost_name.log 的文件,其中 host_name 是服务器主机的名称。然后检查这些文件的最后几行。使用 tail 命令来显示这些内容:

    $> tail host_name.err
    $> tail host_name.log
    
  • 指定你正在使用的存储引擎所需的任何特殊选项。你可以创建一个 my.cnf 文件,并为计划使用的引擎指定启动选项。如果你打算使用支持事务表的存储引擎(InnoDBNDB),请确保在启动服务器之前已按所需方式对其进行配置。如果你正在使用 InnoDB 表,请参阅 第 17.8 节,“InnoDB 配置” 以获取指导,并参阅 第 17.14 节,“InnoDB 启动选项和系统变量” 以获取选项语法。

    尽管存储引擎会为您省略的选项使用默认值,但Oracle建议您查看可用选项,并为任何默认值不适合您的安装的选项指定显式值。

  • 确保服务器知道在哪里找到数据目录mysqld 服务器将此目录用作其当前目录。服务器期望在此处找到数据库,也期望在此处写入日志文件。服务器还会将 pid(进程 ID)文件写入数据目录。

    默认数据目录位置在服务器编译时就已硬编码。要确定默认路径设置是什么,请使用 mysqld 并带上 --verbose--help 选项。如果数据目录位于系统的其他位置,请在命令行或选项文件中,使用 --datadir 选项为 mysqldmysqld_safe 指定该位置。否则,服务器将无法正常工作。作为 --datadir 选项的替代方法,你可以使用 --basedirmysqld 指定安装 MySQL 的基础目录位置,然后 mysqld 会在该位置查找 data 目录。

    要检查指定路径选项的效果,请使用这些选项后跟 --verbose--help 选项调用 mysqld。例如,如果将位置更改为安装 mysqld 的目录,然后运行以下命令,它将显示以 /usr/local 作为基本目录启动服务器的效果:

    $> ./mysqld --basedir=/usr/local --verbose --help
    

    你也可以指定其他选项,例如--datadir,但--verbose--help必须是最后的选项。

    一旦确定了所需的路径设置,在不使用 --verbose--help 的情况下启动服务器。

    如果mysqld当前正在运行,你可以通过执行以下命令来了解它正在使用的路径设置:

    $> mysqladmin variables
    

    或者:

    $> mysqladmin -h host_name variables
    

    host_name是MySQL服务器主机的名称。

  • 确保服务器能够访问数据目录。数据目录及其内容的所有权和权限必须允许服务器读取和修改它们。

    如果在启动mysqld时出现Errcode 13(意味着Permission denied),这表示数据目录或其内容的权限不允许服务器访问。在这种情况下,你需要更改相关文件和目录的权限,以便服务器有权使用它们。你也可以以root身份启动服务器,但这会引发安全问题,应避免这样做。

    将位置更改为数据目录,并检查数据目录及其内容的所有权,以确保服务器具有访问权限。例如,如果数据目录是 /usr/local/mysql/var,请使用以下命令:

    $> ls -la /usr/local/mysql/var
    

    如果数据目录或其文件或子目录并非由您用于运行服务器的登录帐户所拥有,请将其所有权更改为该帐户。如果该帐户名为 mysql,请使用以下命令:

    $> chown -R mysql /usr/local/mysql/var
    $> chgrp -R mysql /usr/local/mysql/var
    

    即使所有权正确,如果系统上运行有其他管理应用程序对文件系统各个部分访问权限的安全软件,MySQL 可能仍无法启动。在这种情况下,重新配置该软件,使mysqld能够访问其正常运行时使用的目录。

  • 验证服务器要使用的网络接口是否可用。

    如果出现以下任何一种错误,则意味着其他某个程序(可能是另一个 mysqld 服务器)正在使用 mysqld 尝试使用的 TCP/IP 端口或 Unix 套接字文件:

    Can't start server: Bind on TCP/IP port: Address already in use
    Can't start server: Bind on unix socket...
    

    使用 ps 命令来确定是否有其他 mysqld 服务器正在运行。如果有,在再次启动 mysqld 之前关闭该服务器。(如果有其他服务器正在运行,而您确实想运行多个服务器,可以在 7.8 节“在一台机器上运行多个 MySQL 实例” 中找到相关操作信息。)

    如果没有其他服务器在运行,请执行命令telnet your_host_name<br /> tcp_ip_port_number。(默认的MySQL端口号是3306。)然后按几次回车键。如果没有收到类似telnet: Unable to connect to remote host:<br /> Connection refused这样的错误消息,则说明有其他程序正在使用mysqld试图使用的TCP/IP端口。找出该程序并禁用它,或者使用--port选项让mysqld监听其他端口。在这种情况下,当客户端程序使用TCP/IP连接到服务器时,要为其指定相同的非默认端口号。

    该端口可能无法访问的另一个原因是,您正在运行的防火墙阻止了对它的连接。如果是这样,请修改防火墙设置以允许访问该端口。

    如果服务器已启动但您无法连接到它,请确保在 /etc/hosts 中有如下所示的条目:

    127.0.0.1       localhost
    
  • 如果无法启动 mysqld,可以尝试使用 --debug 选项生成跟踪文件来查找问题。请参阅 7.9.4节,“DBUG 包”

2.9.3 测试服务器

数据目录初始化且服务器启动后,执行一些简单测试以确保其运行良好。本节假定当前位置为MySQL安装目录,且该目录有一个bin子目录,其中包含此处使用的MySQL程序。如果不是这样,请相应调整命令路径名。

或者,将 bin 目录添加到 PATH 环境变量设置中。这将使你的 shell(命令解释器)能够正确找到 MySQL 程序,这样你只需输入程序名称,而无需输入路径名称即可运行程序。请参阅 6.2.9 节,“设置环境变量”

使用 mysqladmin 来验证服务器是否正在运行。以下命令提供了简单的测试,以检查服务器是否已启动并响应连接:

$> bin/mysqladmin version
$> bin/mysqladmin variables

如果无法连接到服务器,请指定 -u<br /> root 选项以 root 身份进行连接。如果已经为 root 账户设置了密码,还需要在命令行中指定 -p 并在提示时输入密码。例如:

$> bin/mysqladmin -u root -p version
Enter password: (enter root password here)

mysqladmin version 的输出会因平台和MySQL版本的不同而略有差异,但应该与以下内容类似:

$> bin/mysqladmin version
mysqladmin  Ver 14.12 Distrib 8.0.42, for pc-linux-gnu on i686
...

Server version          8.0.42
Protocol version        10
Connection              Localhost via UNIX socket
UNIX socket             /var/lib/mysql/mysql.sock
Uptime:                 14 days 5 hours 5 min 21 sec

Threads: 1  Questions: 366  Slow queries: 0
Opens: 0  Flush tables: 1  Open tables: 19
Queries per second avg: 0.000

要了解使用 mysqladmin 还能执行哪些操作,请使用 --help 选项调用它。

验证你是否可以关闭服务器(如果 root 账户已设置密码,请包含 -p 选项):

$> bin/mysqladmin -u root shutdown

验证你是否可以再次启动服务器。可以通过使用mysqld_safe 或直接调用mysqld 来实现。例如:

$> bin/mysqld_safe --user=mysql &

如果 mysqld_safe 启动失败,请参阅2.9.2.1节,“排查MySQL服务器启动故障”

运行一些简单的测试,以验证你可以从服务器检索信息。输出应该与此处显示的类似。

使用mysqlshow查看存在哪些数据库:

$> bin/mysqlshow
+--------------------+
|     Databases      |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+

已安装的数据库列表可能有所不同,但至少始终包括 mysqlinformation_schema

如果你指定了数据库名,mysqlshow 会显示该数据库中的表列表:

$> bin/mysqlshow mysql
Database: mysql
+---------------------------+
|          Tables           |
+---------------------------+
| columns_priv              |
| component                 |
| db                        |
| default_roles             |
| engine_cost               |
| func                      |
| general_log               |
| global_grants             |
| gtid_executed             |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| innodb_index_stats        |
| innodb_table_stats        |
| ndb_binlog_index          |
| password_history          |
| plugin                    |
| procs_priv                |
| proxies_priv              |
| role_edges                |
| server_cost               |
| servers                   |
| slave_master_info         |
| slave_relay_log_info      |
| slave_worker_info         |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

使用mysql程序从mysql模式的表中选择信息:

$> bin/mysql -e "SELECT User, Host, plugin FROM mysql.user" mysql
+------+-----------+-----------------------+
| User | Host      | plugin                |
+------+-----------+-----------------------+
| root | localhost | caching_sha2_password |
+------+-----------+-----------------------+

此时,您的服务器正在运行,您可以访问它。如果您尚未为初始账户设置密码,要加强安全性,请遵循2.9.4节“保护初始MySQL账户”中的说明。

有关 mysqlmysqladminmysqlshow 的详细信息,请参阅 6.5.1节,“mysql - MySQL命令行客户端”6.5.2节,“mysqladmin - MySQL服务器管理程序” 以及 6.5.7节,“mysqlshow - 显示数据库、表和列信息”

2.9.4 保护初始 MySQL 账户

MySQL安装过程涉及初始化数据目录,包括mysql系统模式中的授权表,这些授权表定义了MySQL账户。有关详细信息,请参见2.9.1节,“初始化数据目录”

本节介绍如何为MySQL安装过程中创建的初始root账户设置密码(前提是尚未设置)。

注意

执行本节所述流程的其他方法:

  • 在Windows上,你可以在安装过程中使用MySQL安装程序来执行此操作(请参阅2.3.3节,“适用于Windows的MySQL安装程序”)。
  • 在所有平台上,MySQL 发行版都包含 mysql_secure_installation,这是一个命令行实用程序,可自动完成 MySQL 安装安全加固过程的大部分工作。
  • 在所有平台上,都可使用MySQL Workbench,它提供了管理用户账户的功能(请参阅第33章“MySQL Workbench”)。

在以下情况下,初始账户可能已分配了密码:

  • 在Windows系统上,使用MySQL安装程序进行安装时,你可以选择设置密码。
  • 使用 macOS 安装程序进行安装时会生成一个初始随机密码,安装程序会在对话框中向用户显示该密码。
  • 使用RPM软件包进行安装会生成一个初始随机密码,该密码会写入服务器错误日志。
  • 使用Debian软件包进行安装时,你可以选择设置密码。
  • 对于使用mysqld --initialize手动执行的数据目录初始化,mysqld会生成一个初始随机密码,将其标记为已过期,并将其写入服务器错误日志。请参阅 2.9.1节,“初始化数据目录”

mysql.user授权表定义了初始的MySQL用户账户及其访问权限。安装MySQL时只会创建一个'root'@'localhost'超级用户账户,该账户拥有所有权限,可以执行任何操作。如果root账户密码为空,那么你的MySQL安装就没有保护措施:任何人都可以无需密码root身份连接到MySQL服务器并被授予所有权限。

'root'@'localhost'账户在mysql.proxies_priv表中也有一行记录,这使得它可以为''@''(即所有用户和所有主机)授予PROXY权限。这使得root可以设置代理用户,也可以将设置代理用户的权限委托给其他账户。请参见8.2.19节,“代理用户”。”

要为初始MySQL root账户设置密码,请使用以下步骤。在示例中,将root-password替换为您要使用的密码。

如果服务器未运行,请启动它。有关说明,请参阅第2.9.2节“启动服务器”。

初始的root账户可能有密码,也可能没有密码。请选择适用的以下步骤:

  • 如果root账户存在,且其初始随机密码已过期,请使用该密码以root身份连接到服务器,然后选择一个新密码。如果数据目录是通过手动或使用安装程序执行mysqld --initialize进行初始化,且在安装操作期间没有提供指定密码的选项,就会出现这种情况。由于密码存在,您必须使用它连接到服务器。但是,由于密码已过期,在您选择新密码之前,除了选择新密码外,您不能将该账户用于任何其他目的。

    1. 如果您不知道初始随机密码,请查看服务器错误日志。

    2. 使用以下密码以root身份连接到服务器:

      $> mysql -u root -p
      Enter password: (enter the random root password here)
      
    3. 选择一个新密码来替换随机生成的密码:

      mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
      
  • 如果root账户存在但没有密码,请使用空密码以root身份连接到服务器,然后设置一个密码。如果您使用mysqld --initialize-insecure初始化数据目录,就会出现这种情况。

    1. 以无密码方式使用root连接到服务器:

      $> mysql -u root --skip-password
      
    2. 设置密码:

      mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root-password';
      

root 账户设置密码后,每次使用该账户连接服务器时都必须提供该密码。例如,要使用 mysql 客户端连接服务器,请使用以下命令:

$> mysql -u root -p
Enter password: (enter root password here)

要使用mysqladmin关闭服务器,请使用此命令:

$> mysqladmin -u root -p shutdown
Enter password: (enter root password here)

注意

有关设置密码的更多信息,请参阅8.2.14节“分配账户密码”。如果设置root密码后忘记了该密码,请参阅B.3.3.2节“如何重置root密码”

要设置其他账户,请参阅8.2.8节“添加账户、分配权限和删除账户”

2.9.5 自动启动和停止MySQL

本节讨论启动和停止MySQL服务器的方法。

通常,你可以通过以下几种方式启动mysqld服务器:

systemd、mysqld_safemysql.server 脚本、Solaris SMF 以及 macOS 启动项(或 MySQL 偏好设置面板)可用于手动启动服务器,或在系统启动时自动启动。systemd、mysql.server 以及启动项也可用于停止服务器。

下表展示了服务器和启动脚本会从选项文件中读取哪些选项组。

表2.15 MySQL启动脚本与支持的服务器选项组

脚本 选项组
MySQL服务器守护进程 [mysqld][server][mysqld-major_version]
mysqld安全启动脚本 [mysqld][server][mysqld_safe]
mysql.server [mysqld][mysql.server][server]

[mysqld-major_version] 意味着名称类似 [mysqld-5.7][mysqld-8.0] 的组会被 5.7.x、8.0.x 等版本的服务器读取。此功能可用于指定仅特定发布系列内的服务器能读取的选项。

为了向后兼容,mysql.server 也会读取 [mysql_server] 组,mysqld_safe 也会读取 [safe_mysqld] 组。为了与时俱进,您应该更新您的选项文件,改为使用 [mysql.server][mysqld_safe] 组。

有关MySQL配置文件及其结构和内容的更多信息,请参阅6.2.2.2节,“使用选项文件”

2.10 Perl安装说明

Perl的DBI模块提供了一个通用的数据库访问接口。你可以编写一个DBI脚本,无需修改即可与多种不同的数据库引擎配合使用。要使用DBI,你必须安装DBI模块,以及针对你想要访问的每种类型的数据库服务器的数据库驱动程序(DBD)模块。对于MySQL,此驱动程序是DBD::mysql模块。

注意

MySQL发行版中不包含Perl支持。对于Unix系统,你可以从 http://search.cpan.org 获取所需的模块;对于Windows系统,可以使用ActiveState的 ppm 程序。以下各节将介绍如何进行操作。

DBI/DBD 接口需要Perl 5.6.0,建议使用5.6.1或更高版本。如果您使用的是较早版本的Perl,DBI 将无法工作。您应使用DBD::mysql 4.009或更高版本。尽管有更早的版本可用,但它们不支持MySQL 8.0的全部功能。

2.10.1 在Unix上安装Perl

MySQL的Perl支持要求你已安装MySQL客户端编程支持(库和头文件)。大多数安装方法都会安装必要的文件。如果你在Linux上通过RPM文件安装MySQL,务必同时安装开发者RPM。客户端程序在客户端RPM中,但客户端编程支持在开发者RPM中。

你需要的Perl支持文件可从CPAN(Perl综合典藏网)获取,网址为http://search.cpan.org

在Unix上安装Perl模块最简单的方法是使用CPAN模块。例如:

$> perl -MCPAN -e shell
cpan> install DBI
cpan> install DBD::mysql

DBD::mysql 的安装会运行一系列测试。这些测试尝试使用默认用户名和密码连接到本地 MySQL 服务器。(在 Unix 系统上,默认用户名是您的登录名;在 Windows 系统上,默认用户名是 ODBC。默认密码是“无密码”。)如果使用这些值无法连接到服务器(例如,您的账户设有密码),测试就会失败。您可以使用 force install DBD::mysql 来忽略失败的测试。

DBI 需要 Data::Dumper 模块。该模块可能已安装;如果没有,你应在安装 DBI 之前安装它。

也可以下载压缩的 tar 存档形式的模块发行版,并手动构建模块。例如,要解压并构建一个 DBI 发行版,可以使用如下过程:

  1. 将发行版解压到当前目录:

    $> gunzip < DBI-VERSION.tar.gz | tar xvf -
    

    此命令会创建一个名为DBI-VERSION的目录。

  2. 将位置切换到解压后的发行版的顶级目录:

    $> cd DBI-VERSION
    
  3. 构建发行版并编译所有内容:

    $> perl Makefile.PL
    $> make
    $> make test
    $> make install
    

make test”命令很重要,因为它能验证模块是否正常工作。请注意,在安装“DBD::mysql”期间运行该命令以测试接口代码时,MySQL 服务器必须处于运行状态,否则测试将失败。

每当安装新的MySQL版本时,重新构建并重新安装DBD::mysql发行版是个好主意。这可确保正确安装最新版本的MySQL客户端库。

如果您没有在系统目录中安装Perl模块的访问权限,或者如果您想安装本地Perl模块,以下参考信息可能会有所帮助:http://learn.perl.org/faq/perlfaq8.html#How-do-I-keep-my-own-module-library-directory-

2.10.2 在Windows上安装ActiveState Perl

在Windows系统上,若要使用ActiveState Perl安装MySQLDBD模块,你应执行以下操作:

  1. 从http://www.activestate.com/Products/ActivePerl/获取ActiveState Perl并安装。

  2. 打开一个控制台窗口。

  3. 如有必要,设置HTTP_proxy变量。例如,你可以尝试如下设置:

    C:\> set HTTP_proxy=my.proxy.com:3128
    
  4. 启动PPM程序:

    C:\> C:\perl\bin\ppm.pl
    
  5. 如果您之前尚未这样做,请安装DBI

    ppm> install DBI
    
  6. 如果此操作成功,请运行以下命令:

    ppm> install DBD-mysql
    

此过程应适用于ActiveState Perl 5.6或更高版本。

如果无法使该程序正常运行,你应该改为安装ODBC驱动程序,并通过ODBC连接到MySQL服务器:

use DBI;
$dbh= DBI->connect("DBI:ODBC:$dsn",$user,$password) ||
  die "Got error $DBI::errstr when connecting to $dsn\n";

2.10.3 使用Perl DBI/DBD接口时的问题

如果Perl报告找不到../mysql/mysql.so模块,问题可能在于Perl无法定位libmysqlclient.so共享库。你可以通过以下方法之一解决此问题:

  • libmysqlclient.so 复制到存放其他共享库的目录(可能是 /usr/lib/lib)。
  • 修改用于编译DBD::mysql-L选项,以反映libmysqlclient.so的实际位置。
  • 在Linux系统上,你可以将libmysqlclient.so所在目录的路径名添加到/etc/ld.so.conf文件中。
  • libmysqlclient.so所在目录的路径名添加到LD_RUN_PATH环境变量中。有些系统使用LD_LIBRARY_PATH代替。

请注意,如果链接器找不到其他库,你可能还需要修改 -L 选项。例如,如果链接器找不到 libc,因为它位于 /lib 中,而链接命令指定了 -L/usr/lib,则将 -L 选项更改为 -L/lib 或在现有链接命令中添加 -L/lib

如果您从DBD::mysql收到以下错误,您可能正在使用gcc(或使用由gcc编译的旧二进制文件):

/usr/bin/perl: can't resolve symbol '__moddi3'
/usr/bin/perl: can't resolve symbol '__divdi3'

在构建mysql.so库时,将-L/usr/lib/gcc-lib/... -lgcc添加到链接命令中(在编译Perl客户端时,检查make针对mysql.so的输出)。-L选项应指定libgcc.a在您系统上所在目录的路径名。

这个问题的另一个原因可能是Perl和MySQL并非都使用gcc编译。在这种情况下,你可以通过都使用gcc编译来解决不匹配问题。

posted @ 2025-09-13 10:11  Samchensir  阅读(66)  评论(0)    收藏  举报