10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 下载本手册
PDF(美国高级主任)- 41.6 mb
PDF (A4)- 41.7 mb
手册页(TGZ)- 262.1 kb
手册页(Zip)- 372.1 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

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

请注意

下面的大多数示例命令都具有mysql / mysql服务器作为Docker映像存储库,当必须指定时(就像使用码头工人拉而且码头工人运行命令);如果映像来自另一个存储库,则更改此设置—例如,将其替换为container-registry.oracle.com/mysql/enterprise-server用于从Oracle容器注册表(OCR)下载的MySQL企业版映像,或者mysql /企业服务器用于下载MySQL企业版映像我的Oracle支持

优化的MySQL安装Docker

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企业版8.0)

    • /usr/sbin/mysqld

  • 所有二进制文件都被剥离;它们不包含调试信息。

配置MySQL服务器

启动MySQL Docker容器时,可以将配置选项通过码头工人运行命令。例如:

运行——name mysql1 -d mysql/mysql-server标签——character-set-server = utf8mb4 collation-server = utf8mb4_col

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

另一种配置MySQL服务器的方法是准备一个配置文件,并将其挂载到容器中服务器配置文件的位置。看到持久化数据和配置更改获取详细信息。

持久化数据和配置更改

Docker容器原则上是短暂的,如果容器被删除或损坏,任何数据或配置都将丢失(见讨论)在这里).码头工人卷,但是,提供了一种机制来持久化Docker容器中创建的数据。在初始化时,MySQL Server容器为服务器数据目录创建了一个Docker卷。的JSON输出码头工人检查容器上的命令有Key,它的值提供数据目录卷的信息:

Shell > docker检查mysql1" mount ": [{"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,容器内的服务器数据目录。

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

运行——name=mysql1 \——mount type=bind,src=/ path-on-host-machine my.cnf/etc/my.cnf \——mount type=bind,src=/ path-on-host-machine datadir/var/lib/mysql \ -d mysql/mysql-server:标签

命令挂载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)用户= mysql

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

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

运行额外的初始化脚本

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

运行——name=mysql1 \——mount type=bind,src=/ / path-on-host-machine /脚本dst = / docker-entrypoint-initdb。mysql/mysql-server:标签
从另一个Docker容器中的应用程序连接到MySQL

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

Docker网络创建my-custom-net

然后,在创建和启动服务器和客户端容器时,使用——网络选项,将它们放在您创建的网络上。例如:

Docker运行——name=mysql1——network=my-custom-net- d mysql / mysql服务器
Docker运行——name=myapp1——network=my-custom-net- d myapp

myapp1容器就可以连接到mysql1容器具有mysql1主机名,反之亦然,因为Docker会自动为给定的容器名称设置DNS。在下面的示例中,我们运行mysql客户机从myapp1容器连接到主机mysql1在它自己的容器中:

Docker exec - myapp1 mysql——host=mysql1——user=myuser——password

有关容器的其他网络技术,请参见Docker容器组网章节。10bet官方网站

服务器错误日志

当MySQL服务器第一次与服务器容器一起启动时,一个服务器错误日志如果下列条件之一为真,则不生成:

  • 已挂载主机上的服务器配置文件,但该文件不包含系统变量log_error(见持久化数据和配置更改在绑定挂载服务器配置文件时)。

  • 主机上的服务器配置文件没有挂载,而是挂载了Docker环境变量MYSQL_LOG_CONSOLE真正的(这是MySQL 8.0服务器容器的变量默认状态)。MySQL服务器的错误日志被重定向到stderr,这样错误日志就会进入Docker容器的日志中,并且可以使用码头工人日志mysqld-container命令。

要使MySQL服务器在两个条件中的任何一个为真时生成错误日志,请使用——日志错误选项配置服务器在容器内的特定位置生成错误日志。若要持久保存错误日志,请在容器内错误日志所在的位置挂载主机文件,如中所述持久化数据和配置更改.但是,您必须确保容器中的MySQL服务器对挂载的主机文件具有写访问权。

使用MySQL企业备份与Docker

MySQL企业备份是一个商业许可的备份实用程序MySQL服务器,可用MySQL企业版.MySQL企业备份包含在MySQL企业版的Docker安装中。

在下面的例子中,我们假设你已经在Docker容器中运行了一个MySQL服务器章节2.5.6.1“使用Docker部署MySQL服务器的基本步骤”如何使用Docker启动MySQL服务器实例)。对于MySQL Enterprise Backup备份MySQL服务器,它必须能够访问服务器的数据目录。这可以通过,例如,在MySQL服务器的data目录上绑定挂载一个主机目录当你启动服务器时:

