• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 在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:

    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包的名称:

        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”,有关该扩展对系统的某些可能影响的讨论,请参见升级共享客户端库。

    2. 选择发行系列

      使用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-managerdnf 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
      
    3. 禁用默认的MySQL模块

      (仅EL8系统)基于EL8的系统(例如RHEL8和Oracle Linux 8)包括默认情况下启用的MySQL模块。除非禁用此模块,否则它将屏蔽MySQL存储库提供的软件包。要禁用包含的模块并使MySQL存储库软件包可见,请使用以下命令(对于启用dnf的系统,将命令中的yum替换为dnf):

      shell>sudo yum module disable mysql
      
    4. 安装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)。。

    5. 启动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 -p
      
      mysql> 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/gcc7yum 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-clientMySQL客户端应用程序和工具
    mysql-community-common服务器和客户端库的通用文件
    mysql-community-develMySQL数据库客户端应用程序的开发头文件和库
    mysql-community-embedded-compatMySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容
    mysql-community-libsMySQL数据库客户端应用程序的共享库
    mysql-community-libs-compat以前的MySQL安装的共享兼容性库
    mysql-community-server数据库服务器和相关工具
    mysql-community-server-debug调试服务器和插件二进制文件
    mysql-community-testMySQL服务器的测试套件
    mysql-communityRPM的源代码类似于mysql-community-8.0.21-1.el7.src.rpm,具体取决于所选的OS

    表2.9 MySQL企业版的RPM软件包

    包裹名字摘要
    mysql-commercial-backupMySQL企业备份(8.0.11中添加)
    mysql-commercial-clientMySQL客户端应用程序和工具
    mysql-commercial-common服务器和客户端库的通用文件
    mysql-commercial-develMySQL数据库客户端应用程序的开发头文件和库
    mysql-commercial-embedded-compatMySQL服务器作为嵌入式库,与使用库版本18的应用程序兼容
    mysql-commercial-libsMySQL数据库客户端应用程序的共享库
    mysql-commercial-libs-compat以前的MySQL安装的共享兼容性库;库的版本与您使用的发行版默认安装的库的版本匹配
    mysql-commercial-server数据库服务器和相关工具
    mysql-commercial-testMySQL服务器的测试套件

    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},例如fc31Fedora 30和31
    sles12SUSE 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-servermysql-community-clientmysql-community-libsmysql-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平台:/var/log/mysqld.log

    对于SLES:/var/log/mysql/mysqld.log

    的价值secure_file_priv/var/lib/mysql-files
    System V初始化脚本

    对于RHEL,Oracle Linux,CentOS或Fedora平台:/etc/init.d/mysqld

    对于SLES:/etc/init.d/mysql

    系统服务

    对于RHEL,Oracle Linux,CentOS或Fedora平台:mysqld

    对于SLES:mysql

    PID文件/var/run/mysql/mysqld.pid
    插座/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(或带有反向参数的服务)命令,如stopstartstatusrestart来管理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.5libmysqlclient.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.tarMVERDVERCPU

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

        CPU预期的处理器类型或系列
        i386奔腾处理器或更高版本,32位
        md6464位x86处理器

      • 下载完压缩包后,请使用以下命令将其解压缩:

        shell>tar -xvf mysql-server_MVER-DVER_CPU.deb-bundle.tar
        
      • libaio如果系统上尚不存在该库,则可能需要安装该库:

        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-coreclient-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.55.65.78.0,或latest)。如果省略,则使用标签,并下载最新版本的MySQL Community Server的映像。请参阅Docker Hub中mysql / mysql-server页面上可用版本的标签列表。:taglatest

    您可以使用以下命令列出下载的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.zipDocker映像的文件(),解压缩以获取其中的tarball(),然后加载该映像通过运行以下命令:mysql-commercial-version_linux_x86_64_docker_tar.zipmysql-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 pulldocker 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)

    上面-ddocker 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 pulldocker 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。在以下示例中,我们从容器内部运行mysql客户端myapp1以连接到mysql1其自身容器中的主机:

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

    有关容器的其他联网技术,请参阅Docker文档中的 Docker容器联网部分。

    服务器错误日志

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

    • 已经安装了主机中的服务器配置文件,但是该文件不包含系统变量log_error(请参阅有关绑定安装服务器配置文件的“持久数据和配置更改”)。
    • 主机的服务器配置文件尚未挂载,但Docker环境变量MYSQL_LOG_CONSOLEtrue(该变量是MySQL 8.0服务器容器的默认状态)。然后将MySQL Server的错误日志重定向到stderr,以便将错误日志放入Docker容器的日志中,并可以使用docker logs mysqld-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服务器实例

    1. 在运行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的输出是否结束,以确保备份已成功完成,这一点很重要。

    2. 备份作业完成后,该容器将退出,并--rm使用启动它的选项在退出后将其删除。映像备份已创建,可以在上一步中存储的主机目录中找到以存储备份:

      shell>ls /tmp/backups
      db.mbi
      

    使用Docker的MySQL企业备份在Docker容器中还原MySQL服务器实例

    1. 停止MySQL Server容器,该容器也会停止在其中运行的MySQL Server:

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

      rm -rf /path-on-host-machine/datadir/*
      
    3. 使用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使用启动时使用的选项,该容器将在退出后被删除。

    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环境变量

    创建MySQL Server容器时,可以通过使用--env选项(-e简而言之)并指定以下一个或多个环境变量来配置MySQL实例。

    笔记
    • 如果您安装的数据目录不为空,则以下变量均无效,否则将不尝试初始化服务器(有关更多详细信息,请参见持久数据和配置更改)。在容器启动期间,不会修改文件夹中所有先前存在的内容,包括所有旧服务器设置。
    • 布尔变量,包括MYSQL_RANDOM_ROOT_PASSWORDMYSQL_ONETIME_PASSWORDMYSQL_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_USERMYSQL_PASSWORD,创建用户并授予该数据库(对应于超级用户权限GRANT ALL)。指定的数据库由 CREATE DATABASE IF NOT EXIST语句创建,因此如果数据库已经存在,则该变量无效。
    • MYSQL_USERMYSQL_PASSWORD::这些变量一起用于创建用户并设置该用户的密码,并且授予该用户对该MYSQL_DATABASE变量指定的数据库的超级用户权限。这两个MYSQL_USERMYSQL_PASSWORD所需要的用户可以创建,如果有两个变量没有设置,其他被忽略。如果两个变量都设置但未设置MYSQL_DATABASE,则创建用户时没有任何特权。

      注意

      除非使用 true ,否则无需使用此机制来创建root超级用户,该超级用户默认情况下是使用描述中针对MYSQL_ROOT_PASSWORD and 的机制之一设置的密码创建的。MYSQL_RANDOM_ROOT_PASSWORDMYSQL_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 logs mysqld-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-clientmysql-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_multimysqld_multi.server是不必要的,也不会安装。

    系统概述

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

    systemctl {start|stop|restart|status} mysqld
    

    或者,使用与System V系统兼容的service命令(具有相反的参数):

    service mysqld {start|stop|restart|status}
    
    注意

    对于systemctlservice命令,如果MySQL服务名称不是mysqld,请使用适当的名称。例如,使用mysql而不是mysqld在基于Debian的系统和SLES系统上使用。

    对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平台):单位文件的支持脚本。仅当日志位置与模式匹配(/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服务器的文件描述符,使用次数LimitNOFILEoverride.conf,而不是open_files_limit针对系统变量的mysqld--open-files-limit选项mysqld_safe的
    • 要设置最大核心文件大小,请使用LimitCorein override.conf而不是mysqld_safe--core-file-size选项。
    • 要设置MySQL服务器的调度优先级,请使用Nicein override.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服务器进程使用:

    • Environmentoverride.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_OPTSsystemd变量。例如:

    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平台)

    例如,要管理名为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”。