在Linux上安装MySQL
Linux支持多种安装MySQL的解决方案。我们建议您使用Oracle发行版之一,可以使用以下几种安装方法:
表2.7 Linux安装方法和信息
类型 | 设定方法 | 附加信息 |
---|---|---|
易于 | 启用MySQL Apt存储库 | 文献资料 |
百胜 | 启用MySQL Yum存储库 | 文献资料 |
齐珀 | 启用MySQL SLES存储库 | 文献资料 |
转速 | 下载特定的程序包 | 文献资料 |
DEB | 下载特定的程序包 | 文献资料 |
泛型 | 下载通用软件包 | 文献资料 |
资源 | 从源编译 | 文献资料 |
码头工人 | 使用Docker Hub for MySQL Community Edition;从My Oracle Support下载MySQL企业版的Docker映像 | 文献资料 |
Oracle坚不可摧的Linux网络 | 使用ULN频道 | 文献资料 |
作为替代方案,您可以使用系统上的程序包管理器从Linux发行版的本机软件存储库中自动下载并安装带有程序包的MySQL。这些本机软件包通常是当前可用发行版之后的多个版本。通常,您也将无法安装开发里程碑版本(DMR),因为它们通常在本机存储库中不可用。有关使用本机软件包安装程序的更多信息,请参见“从本机软件存储库在Linux上安装MySQL”。
注意对于许多Linux安装,您需要将MySQL设置为在计算机启动时自动启动。许多本机软件包安装会为您执行此操作,但是对于源,二进制和RPM解决方案,您可能需要单独进行设置。所需的脚本mysql.server可以
support-files
在MySQL安装目录下的目录中或MySQL源代码树中找到。您可以像/etc/init.d/mysql
自动MySQL启动和关闭一样安装它。请参见“mysql.server-MySQL服务器启动脚本”。
使用MySQL Yum存储库在Linux上安装MySQL
适用于Oracle Linux,Red Hat Enterprise Linux,CentOS和Fedora 的MySQL Yum存储库提供了RPM软件包,用于安装MySQL服务器,客户端,MySQL Workbench,MySQL实用程序,MySQL路由器,MySQL Shell,连接器/ ODBC,连接器/ Python等。(并非所有软件包都可用于所有发行版;有关详细信息,请参见使用Yum安装其他MySQL产品和组件)。
作为一种流行的开源软件,MySQL以其原始或重新包装的形式被广泛安装在来自各种来源的许多系统上,这些来源包括不同的软件下载站点,软件存储库等。以下说明假定您尚未使用第三方分发的RPM软件包将MySQL安装在您的系统上;如果不是这种情况,请遵循“使用MySQL Yum存储库升级MySQL”或使用MySQL Yum存储库替换MySQL 的第三方分发中给出的说明。
全新安装MySQL的步骤
请按照以下步骤使用MySQL Yum存储库安装最新的GA版本的MySQL:
添加MySQL Yum存储库
首先,将MySQL Yum存储库添加到系统的存储库列表中。这是一次性操作,可以通过安装MySQL提供的RPM来执行。按着这些次序:
- 转到“ MySQL开发人员区域”中的“下载MySQL Yum存储库”页面(https://dev.mysql.com/downloads/repo/yum/)。
- 选择并下载适用于您平台的发行包。
使用以下命令安装下载的发行包,并替换
platform-and-version-specific-package-name
为下载的RPM包的名称:shell>
sudo yum localinstall platform-and-version-specific-package-name.rpm对于基于EL6的系统,命令的形式为:
shell>
sudo yum localinstall mysql80-community-release-el6-{version-number}.noarch.rpm对于基于EL7的系统:
shell>
sudo yum localinstall mysql80-community-release-el7-{version-number}.noarch.rpm对于基于EL8的系统:
shell>
sudo yum localinstall mysql80-community-release-el8-{version-number}.noarch.rpm对于Fedora 31:
shell>
sudo dnf localinstall mysql80-community-release-fc31-{version-number}.noarch.rpm对于Fedora 30:
shell>
sudo dnf localinstall mysql80-community-release-fc30-{version-number}.noarch.rpm安装命令将MySQL Yum存储库添加到系统的存储库列表中,并下载GnuPG密钥以检查软件包的完整性。有关GnuPG密钥检查的详细信息,请参见“使用GnuPG进行签名检查”。
您可以通过以下命令检查是否已成功添加MySQL Yum存储库(对于启用了dnf的系统,请将该命令中的yum替换为dnf):
shell>
yum repolist enabled | grep "mysql.*-community.*"
注意
一旦MySQL的百胜信息库系统上启用,在任何系统范围的更新百胜更新命令(或DNF升级启用了DNF的系统)将升级你的系统的MySQL包,并更换任何本地第三方软件包,如果百胜在MySQL Yum存储库中找到它们的替代品;请参见“使用MySQL Yum存储库升级MySQL”,有关该扩展对系统的某些可能影响的讨论,请参见升级共享客户端库。
选择发行系列
使用MySQL Yum存储库时,默认情况下会选择最新的GA系列(当前为MySQL 8.0)进行安装。如果这是您想要的,则可以跳到下一步,安装MySQL。
在MySQL Yum存储库中,不同版本的MySQL Community Server托管在不同的子存储库中。默认情况下,默认启用最新的GA系列(当前为MySQL 8.0)的子存储库,而所有其他系列(例如,MySQL 8.0系列)的子存储库均被禁用。使用此命令可参见MySQL Yum存储库中的所有子存储库,并参见已启用或禁用了哪些子存储库(对于启用dnf的系统,请使用dnf替换命令中的yum):
shell>
yum repolist all | grep mysql要安装最新GA系列的最新版本,无需进行配置。要安装除最新GA系列以外的特定系列的最新版本,请在运行安装命令之前禁用最新GA系列的子存储库并启用特定系列的子存储库。如果您的平台支持yum-config-manager,则可以通过发出以下命令来实现,这些命令将禁用5.7系列的子存储库并启用8.0系列的子存储库:
shell>
sudo yum-config-manager --disable mysql57-community shell>sudo yum-config-manager --enable mysql80-community对于启用dnf的平台:
shell>
sudo dnf config-manager --disable mysql57-community shell>sudo dnf config-manager --enable mysql80-community除了使用yum-config-manager或dnf config-manager命令之外,您还可以通过手动编辑
/etc/yum.repos.d/mysql-community.repo
文件来选择发行系列。这是文件中发行系列子存储库的典型条目:[mysql57-community] name=MySQL 5.7 Community Server baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
查找要配置的子存储库的条目,然后编辑
enabled
选项。指定enabled=0
禁用子存储库或enabled=1
启用子存储库。例如,要安装MySQL 8.0,请确保您具有enabled=0
用于MySQL 5.7的上述子存储库条目,并具有enabled=1
用于8.0系列的条目:# Enable to use MySQL 8.0 [mysql80-community] name=MySQL 8.0 Community Server baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
您只能在任何时候为一个发行系列启用子存储库。如果启用了多个发行系列的子存储库,那么Yum将使用最新的系列。
通过运行以下命令并检查其输出来验证是否已启用和禁用正确的子存储库(对于启用了dnf的系统,请使用dnf替换命令中的yum):
shell>
yum repolist enabled | grep mysql禁用默认的MySQL模块
(仅EL8系统)基于EL8的系统(例如RHEL8和Oracle Linux 8)包括默认情况下启用的MySQL模块。除非禁用此模块,否则它将屏蔽MySQL存储库提供的软件包。要禁用包含的模块并使MySQL存储库软件包可见,请使用以下命令(对于启用dnf的系统,将命令中的yum替换为dnf):
shell>
sudo yum module disable mysql安装MySQL
通过以下命令安装MySQL(对于启用了dnf的系统,将命令中的yum替换为dnf):
shell>
sudo yum install mysql-community-server这将安装MySQL服务器的软件包(
mysql-community-server
)以及运行服务器所需的组件的软件包,包括客户端的软件包(mysql-community-client
),客户端和服务器的常见错误消息和字符集(mysql-community-common
)以及共享的客户端库(mysql-community-libs
)。。启动MySQL服务器
使用以下命令启动MySQL服务器:
shell>
sudo service mysqld start Starting mysqld:[ OK ]您可以使用以下命令检查MySQL服务器的状态:
shell>
sudo service mysqld status mysqld (pid 3066) is running.
假设服务器的数据目录为空,则在服务器首次启动时,会发生以下情况:
- 服务器已初始化。
- SSL证书和密钥文件在数据目录中生成。
validate_password
已安装并启用。'root'@'localhost
创建一个超级用户帐户。设置超级用户的密码并将其存储在错误日志文件中。要显示它,请使用以下命令:shell>
sudo grep 'temporary password' /var/log/mysqld.log通过使用生成的临时密码登录并尽快为超级用户帐户设置自定义密码,以更改root密码:
shell>
mysql -uroot -pmysql>
ALTER USER 'root'@'localhost'IDENTIFIED BY 'MyNewPass4!';注意
validate_password
默认情况下已安装。实施的默认密码策略validate_password
要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且密码总长度至少为8个字符。
有关安装后过程的更多信息,
注意基于EL7的平台的兼容性信息:平台的本机软件存储库中的以下RPM软件包与安装MySQL服务器的MySQL Yum存储库中的软件包不兼容。使用MySQL Yum存储库安装MySQL后,将无法安装这些软件包(反之亦然)。
- 阿科纳迪MySQL
使用Yum安装其他MySQL产品和组件
您可以使用Yum安装和管理MySQL的各个组件。其中一些组件托管在MySQL Yum存储库的子存储库中:例如,MySQL连接器位于MySQL连接器社区子存储库中,而MySQL工作台位于MySQL Tools社区中。您可以使用以下命令从MySQL Yum存储库列出适用于您平台的所有MySQL组件的软件包(对于启用dnf的系统,请使用dnf替换命令中的yum):
shell>sudo yum --disablerepo=\* --enablerepo='mysql*-community*' list available
使用以下命令安装您选择的任何软件包,并用package-name
软件包名称替换(对于启用了dnf的系统,将命令中的yum替换为dnf):
shell>sudo yum install package-name
例如,要在Fedora上安装MySQL Workbench:
shell>sudo dnf install mysql-workbench-community
要安装共享客户端库(对于启用了dnf的系统,请使用dnf替换命令中的yum):
shell>sudo yum install mysql-community-libs
平台特定说明
ARM支持
Oracle Linux 7支持ARM 64位(aarch64),并且需要Oracle Linux 7软件集合存储库(ol7_software_collections)。例如,要安装服务器:
shell>yum-config-manager --enable ol7_software_collections shell>yum install mysql-community-server
注意已知限制从MySQL 8.0.12开始,Oracle Linux 7支持ARM 64位(aarch64)。
8.0.12发行版要求您通过在执行步骤之后执行来调整libstdc + + 7路径。ln -s /opt/oracle/oracle-armtoolset-1/root/usr/lib64 /usr/lib64/gcc7
yum install
用Yum更新MySQL
除安装外,您还可以使用MySQL Yum存储库对MySQL产品和组件执行更新。有关详细信息,请参见“使用MySQL Yum存储库升级MySQL”。
使用MySQL APT存储库在Linux上安装MySQL
MySQL APT存储库提供了deb
用于在当前Debian和Ubuntu版本上安装和管理MySQL服务器,客户端和其他组件的软件包。
使用MySQL APT存储库的快速指南中提供了使用MySQL APT存储库的说明。
使用MySQL SLES存储库在Linux上安装MySQL
MySQL SLES存储库提供RPM软件包,用于在SUSE Enterprise Linux Server上安装和管理MySQL服务器,客户端和其他组件。
使用MySQL SLES存储库的快速指南中提供了使用MySQL SLES存储库的说明。
使用Oracle的RPM软件包在Linux上安装MySQL
在基于RPM的Linux发行版上安装MySQL的推荐方法是使用Oracle提供的RPM软件包。对于MySQL社区版,有两种获取途径:
从MySQL软件存储库中:
- MySQL Yum存储库(有关详细信息,请参见“使用MySQL Yum存储库在Linux上安装MySQL”)。
- MySQL SLES存储库(有关详细信息,请参见“使用MySQL SLES存储库在Linux上安装MySQL”)。
- 从“ MySQL开发人员专区”的“下载MySQL社区服务器”页面中。
注意MySQL的RPM发行版也由其他供应商提供。请注意,它们在功能,功能和约定(包括通信设置)方面可能与Oracle所构建的有所不同,并且本手册中的安装说明不一定适用于它们。而是应参考供应商的说明。
MySQL RPM软件包
表2.8 MySQL Community Edition的RPM软件包
包裹名字 | 摘要 |
---|---|
mysql-community-client | MySQL客户端应用程序和工具 |
mysql-community-common | 服务器和客户端库的通用文件 |
mysql-community-devel | MySQL数据库客户端应用程序的开发头文件和库 |
mysql-community-embedded-compat | MySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容 |
mysql-community-libs | MySQL数据库客户端应用程序的共享库 |
mysql-community-libs-compat | 以前的MySQL安装的共享兼容性库 |
mysql-community-server | 数据库服务器和相关工具 |
mysql-community-server-debug | 调试服务器和插件二进制文件 |
mysql-community-test | MySQL服务器的测试套件 |
mysql-community | RPM的源代码类似于mysql-community-8.0.21-1.el7.src.rpm,具体取决于所选的OS |
表2.9 MySQL企业版的RPM软件包
包裹名字 | 摘要 |
---|---|
mysql-commercial-backup | MySQL企业备份(8.0.11中添加) |
mysql-commercial-client | MySQL客户端应用程序和工具 |
mysql-commercial-common | 服务器和客户端库的通用文件 |
mysql-commercial-devel | MySQL数据库客户端应用程序的开发头文件和库 |
mysql-commercial-embedded-compat | MySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容 |
mysql-commercial-libs | MySQL数据库客户端应用程序的共享库 |
mysql-commercial-libs-compat | 以前的MySQL安装的共享兼容性库;库的版本与您使用的发行版默认安装的库的版本匹配 |
mysql-commercial-server | 数据库服务器和相关工具 |
mysql-commercial-test | MySQL服务器的测试套件 |
RPM的全名具有以下语法:
packagename-version-distribution- rch.rpm
distribution
和 rch
值表示Linux分发和的量,包建处理器类型。有关分发标识符的列表,请参见下表:
表2.10 MySQL Linux RPM软件包分发标识符
分配价值 | 有可能的使用 |
---|---|
el 主要的Enterprise Linux版本{version} 在哪里{version} ,例如el8 | 基于EL6,EL7和EL8的平台(例如,相应版本的Oracle Linux,Red Hat Enterprise Linux和CentOS) |
fc 主要的Fedora版本{version} 在哪里{version} ,例如fc31 | Fedora 30和31 |
sles12 | SUSE Linux Enterprise Server 12 |
要参见RPM软件包中的所有文件(例如,mysql-community-server
),请使用以下命令:
shell>rpm -qpl mysql-community-server-version-distribution- rch.rpm
本节其余部分的讨论仅适用于使用直接从Oracle下载而不是通过MySQL存储库的RPM软件包的安装过程。
某些包之间存在依赖关系。如果您打算安装许多软件包,则可能希望下载RPM捆绑包tar文件,该文件包含上面列出的所有RPM软件包,因此您无需单独下载它们。
在大多数情况下,你需要安装mysql-community-server
,mysql-community-client
,mysql-community-libs
,mysql-community-common
,和mysql-community-libs-compat
包获得的功能,标准的MySQL安装。要执行这种标准的基本安装,请转到包含所有那些软件包的文件夹(最好不要包含其他名称相似的RPM软件包),然后发出以下命令:
shell>sudo yum install mysql-community-{server,client,common,libs}-*
对于SLES,用zypper替换yum,对于Fedora ,用dnf替换。
尽管最好使用像yum这样的高级软件包管理工具来安装软件包,但是更喜欢直接rpm命令的用户可以将yum install命令替换为rpm -Uvh命令;但是,使用rpm -Uvh会使安装过程更容易失败,因为安装过程可能会遇到潜在的依赖性问题。
要仅安装客户端程序,可以跳过mysql-community-server
要安装的软件包列表;否则,请单击“确定”。发出以下命令:
shell>sudo yum install mysql-community-{client,common,libs}-*
对于SLES,用zypper替换yum,对于Fedora ,用dnf替换。
使用RPM软件包的MySQL的标准安装会在系统目录下创建文件和资源,如下表所示。
表2.11来自MySQL开发人员专区的Linux RPM软件包的MySQL安装布局
文件或资源 | 位置 |
---|---|
客户端程序和脚本 | /usr/bin |
mysqld服务器 | /usr/sbin |
配置文件 | /etc/my.cnf |
资料目录 | /var/lib/mysql |
错误日志文件 | 对于RHEL,Oracle Linux,CentOS或Fedora平台: 对于SLES: |
的价值secure_file_priv | /var/lib/mysql-files |
System V初始化脚本 | 对于RHEL,Oracle Linux,CentOS或Fedora平台: 对于SLES: |
系统服务 | 对于RHEL,Oracle Linux,CentOS或Fedora平台: 对于SLES: |
PID文件 | /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
。
注意使用较旧的软件包安装早期版本的MySQL可能会创建一个名为的配置文件
/usr/my.cnf
。强烈建议您检查文件的内容,并将所需的设置迁移到文件/etc/my.cnf
文件中,然后删除/usr/my.cnf
。
在安装过程结束时,不会自动启动MySQL。对于Red Hat Enterprise Linux,Oracle Linux,CentOS和Fedora系统,使用以下命令来启动MySQL:
shell>systemctl start mysqld
对于SLES系统,命令相同,但是服务名称不同:
shell>systemctl start mysql
如果启用了systemd操作系统,则应使用标准的systemctl(或带有反向参数的服务)命令,如stop,start,status和restart来管理MySQL服务器服务。该mysqld
服务默认情况下处于启用状态,并在系统重新启动时启动。请注意,某些事情在系统平台上可能会有所不同:例如,更改数据目录的位置可能会导致问题。有关更多信息,请参见“使用systemd管理MySQL服务器”。
在使用RPM软件包进行的升级安装过程中,如果升级时MySQL服务器正在运行,则MySQL服务器将停止,升级将发生,并且MySQL服务器将重新启动。一个例外:如果版本在升级过程中也发生了更改(例如从社区更改为商业版本,反之亦然),则不会重新启动MySQL服务器。
假设服务器的数据目录为空,则在服务器首次启动时,会发生以下情况:
- 服务器已初始化。
- SSL证书和密钥文件在数据目录中生成。
validate_password
已安装并启用。'root'@'localhost'
创建一个超级用户帐户。设置超级用户的密码并将其存储在错误日志文件中。要显示它,请对RHEL,Oracle Linux,CentOS和Fedora系统使用以下命令:shell>
sudo grep 'temporary password' /var/log/mysqld.log对SLES系统使用以下命令:
shell>
sudo grep 'temporary password' /var/log/mysql/mysqld.log下一步是使用生成的临时密码登录,并为超级用户帐户设置自定义密码:
shell>mysql -uroot -p
mysql>ALTER USER 'root'@'localhost'IDENTIFIED BY 'MyNewPass4!';
注意
validate_password
默认情况下已安装。实施的默认密码策略validate_password
要求密码至少包含一个大写字母,一个小写字母,一位数字和一个特殊字符,并且密码总长度至少为8个字符。
如果在安装过程中出现问题,您可能会在错误日志文件中找到调试信息/var/log/mysqld.log
。
对于某些Linux发行版,可能有必要增加mysqld可用文件描述符数量的限制。请参见第B.4.2.17节“找不到文件和类似错误”
从多个MySQL版本安装客户端库。可以安装多个客户端库版本,例如,要保持与链接到先前库的较旧应用程序的兼容性。要安装较旧的客户端库,请在rpm中使用该--oldpackage
选项。例如,要在具有MySQL 8.0 的EL6系统上进行安装,请使用以下命令:mysql-community-libs-5.5
libmysqlclient.21
shell>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
。有关可以使用的调试选项,请参见“ 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 。
使用来自Oracle的Debian软件包在Linux上安装MySQL
Oracle提供了Debian软件包,用于在Debian或类似Debian的Linux系统上安装MySQL。这些软件包可通过两种不同的渠道获得:
- 在MySQL的APT库。这是在类似Debian的系统上安装MySQL的首选方法,因为它提供了安装和更新MySQL产品的简便方法。有关详细信息,请参见“使用MySQL APT存储库在Linux上安装MySQL”。
在MySQL的开发人员专区的下载区。有关详细信息,以下是有关可用的Debian软件包的一些信息以及安装它们的说明:
MySQL开发人员专区提供了各种Debian软件包,用于在当前Debian和Ubuntu平台上安装MySQL的不同组件。首选方法是使用tarball捆绑包,其中包含MySQL基本设置所需的软件包。压缩包的名称格式为。是MySQL版本,是Linux发行版本。该值指示要为其构建软件包的处理器类型或系列,如下表所示:
mysql-server_MVER-DVER_CPU.deb-bundle.tar
MVER
DVER
CPU
表2.12 MySQL Debian和Ubuntu安装包的CPU标识符
CPU
值预期的处理器类型或系列 i386
奔腾处理器或更高版本,32位 md64
64位x86处理器 下载完压缩包后,请使用以下命令将其解压缩:
shell>
tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tarlibaio
如果系统上尚不存在该库,则可能需要安装该库:shell>
sudo apt-get install libaio1使用以下命令预配置MySQL服务器软件包:
shell>
sudo dpkg-preconfigure mysql-community-server_*.deb系统将要求您提供root用户密码以进行MySQL安装。可能还会询问您有关安装的其他问题。
重要确保记住设置的根密码。以后想要设置密码的用户可以在对话框中将密码字段留空,然后按OK;在这种情况下,使用MySQL套接字对等身份验证插件对使用Unix套接字文件的连接进行对服务器的根访问进行身份验证。您可以稍后使用mysql_secure_installation设置root密码。
对于MySQL服务器的基本安装,请安装数据库公用文件包,客户端包,客户端元包,服务器包和服务器元包(按此顺序);您可以使用一个命令来做到这一点:
shell>
sudo dpkg -i mysql-{common,community-client,client,community-server,server}_*.deb软件包名称中还有
server-core
和client-core
的软件包。这些仅包含二进制文件,并由标准软件包自动安装。单独安装它们不会导致MySQL安装程序正常运行。如果dpkg警告您未满足依赖项,则可以使用 pt-get修复它们:
sudo apt-get -f install
这是文件在系统上的安装位置:
- 所有配置文件(如
my.cnf
)都在/etc/mysql
- 所有二进制文件,库,标头等都位于
/usr/bin
和下/usr/sbin
- 数据目录位于
/var/lib/mysql
- 所有配置文件(如
注意其他供应商也提供了MySQL的Debian发行版。请注意,它们在功能,特性和约定(包括通信设置)方面可能与Oracle所构建的有所不同,并且本手册中的说明不一定适用于安装它们。而是应参考供应商的说明。
使用Docker在Linux上部署MySQL
Docker部署框架支持轻松安装和配置MySQL Server。本节说明如何使用MySQL Server Docker映像。
您需要先在系统上安装Docker,然后才能使用MySQL Server Docker映像。有关说明,请参阅安装Docker。
重要您需要使用来运行docker
命令sudo
,或者创建一个docker
用户组,然后将要运行docker
命令的所有用户添加到其中。在这里参见详细信息。由于Docker容器始终以root特权运行,因此您应该了解 Docker守护程序攻击面并适当减轻相关风险。
使用Docker部署MySQL服务器的基本步骤
警告MySQL团队维护的MySQL Docker映像是专门为Linux平台构建的。不支持其他平台,在这些平台上使用这些MySQL Docker映像的用户需要自担风险。有关在非Linux操作系统上运行这些容器的一些已知限制,请参见此处的讨论。
- 下载MySQL服务器Docker映像
- 启动MySQL服务器实例
- 从容器内连接到MySQL Server
- 集装箱壳访问
- 停止和删除MySQL容器
- 升级MySQL服务器容器
- 有关使用Docker部署MySQL服务器的更多主题
下载MySQL服务器Docker映像
严格来说,无需单独下载服务器映像;但是,在创建Docker容器之前执行此步骤可确保您的本地映像是最新的。要下载MySQL Community Edition映像,请运行以下命令:
docker pull mysql/mysql-server:tag
该tag
是你想拉的图像版本的标签(例如5.5
,5.6
,5.7
,8.0
,或latest
)。如果省略,则使用标签,并下载最新版本的MySQL Community Server的映像。请参阅Docker Hub中mysql / mysql-server页面上可用版本的标签列表。:tag
latest
您可以使用以下命令列出下载的Docker映像:
shell>docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql/mysql-server latest 3157d7f55f8d 4 weeks ago 241MB
要从My Oracle Support网站下载MySQL Enterprise Edition映像,登录到您的Oracle帐户,从Patches and Updates下载tar.zip
Docker映像的文件(),解压缩以获取其中的tarball(),然后加载该映像通过运行以下命令:mysql-commercial-version_linux_x86_64_docker_tar.zip
mysql-enterprise-server-version.tar
docker load -i mysql-enterprise-server-version.tar
启动MySQL服务器实例
要为MySQL服务器启动新的Docker容器,请使用以下命令:
docker run --name=container_name -d image_name:tag
镜像名称可以使用docker images命令获得,如下载MySQL服务器Docker镜像中所述。--name
用于为服务器容器提供自定义名称的选项是可选的。如果没有提供容器名称,则会生成一个随机的容器名称。
例如,要为MySQL Community Server启动新的Docker容器,请使用以下命令:
docker run --name=mysql1 -d mysql/mysql-server:8.0
要使用从My Oracle Support下载的Docker映像为MySQL Enterprise Server启动新的Docker容器,请使用以下命令:
docker run --name=mysql1 -d mysql/enterprise-server:8.0
如果先前的docker pull或docker run命令尚未下载指定名称和标签的Docker映像,则现在已下载该映像。容器的初始化开始,并且当您运行docker ps命令时,该容器会出现在正在运行的容器列表中。例如:
shell>docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a24888f0d6f4 mysql/mysql-server "/entrypoint.sh my..." 14 seconds ago Up 13 seconds (health: starting) 3306/tcp, 33060/tcp mysql1
容器初始化可能需要一些时间。准备好使用服务器STATUS
时,docker ps命令输出中的容器的将从更改(health: starting)
为(healthy)
。
上面-d
的docker run命令中使用的选项使容器在后台运行。使用此命令监视容器的输出:
docker logs mysql1
初始化完成后,命令的输出将包含为root用户生成的随机密码。使用以下命令检查密码:
shell>docker logs mysql1 2>&1 | grep GENERATED GENERATED ROOT PASSWORD: Axegh3kAJyDLaRuBemecis&EShOs
从容器内连接到MySQL Server
服务器准备好后,您可以在刚启动的MySQL Server容器中运行mysql客户端,并将其连接到MySQL Server。使用docker exec -it命令在已启动的Docker容器内启动mysql客户端,如下所示:
docker exec -it mysql1 mysql -uroot -p
询问时,输入生成的root密码(有关如何查找密码,请参见上面的启动MySQL服务器实例中的最后一步)。由于MYSQL_ONETIME_PASSWORD
默认情况下该选项为true,因此在将mysql客户端连接到服务器后,必须通过发出以下语句来重置服务器根密码:
mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
password
用您选择的密码代替。重置密码后,就可以使用服务器了。
集装箱壳访问
要具有对MySQL Server容器的shell访问权限,请使用docker exec -it命令在容器内部启动bash shell:
shell>docker exec -it mysql1 bash bash-4.2#
然后,您可以在容器内运行Linux命令。例如,要参见容器内服务器的数据目录中的内容,请使用以下命令:
bash-4.2# ls /var/lib/mysql auto.cnf c .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 Server容器,请使用以下命令:
docker stop mysql1
docker stop将SIGTERM信号发送到mysqld进程,以便服务器正常关闭。
还要注意,当容器的主进程(对于MySQL Server容器为mysqld)停止时,Docker容器会自动停止。
要再次启动MySQL Server容器:
docker start mysql1
要使用单个命令停止并重新启动MySQL Server容器:
docker restart mysql1
要删除MySQL容器,请先将其停止,然后使用docker rm命令:
docker stop mysql1
docker rm mysql1
如果要同时删除服务器数据目录的 Docker卷,请将该-v
选项添加到docker rm命令。
升级MySQL服务器容器
重要- 在执行任何MySQL升级之前,请仔细遵循“升级MySQL”中的说明。在此处讨论的其他说明中,在升级之前备份数据库尤为重要。
- 本节中的说明要求服务器的数据和配置已保留在主机上。有关详细信息,请参见持久数据和配置更改。
请按照以下步骤将Docker安装的MySQL 5.7升级到8.0:
停止MySQL 5.7服务器(
mysql57
在此示例中为容器名称):docker stop mysql57
- 下载MySQL 8.0服务器Docker映像。请参阅下载MySQL服务器Docker映像中的说明;确保对MySQL 8.0使用正确的标签。
mysql80
使用旧的服务器数据和配置(如有需要,请进行适当的修改,请参阅“升级MySQL”)启动一个新的MySQL 8.0 Docker容器(在此示例中命名),该容器和配置已保留在主机上(通过在此绑定安装)例)。对于MySQL Community Server,运行以下命令: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 mysql/mysql-server:8.0
如果需要,请调整
mysql/mysql-server
为正确的存储库名称-例如,将其替换mysql/enterprise-server
为从My Oracle Support下载的MySQL Enterprise Edition映像。- 等待服务器完成启动。您可以使用docker ps命令检查服务器的状态(有关操作,请参阅启动MySQL服务器实例)。
对于MySQL 8.0.15和更早版本:在MySQL 8.0 Server容器中运行 mysql_upgrade实用程序(对于MySQL 8.0.16和更高版本不是必需的):
docker exec -it mysql80 mysql_upgrade -uroot -p
出现提示时,输入旧MySQL 5.7服务器的root密码。
通过重新启动MySQL 8.0 Server容器来完成升级:
docker restart mysql80
有关使用Docker部署MySQL服务器的更多主题
有关在Docker上部署MySQL Server的更多主题,例如服务器配置,持久性数据和配置,服务器错误日志以及容器环境变量,请参见“在Docker上部署MySQL Server的更多主题”。
有关使用Docker部署MySQL服务器的更多主题
注意下面的大多数示例命令在必须
mysql/mysql-server
指定时都作为Docker映像存储库(例如docker pull和docker run命令);如果您的映像来自另一个存储库,请进行更改,例如,将其替换mysql/enterprise-server
为从My Oracle Support下载的MySQL Enterprise Edition映像。
- Docker的优化MySQL安装
- 配置MySQL服务器
- 持续的数据和配置更改
- 运行其他初始化脚本
- 从另一个Docker容器中的应用程序连接到MySQL
- 服务器错误日志
- 在Docker上使用MySQL Enterprise Backup
- Docker环境变量
Docker的优化MySQL安装
MySQL的Docker映像针对代码大小进行了优化,这意味着它们仅包含关键组件,这些组件与在Docker容器中运行MySQL实例的大多数用户有关。MySQL Docker安装在以下方面与常见的非Docker安装不同:
包含的二进制文件仅限于:
/usr/bin/my_print_defaults
/usr/bin/mysql
/usr/bin/mysql_config
/usr/bin/mysql_install_db
/usr/bin/mysql_tzinfo_to_sql
/usr/bin/mysql_upgrade
/usr/bin/mysqladmin
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlpump
/usr/bin/mysqlbackup
(仅适用于MySQL Enterprise Edition 8.0)/usr/sbin/mysqld
- 所有二进制文件都被删除;它们不包含调试信息。
配置MySQL服务器
启动MySQL Docker容器时,可以通过docker run命令将配置选项传递给服务器。例如:
docker run --name mysql1 -d mysql/mysql-server:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_col
该命令使用utf8mb4
默认字符集和utf8mb4_col
数据库的默认排序规则启动MySQL Server 。
配置MySQL Server的另一种方法是准备一个配置文件,并将其安装在容器内服务器配置文件的位置。有关详细信息,请参见持久数据和配置更改。
持续的数据和配置更改
Docker容器原则上是短暂的,如果容器被删除或损坏,则任何数据或配置都将丢失(请参阅此处的讨论)。但是,Docker卷提供了一种持久化在Docker容器内创建的数据的机制。在初始化时,MySQL Server容器为服务器数据目录创建一个Docker卷。用于在容器上运行docker inspect命令的JSON输出具有一个Mount
密钥,该密钥的值提供有关数据目录卷的信息:
shell>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/_dat
数据持久保存在主机上的源文件夹已安装在/var/lib/mysql
容器内的服务器数据目录中。
保留数据的另一种方法是在创建容器时使用该选项绑定安装主机目录--mount
。可以使用相同的技术来保留服务器的配置。以下命令创建一个MySQL Server容器并绑定安装数据目录和服务器配置文件:
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 mysql/mysql-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 mysql/mysql-server:tag
从另一个Docker容器中的应用程序连接到MySQL
通过建立Docker网络,可以允许多个Docker容器彼此通信,以便另一个Docker容器中的客户端应用程序可以访问服务器容器中的MySQL Server。首先,创建一个Docker网络:
docker network create my-custom-net
然后,在创建和启动服务器和客户端容器时,请使用该--network
选项将它们放置在您创建的网络上。例如:
docker run --name=mysql1 --network=my-custom-net -d mysql/mysql-server
docker run --name=myapp1 --network=my-custom-net -d myapp
然后,myapp1
容器可以mysql1
使用mysql1
主机名连接到容器,反之亦然,因为Docker自动为给定的容器名称设置DNS。在以下示例中,我们从容器内部运行mysq
l客户端myapp1
以连接到mysql1
其自身容器中的主机:
docker exec -it myapp1 mysql --host=mysql1 --user=myuser --password
有关容器的其他联网技术,请参阅Docker文档中的 Docker容器联网部分。
服务器错误日志
当首次使用服务器容器启动MySQL Server时,如果满足以下任一条件,则不会生成服务器错误日志:
- 已经安装了主机中的服务器配置文件,但是该文件不包含系统变量
log_error
(请参阅有关绑定安装服务器配置文件的“持久数据和配置更改”)。 - 主机的服务器配置文件尚未挂载,但Docker环境变量
MYSQL_LOG_CONSOLE
为true
(该变量是MySQL 8.0服务器容器的默认状态)。然后将MySQL Server的错误日志重定向到stderr
,以便将错误日志放入Docker容器的日志中,并可以使用docker logsmysqld-container
命令参见。
为了使MySQL服务器在两个条件中的任何一个都成立时生成错误日志,请使用该--log-error
选项将服务器配置为在容器内的特定位置生成错误日志。要保留错误日志,请按照持久数据和配置更改中的说明,在容器内错误日志的位置安装一个主机文件。但是,您必须确保其容器内的MySQL Server对已装入的主机文件具有写权限。
在Docker上使用MySQL Enterprise Backup
MySQL Enterprise Backup是MySQL Server的商业许可的备份实用程序,可与 MySQL Enterprise Edition一起使用。MySQL Enterprise Backup包含在MySQL Enterprise Edition的Docker安装中。
在下面的示例中,我们假设您已经在Docker容器中运行了MySQL Server(有关如何使用Docker启动MySQL Server实例,请参见“使用Docker部署MySQL服务器的基本步骤”)。为了使MySQL Enterprise Backup备份MySQL服务器,它必须有权访问服务器的数据目录。这可以通过例如在启动服务器时在MySQL服务器的数据目录上绑定安装主机目录来实现:
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 Enterprise Backup设置了访问服务器所需的特权(有关详细信息,请参见将MySQL特权授予Backup Administrator)。然后使用以下步骤备份和还原MySQL Server实例。
使用带有Docker的MySQL企业备份来备份在Docker容器中运行的MySQL服务器实例:
在运行MySQL Server容器的同一主机上,使用MySQL Enterprise Edition映像启动另一个容器,以使用MySQL Enterprise Backup命令执行备份
backup-to-image
。使用我们在上一步中创建的绑定安装,提供对服务器数据目录的访问。另外,将主机目录(/path-on-host-machine/backups/
在此示例中)安装到存储文件夹中,以便在容器(/data/backups
在此示例中)中进行备份,以持久保存我们正在创建的备份。这是此步骤的示例命令,其中从从My Oracle Support下载的Docker映像启动MySQL企业备份:shell>
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的输出是否结束,以确保备份已成功完成,这一点很重要。
备份作业完成后,该容器将退出,并
--rm
使用启动它的选项在退出后将其删除。映像备份已创建,可以在上一步中存储的主机目录中找到以存储备份:shell>
ls /tmp/backups db.mbi
使用Docker的MySQL企业备份在Docker容器中还原MySQL服务器实例:
停止MySQL Server容器,该容器也会停止在其中运行的MySQL Server:
docker stop mysqlserver
在主机上,删除MySQL服务器数据目录的绑定安装中的所有内容:
rm -rf /path-on-host-machine/datadir/*
使用MySQL企业版映像启动一个容器,以使用MySQL Enterprise Backup命令执行还原
copy-back-and-apply-log
。绑定挂载服务器的数据目录和用于备份的存储文件夹,就像我们备份服务器时所做的那样:shell>
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
使用启动时使用的选项,该容器将在退出后被删除。重新启动服务器容器,这还将重新启动已还原的服务器:
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环境变量
创建MySQL Server容器时,可以通过使用--env
选项(-e
简而言之)并指定以下一个或多个环境变量来配置MySQL实例。
- 如果您安装的数据目录不为空,则以下变量均无效,否则将不尝试初始化服务器(有关更多详细信息,请参见持久数据和配置更改)。在容器启动期间,不会修改文件夹中所有先前存在的内容,包括所有旧服务器设置。
- 布尔变量,包括
MYSQL_RANDOM_ROOT_PASSWORD
,MYSQL_ONETIME_PASSWORD
,MYSQL_ALLOW_EMPTY_PASSWORD
,并MYSQL_LOG_CONSOLE
通过与非零长度的任何条件设置他们做出正确的。因此,将它们设置为例如“ 0 ”,“ false ”或“ no ”不会使它们错误,但实际上会使它们正确。这是MySQL Server容器的已知问题。
MYSQL_RANDOM_ROOT_PASSWORD
:当此变量为true时(默认状态,除非MYSQL_ROOT_PASSWORD
设置或MYSQL_ALLOW_EMPTY_PASSWORD
设置为true),否则在启动Docker容器时会生成服务器根用户的随机密码。密码已打印到stdout
容器的密码,可以通过参见容器的日志来找到(请参阅启动MySQL服务器实例)。MYSQL_ONETIME_PASSWORD
:当变量为true时(默认状态,除非MYSQL_ROOT_PASSWORD
已设置或MYSQL_ALLOW_EMPTY_PASSWORD
设置为true),否则 root用户的密码设置为到期密码,必须更改密码才能正常使用MySQL。MYSQL_DATABASE
:此变量允许您指定要在映像启动时创建的数据库的名称。如果用户名和密码均配备有MYSQL_USER
和MYSQL_PASSWORD
,创建用户并授予该数据库(对应于超级用户权限GRANT ALL
)。指定的数据库由 CREATE DATABASE IF NOT EXIST语句创建,因此如果数据库已经存在,则该变量无效。MYSQL_USER
,MYSQL_PASSWORD
::这些变量一起用于创建用户并设置该用户的密码,并且授予该用户对该MYSQL_DATABASE
变量指定的数据库的超级用户权限。这两个MYSQL_USER
和MYSQL_PASSWORD
所需要的用户可以创建,如果有两个变量没有设置,其他被忽略。如果两个变量都设置但未设置MYSQL_DATABASE
,则创建用户时没有任何特权。注意
除非使用 true ,否则无需使用此机制来创建root超级用户,该超级用户默认情况下是使用描述中针对
MYSQL_ROOT_PASSWORD
and 的机制之一设置的密码创建的。MYSQL_RANDOM_ROOT_PASSWORD
MYSQL_ALLOW_EMPTY_PASSWORD
MYSQL_ROOT_HOST
:默认情况下,MySQL创建'root'@'localhost'
帐户。只能从容器内部连接该帐户,如从容器内部连接到MySQL服务器中所述。要允许来自其他主机的根连接,请设置此环境变量。例如,值172.17.0.1
,这是默认的Docker网关IP,它允许来自运行容器的主机的连接。该选项仅接受一个条目,但允许使用通配符(例如MYSQL_ROOT_HOST=172.*.*.*
或MYSQL_ROOT_HOST=%
)。MYSQL_LOG_CONSOLE
:当变量为true(这是MySQL 8.0服务器容器的默认状态)时,MySQL Server的错误日志将重定向到stderr
,以便错误日志进入Docker容器的日志,并且可以使用docker logsmysqld-container
命令参见。注意
如果已安装来自主机的服务器配置文件,则该变量无效(请参阅“绑定安装配置文件”中的“持久数据和配置更改”)。
MYSQL_ROOT_PASSWORD
:此变量指定为MySQL根帐户设置的密码。警告
在命令行上设置MySQL root用户密码不安全。作为显式指定密码的替代方法,您可以为密码文件的容器文件路径设置变量,然后从主机装载包含密码的文件到容器文件路径。这仍然不是很安全,因为密码文件的位置仍然公开。最好使用默认设置,
MYSQL_RANDOM_ROOT_PASSWORD
并且MYSQL_ONETIME_PASSWORD
都为true。MYSQL_ALLOW_EMPTY_PASSWORD
。将其设置为true以允许使用root用户的空白密码启动容器。警告
将此变量设置为true是不安全的,因为它将使您的MySQL实例完全不受保护,从而使任何人都可以获得完全的超级用户访问权限。最好使用默认设置,
MYSQL_RANDOM_ROOT_PASSWORD
并且MYSQL_ONETIME_PASSWORD
都为true。
使用Docker在Windows和其他非Linux平台上部署MySQL
警告Oracle提供的MySQL Docker映像是专门为Linux平台构建的。不支持其他平台,在其上运行来自Oracle的MySQL Docker映像的用户将自担风险。本节讨论在非Linux平台上使用映像时的一些已知问题。
在Windows上使用Oracle的MySQL Server Docker映像的已知问题包括:
- 如果要在容器的MySQL数据目录上进行绑定安装(有关详细信息,请),则必须使用
--socket
选项将服务器套接字文件的位置设置为MySQL数据目录之外的某个位置。否则,服务器将无法启动。这是因为Docker for Windows处理文件挂载的方式不允许将主机文件绑定挂载在套接字文件上。
从本地软件存储库在Linux上安装MySQL
许多Linux发行版在其本机软件存储库中包含MySQL服务器,客户端工具和开发组件的版本,并且可以与平台的标准软件包管理系统一起安装。本节提供了使用这些程序包管理系统安装MySQL的基本说明。
重要本机软件包通常是当前可用发行版之后的多个版本。通常,您也将无法安装开发里程碑版本(DMR),因为它们通常在本机存储库中不可用。在继续之前,我们建议您检出“在Linux上安装MySQL”中所述的其他安装选项。
分发特定的说明如下所示:
红帽Linux,Fedora,CentOS
注意
对于许多Linux发行版,可以使用MySQL Yum存储库而不是平台的本机软件存储库来安装MySQL。有关详细信息,请参见“使用MySQL Yum存储库在Linux上安装MySQL”。
对于Red Hat和类似的发行版,MySQL发行版分为多个单独的软件包,分别
mysql
用于客户端工具,mysql-server
服务器和相关工具以及mysql-libs
库。如果要提供来自不同语言和环境(例如Perl,Python等)的连接,则需要这些库。要安装,请使用yum命令来指定要安装的软件包。例如:
root-shell>
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 metadat Processing delta metadat 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
。用于启动和停止服务器的初始化脚本将已安装到中/etc/init.d/mysqld
。要启动MySQL服务器使用服务:root-shell>
service mysqld start要使服务器能够在引导过程中自动启动和停止,请使用chkconfig:
root-shell>
chkconfig --levels 235 mysqld on这使得MySQL服务器可以在指定的运行级别自动启动(和停止)。
如果数据库表尚不存在,则会自动为您创建。但是,您应该运行mysql_secure_installation在服务器上设置root密码。
Debian,Ubuntu,Kubuntu
注意
对于受支持的Debian和Ubuntu版本,可以使用MySQL APT存储库而不是平台的本机软件存储库来安装 MySQL。有关详细信息,请参见“使用MySQL APT存储库在Linux上安装MySQL”。
在Debian和相关发行,有两个包为MySQL在他们的软件库,
mysql-client
和mysql-server
,分别为客户端和服务器组件。您应该指定一个明确的版本,例如mysql-client-5.1
,以确保安装所需的MySQL版本。要下载和安装(包括所有依赖项),请使用 pt-get命令,并指定要安装的软件包。
注意
在安装之前,请确保您更新了
pt-get
索引文件,以确保您正在下载最新的可用版本。MySQL软件包的示例安装可能如下所示(为清楚起见,对某些部分进行了裁剪):
root-shell>
apt-get install mysql-client-5.1 mysql-server-5.1 Reading package lists... Done Building dependency tree Reading state information... Done The following packages were automatically installed and are no longer required: linux-headers-2.6.28-11 linux-headers-2.6.28-11-generic Use 'apt-get autoremove' to remove them. The following extra packages will be installed: bsd-mailx libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient15off libmysqlclient16 libnet-daemon-perl libplrpc-perl mailx mysql-common postfix Suggested packages: dbishell libipc-sharedcache-perl tinyca procmail postfix-mysql postfix-pgsql postfix-ldap postfix-pcre sasl2-bin resolvconf postfix-cdb The following NEW packages will be installed bsd-mailx libdbd-mysql-perl libdbi-perl libhtml-template-perl libmysqlclient15off libmysqlclient16 libnet-daemon-perl libplrpc-perl mailx mysql-client-5.1 mysql-common mysql-server-5.1 postfix 0 upgraded, 13 newly installed, 0 to remove and 182 not upgraded. Need to get 1907kB/25.3MB of archives. After this operation, 59.5MB of additional disk space will be used. Do you want to continue [Y/n]? Y Get: 1 http://gb. rchive.ubuntu.com jaunty-updates/main mysql-common 5.1.30really5.0.75-0ubuntu10.5 [63.6kB] Get: 2 http://gb. rchive.ubuntu.com jaunty-updates/main libmysqlclient15off 5.1.30really5.0.75-0ubuntu10.5 [1843kB] Fetched 1907kB in 9s (205kB/s) Preconfiguring packages ... Selecting previously deselected package mysql-common. (Reading database ... 121260 files and directories currently installed.) ... Processing 1 added doc-base file(s)... Registering documents with scrollkeeper... Setting up libnet-daemon-perl (0.43-1) ... Setting up libplrpc-perl (0.2020-1) ... Setting up libdbi-perl (1.607-1) ... Setting up libmysqlclient15off (5.1.30really5.0.75-0ubuntu10.5) ... Setting up libdbd-mysql-perl (4.008-1) ... Setting up libmysqlclient16 (5.1.31-1ubuntu2) ... Setting up mysql-client-5.1 (5.1.31-1ubuntu2) ... Setting up mysql-server-5.1 (5.1.31-1ubuntu2) ... * Stopping MySQL database server mysqld ...done. 2013-09-24T13:03:09.048353Z 0 [Note] InnoDB: 8.0.21 started; log sequence number 1566036 2013-09-24T13:03:10.057269Z 0 [Note] InnoDB: Starting shutdown... 2013-09-24T13:03:10.857032Z 0 [Note] InnoDB: Shutdown completed; log sequence number 1566036 * Starting MySQL database server mysqld ...done. * Checking for corrupt, not cleanly closed and upgrade needing tables. ... Processing triggers for libc6 ... ldconfig deferred processing now taking place注意
该 pt-get的命令会安装一些软件包,包括MySQL服务器,以提供典型的工具和应用环境。这可能意味着除了主要的MySQL软件包之外,您还安装了大量的软件包。
在安装过程中,将创建初始数据库,并提示您输入MySQL根密码(和确认信息)。将在中创建一个配置文件
/etc/mysql/my.cnf
。将在中创建一个初始化脚本/etc/init.d/mysql
。服务器将已经启动。您可以使用以下方法手动启动和停止服务器:
root-shell>
service mysql [start|stop]该服务将自动添加到2、3和4运行级别,并在单个,关闭和重新启动级别中添加停止脚本。
使用systemd管理MySQL服务器
如果在以下Linux平台上使用RPM或Debian软件包安装MySQL,则服务器的启动和关闭由systemd管理:
RPM软件包平台:
- 企业Linux变体版本7及更高版本
- SUSE Linux Enterprise Server 12及更高版本
- Fedora 29及更高版本
Debian软件包平台:
- Debian 8及更高版本
- Ubuntu 16及更高版本
如果从通用二进制发行版在使用systemd的平台上安装MySQL,则可以按照《MySQL 8.0安全部署指南》的“安装后设置”部分中提供的说明为MySQL手动配置systemd支持。
如果在使用systemd的平台上从源发行版安装MySQL,请通过使用CMake选项配置发行版来获得MySQL的systemd支持。请参见“ MySQL源代码配置选项”。-DWITH_SYSTEMD=1
以下讨论涵盖了这些主题:
- 系统概述
- 为MySQL配置systemd
- 使用systemd配置多个MySQL实例
- 从mysqld_safe迁移到systemd
注意在安装了对MySQL的systemd支持的平台上,不需要脚本,例如mysqld_safe和System V初始化脚本。例如,mysqld_safe可以处理服务器的重启,但是systemd提供了相同的功能,并且以与其他服务的管理一致的方式进行操作,而不是使用特定于应用程序的程序。
由于systemd能够在安装了MySQL的systemd支持的平台上管理多个MySQL实例,因此mysqld_multi和mysqld_multi.server是不必要的,也不会安装。
系统概述
systemd提供自动的MySQL服务器启动和关闭。它还使用systemctl命令启用手动服务器管理。例如:
systemctl {start|stop|restart|status} mysqld
或者,使用与System V系统兼容的service命令(具有相反的参数):
service mysqld {start|stop|restart|status}
注意对于systemctl或service命令,如果MySQL服务名称不是
mysqld
,请使用适当的名称。例如,使用mysql
而不是mysqld
在基于Debian的系统和SLES系统上使用。
对systemd的支持包括以下文件:
mysqld.service
(RPM平台),mysql.service
(Debian平台):systemd服务单元配置文件,其中包含有关MySQL服务的详细信息。mysqld@.service
(RPM平台),mysql@.service
(Debian平台):类似mysqld.service
或mysql.service
,但用于管理多个MySQL实例。mysqld.tmpfiles.d
:包含支持此tmpfiles
功能的信息的文件。该文件以的名称安装mysql.conf
。mysqld_pre_systemd
(RPM平台),mysql-system-start
(Debian平台):单位文件的支持脚本。仅当日志位置与模式匹配(/var/log/mysql*.log
对于RPM平台,/var/log/mysql/*.log
对于Debian平台)时,此脚本才有助于创建错误日志文件。在其他情况下,对于运行mysqld进程的用户,错误日志目录必须是可写的,或者错误日志必须存在且可写。
为MySQL配置systemd
要为MySQL添加或更改systemd选项,可以使用以下方法:
- 使用本地化的systemd配置文件。
- 安排systemd为MySQL服务器进程设置环境变量。
- 设置
MYSQLD_OPTS
系统变量。
要使用本地化的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]
组中进行设置:
- 对于某些参数,
override.conf
必须使用它,因为systemd本身必须知道它们的值,并且它无法读取MySQL选项文件来获取它们。 - 由于没有对应的mysqld参数,因此必须使用systemd指定用于指定只能使用mysqld_safe已知选项设置的值的参数。
有关使用systemd而不是mysqld_safe的更多信息,请参见从mysqld_safe迁移到systemd。
您可以在中设置以下参数override.conf
:
- 要设置提供给MySQL服务器的文件描述符,使用次数
LimitNOFILE
的override.conf
,而不是open_files_limit
针对系统变量的mysqld或--open-files-limit
选项mysqld_safe的。 - 要设置最大核心文件大小,请使用
LimitCore
inoverride.conf
而不是mysqld_safe的--core-file-size
选项。 - 要设置MySQL服务器的调度优先级,请使用
Nice
inoverride.conf
而不是mysqld_safe的--nice
选项。
一些MySQL参数是使用环境变量配置的:
LD_PRELOAD
注意:如果MySQL服务器应使用特定的内存分配库,请设置此变量。NOTIFY_SOCKET
:此环境变量指定mysqld用于与systemd通信启动完成和服务状态更改通知的套接字。mysqld服务启动时由systemd设置。所述的mysqld服务读取变量设置并写入所定义的位置。在MySQL 8.0中,mysqld使用
Type=notify
进程启动类型。(Type=forking
在MySQL 5.7中使用。)使用Type=notify
,systemd自动配置套接字文件并将路径导出到NOTIFY_SOCKET
环境变量。TZ
:设置此变量以指定服务器的默认时区。
有多种方法可以指定环境变量值,以供systemd管理的MySQL服务器进程使用:
Environment
在override.conf
文件中使用行。有关语法,请参见前面讨论中描述如何使用此文件的示例。在
/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_multi和mysqld_multi.server是不必要的,也不会安装。
要使用多实例功能,请修改my.cnf
选项文件以包括每个实例的关键选项的配置。这些文件位置是典型的:
/etc/my.cnf
或/etc/mysql/my.cnf
(RPM平台)/etc/mysql/mysql.conf.d/mysqld.cnf
(Debian平台)
例如,要管理名为replica01
和的两个实例replica02
,请在选项文件中添加以下内容:
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]
必须以其他方式指定先前为该程序指定的选项(例如,在选项组中):
- 有些mysqld_safe的选项也被理解mysqld的,可以从移动
[mysqld_safe]
选项组到[mysqld]
组。这并没有包括--pid-file
,--open-files-limit
或--nice
。要指定这些选项,请使用override.conf
前面所述的systemd文件。 - 对于某些mysqld_safe选项,还有替代的mysqld过程。例如,已弃用用于启用日志记录的mysqld_safe选项。要将错误日志输出写入系统日志,请使用“将错误日志记录到系统日志”中的说明。
syslog
--syslog
- 可以在或环境变量中指定mysqld无法理解的 mysqld_safe选项
override.conf
。例如,对于 mysqld_safe,如果服务器应使用特定的内存分配库,则使用--malloc-lib
选项指定该库。对于使用systemd管理服务器的安装,请安排设置LD_PRELOAD
环境变量,如前所述。
使用坚不可摧的Linux网络(ULN)安装MySQL
Linux支持“在Linux上安装MySQL”中介绍的许多不同的MySQL安装解决方案。本节介绍的方法之一是从Oracle的Unbreakable Linux Network(ULN)安装。您可以在http://linux.oracle.com/下找到有关Oracle Linux和ULN的信息。
要使用ULN,您需要获得ULN登录名并向ULN注册用于安装的机器。ULN FAQ中对此进行了详细描述。该页面还描述了如何安装和更新软件包。MySQL软件包位于ULN上的系统体系结构的“用于Oracle Linux 6的MySQL ”,“用于Oracle Linux 7的MySQL ”和“用于Oracle Linux 8的MySQL ”通道中。
注意“ MySQL的甲骨文Linux的8 ”支持从MySQL 8.0.17的。
使用ULN安装MySQL之后,您可以在本节中找到有关启动和停止服务器的更多信息,尤其是在“使用来自Oracle的RPM软件包在Linux上安装MySQL”下。
如果要将现有的MySQL安装更新为使用ULN的安装,建议的过程是使用mysqldump导出数据,删除现有的安装,从ULN安装MySQL,然后将导出的数据加载到新安装的MySQL中。
如果您要升级的现有MySQL安装来自先前的发行系列(MySQL 8.0之前的版本),请确保阅读有关升级MySQL的部分,“升级MySQL”。