Docker运行——name=mysqlserver \——mount type=bind,src=/ path-on-host-machine / datadir //var/lib/mysql \ -d mysql/enterprise-server:8.0

使用这个命令,MySQL服务器将以MySQL企业版的Docker镜像和主机目录启动/ path-on-host-machine / datadir /已挂载到服务器的数据目录(/var/lib/mysql)在服务器容器内。我们还假设,在服务器启动之后,已经为MySQL Enterprise Backup设置了访问服务器所需的权限(参见授予备份管理员MySQL权限详情)。然后使用以下步骤备份和恢复MySQL服务器实例。

使用MySQL Enterprise backup with Docker备份一个运行在Docker容器中的MySQL服务器实例

  1. 在运行MySQL Server容器的同一主机上,使用MySQL Enterprise Edition的映像启动另一个容器,使用MySQL Enterprise Backup命令执行备份backup-to-image.使用我们在最后一步中创建的绑定挂载提供对服务器数据目录的访问。另外,挂载一个主机目录(/ / path-on-host-machine /备份在本例中)转移到容器(/数据/备份在本例中)持久化我们正在创建的备份。下面是这个步骤的示例命令,其中MySQL企业备份从下载的Docker映像启动我的Oracle支持):

    Shell > docker运行\——mount type=bind,src=/ path-on-host-machine / datadir //var/lib/mysql \——mount type=bind,src=/ / path-on-host-machine /备份/data/backups \——rm mysql/enterprise-server:8.0 \ mysqlbackup -umysqlbackup- p密码——backup-dir=/tmp/backup-tmp——with-timestamp \——backup-image=/data/backups/db.使用实例MySQL Enterprise Backup version 8.0.11 Linux-4.1.12-61.1.16.el7uek. mbi Backup - up- Image [Entrypoint] MySQL Docker Image 8.0.11-1.1.5版权所有(c) 2003,2018, Oracle和/或其关联公司。180921 17:27:25 MAIN INFO:以Id '140594390935680'创建的线程。180921 17:27:25 MAIN INFO:从以下命令行... ...开始------------------------------------------------------------- 参数的总结  ------------------------------------------------------------- 开始LSN: 29615616年底LSN: 29651854  ------------------------------------------------------------- mysqlbackup完成好的!

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

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

    Shell > ls /tmp/backups db.mbi

使用MySQL Enterprise Backup with Docker恢复Docker容器中的MySQL Server实例

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

    停止mysqlserver
  2. 在主机上删除MySQL Server数据目录的绑定挂载中的所有内容:

    rm射频/ path-on-host-machine datadir/*
  3. 使用MySQL Enterprise Edition映像启动容器,使用MySQL Enterprise Backup命令执行恢复copy-back-and-apply-log.绑定挂载服务器的数据目录和备份的存储文件夹,就像我们备份服务器时所做的那样:

    Shell > docker运行\——mount type=bind,src=/ path-on-host-machine / datadir //var/lib/mysql \——mount type=bind,src=/ / path-on-host-machine /备份. /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。Linux-4.1.12-61.1.16.el7uek. mbi copy-back-and- application -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. log版权所有(c) 2003,2018, Oracle和/或其关联公司。180921 22:06:52 MAIN INFO: Id '139768047519872' 180921 22:06:52 MAIN INFO:从以下命令行... ...开始180921 22:06:52 PCR1信息:我们能够解析ibbackup_logfile到lsn 29680612。180921 22:06:52 PCR1信息:最后的MySQL binlog文件位置0 155,文件名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. 重新启动服务器容器,也会重新启动恢复的服务器:

    重启mysqlserver

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

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

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

已知的问题
  • 当使用服务器系统变量时audit_log_file配置审计日志文件名,请使用宽松的选择修改器否则Docker将无法启动服务器。

Docker环境变量

创建MySQL服务器容器时,可以使用- - - env选项(- e简而言之),并指定以下一个或多个环境变量。

笔记
  • 如果您挂载的数据目录不是空的,那么下面的变量都不会起作用,因为此时不会尝试服务器初始化(请参阅持久化数据和配置更改有关详情)。在容器启动期间,不会修改文件夹中任何预先存在的内容,包括任何旧的服务器设置。

  • 布尔变量包括MYSQL_RANDOM_ROOT_PASSWORDMYSQL_ONETIME_PASSWORDMYSQL_ALLOW_EMPTY_PASSWORD,MYSQL_LOG_CONSOLE通过将它们设置为任何非零长度的字符串来实现。因此,将它们设置为,例如,0,或没有不会让它们变成假的,反而会让它们变成真的。这是MySQL服务器容器的一个已知问题。

  • MYSQL_RANDOM_ROOT_PASSWORD:当这个变量为true时(这是它的默认状态,除非MYSQL_ROOT_PASSWORD设置或MYSQL_ALLOW_EMPTY_PASSWORD设置为true), Docker容器启动时会为服务器的root用户生成一个随机密码。密码被打印到stdout可以通过查看容器的日志(参见启动MySQL服务器实例).

  • MYSQL_ONETIME_PASSWORD:当变量为true时(这是它的默认状态,除非MYSQL_ROOT_PASSWORD设置或MYSQL_ALLOW_EMPTY_PASSWORD当root用户的密码被设置为过期时,必须修改密码才能正常使用MySQL。

  • MYSQL_DATABASE:该变量允许您指定镜像启动时要创建的数据库的名称。如果提供了用户名和密码MYSQL_USER而且MYSQL_PASSWORD,则创建用户并授予该用户对该数据库的超级用户访问权(对应于授予所有).创建指定的数据库如果不存在,请创建数据库语句,这样如果数据库已经存在,该变量将不起作用。

  • MYSQL_USERMYSQL_PASSWORD类所指定的数据库将同时使用这些变量来创建用户和设置该用户的密码,并向该用户授予超级用户权限MYSQL_DATABASE变量。这两个MYSQL_USER而且MYSQL_PASSWORD是创建用户所必需的—如果没有设置两个变量中的任何一个,则忽略另一个。如果两个变量都设置了,但是MYSQL_DATABASE不是,则创建该用户时没有任何权限。

    请注意

    不需要使用这种机制来创建root超级用户,默认情况下,root超级用户的密码由描述中讨论的两种机制中的任意一种设置MYSQL_ROOT_PASSWORD而且MYSQL_RANDOM_ROOT_PASSWORD,除非MYSQL_ALLOW_EMPTY_PASSWORD是真的。

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

  • MYSQL_LOG_CONSOLE:当变量为true时(这是MySQL 8.0服务器容器的默认状态),MySQL服务器的错误日志被重定向到stderr,这样错误日志就会进入Docker容器的日志中,并且可以使用码头工人日志mysqld-container命令。

    请注意

    如果主机上的服务器配置文件已经挂载(请参阅持久化数据和配置更改绑定挂载配置文件时)。

  • MYSQL_ROOT_PASSWORD: MySQL root帐号的密码。

    警告

    通过命令行设置MySQL root用户密码是不安全的。作为显式指定密码的替代方法,您可以使用容器文件路径为密码文件设置变量,然后在容器文件路径上挂载主机上包含密码的文件。这仍然不是很安全,因为密码文件的位置仍然暴露在外。的默认设置是可取的MYSQL_RANDOM_ROOT_PASSWORD而且MYSQL_ONETIME_PASSWORD两者都对。

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

    警告

    将这个变量设置为true是不安全的,因为它将使您的MySQL实例完全不受保护,允许任何人获得完全的超级用户访问权限。的默认设置是可取的MYSQL_RANDOM_ROOT_PASSWORD而且MYSQL_ONETIME_PASSWORD两者都对。