Skip to content

快速参考

支持的标签及各自的 Dockerfile 链接

快速参考(续)

  • 在哪里提交问题:
    对于 Percona Server 的问题:Percona Server JIRA

    如果您没有账户,您将需要创建一个。

  • 支持的架构:(更多信息)
    amd64

  • 已发布的图像伪影细节:
    repo-info repo 的 repos/percona/ 目录(历史记录)
    (图像元数据、传输大小等)

  • 图像更新:
    官方图像仓库的 library/percona 标签
    官方图像存储库的 library/percona 文件(历史记录)

  • 此描述的来源:
    文档库的 percona/ 目录(历史记录)

Percona 服务器(用于 MySQL)

Percona Server for MySQL 是由 Percona 创建的 MySQL 关系数据库管理系统的一个分支。

它旨在保持与官方 MySQL 版本的紧密兼容性,同时注重性能以及提高对服务器操作的可见性。Percona Server 中还包含 XtraDB,这是 Percona 对 InnoDB 存储引擎的分支。

wikipedia.org/wiki/Percona_Server (该内容为网址,在中文语境中一般不进行翻译,直接保留原文)

logo

如何使用此图像

启动一个 percona 服务器实例

启动一个 Percona Server for MySQL 实例很简单:

$ docker run --name some-percona -e MYSQL_ROOT_PASSWORD=my-secret-pw -d percona:tag

……其中 some-percona 是您要为容器指定的名称, my-secret-pw 是要为 MySQL 根用户设置的密码, tag 是指定您想要的 MySQL 版本的标签。有关标签,请参阅上面的列表。

从 MySQL 命令行客户端连接到 Percona Server

以下命令会启动另一个 percona 容器实例,并针对您原始的 percona 容器运行 mysql 命令行客户端,使您能够针对您的数据库实例执行 SQL 语句:

$ docker run -it --network some-network --rm percona mysql -hsome-percona -uexample-user -p

... 其中 some-percona 是您原始的 percona 容器(连接到 some-network Docker 网络)的名称。

此图像也可用作非 Docker 或远程实例的客户端:

$ docker run -it --rm percona mysql -hsome.mysql.host -usome-mysql-user -p

有关 MySQL 命令行客户端的更多信息可在 MySQL 文档中找到

...通过 docker-composedocker stack deploy

示例 docker-compose.yml 用于 percona

# Use root/example as user/password credentials
version: '3.1'

services:

  db:
    image: percona
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example

  adminer:
    image: adminer
    restart: always
    ports:
      - 8080:8080

Try in PWD

运行 docker stack deploy -c stack.yml percona (或 docker-compose -f stack.yml up ),等待其完全初始化,然后访问 http://swarm-ip:8080http://localhost:8080http://host-ip:8080 (视情况而定)。

容器外壳访问及查看 MySQL 日志

docker exec 命令允许您在 Docker 容器内运行命令。以下命令行将在您的 percona 容器内为您提供一个 bash shell:

$ docker exec -it some-percona bash

该日志可通过 Docker 的容器日志获取:

$ docker logs some-percona

使用自定义的 MySQL 配置文件

启动配置在文件 /etc/my.cnf 中指定,该文件又会包含在 /etc/my.cnf.d 目录中找到的以 .cnf 结尾的任何文件。此目录中文件的设置将增强和/或覆盖 /etc/my.cnf 中的设置。如果您想使用自定义的 MySQL 配置,可以在主机上的一个目录中创建您的替代配置文件,然后将该目录位置作为 /etc/my.cnf.d 挂载到 percona 容器内。

如果 /my/custom/config-file.cnf 是您的自定义配置文件的路径和名称,您可以像这样启动您的 percona 容器(请注意,在此命令中仅使用自定义配置文件的目录路径):

$ docker run --name some-percona -v /my/custom:/etc/my.cnf.d -e MYSQL_ROOT_PASSWORD=my-secret-pw -d percona:tag

这将启动一个新容器 some-percona ,其中 Percona Server for MySQL 实例使用来自 /etc/my.cnf/etc/my.cnf.d/config-file.cnf 的组合启动设置,以后者的设置为准。

没有 cnf 文件的配置

许多配置选项可以作为标志传递给 mysqld 。这将使您能够灵活地自定义容器,而无需 cnf 文件。例如,如果您想将所有表的默认编码和排序规则更改为使用 UTF - 8( utf8mb4 ),只需运行以下命令:

$ docker run --name some-percona -e MYSQL_ROOT_PASSWORD=my-secret-pw -d percona:tag --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

如果您想查看可用选项的完整列表,只需运行:

$ docker run -it --rm percona:tag --verbose --help

环境变量

当您启动 percona 图像时,可以通过在 docker run 命令行上传递一个或多个环境变量来调整实例的配置。请注意,如果您使用已经包含数据库的数据目录启动容器,则以下任何变量都不会产生任何效果:在容器启动时,任何预先存在的数据库始终不会被触动。

MYSQL_ROOT_PASSWORD

此变量为必填项,用于指定将为 root 超级用户帐户设置的密码。在上述示例中,该密码被设置为 my-secret-pw

MYSQL_ROOT_HOST

默认情况下, root 可以从任何地方连接。此选项将根连接限制为仅从指定的主机进行连接。此外,此处也可以使用 localhost 进行仅限本地的根访问。

MYSQL_DATABASE

此变量是可选的,允许您指定在映像启动时要创建的数据库的名称。如果提供了用户/密码(见下文),则该用户将被授予对此数据库的超级用户访问权限(对应于 GRANT ALL )。

MYSQL_USER, MYSQL_PASSWORD

这些变量是可选的,结合使用可创建新用户并设置该用户的密码。此用户将被授予由 MYSQL_DATABASE 变量指定的数据库的超级用户权限(见上文)。要创建用户,这两个变量都是必需的。

请注意,无需使用此机制来创建根超级用户,该用户会默认使用由 MYSQL_ROOT_PASSWORD 变量指定的密码创建。

MYSQL_ALLOW_EMPTY_PASSWORD

这是一个可选变量。设置为 yes 以允许容器使用根用户的空白密码启动。注意:除非您确切知道自己在做什么,否则不建议将此变量设置为 yes ,因为这会使您的实例完全不受保护,任何人都可以获得完全的超级用户访问权限。

MYSQL_RANDOM_ROOT_PASSWORD

这是一个可选变量。设置为 yes 以(使用 pwgen )为根用户生成一个随机初始密码。生成的根密码将被打印到标准输出( GENERATED ROOT PASSWORD: ..... )。

MYSQL_ONETIME_PASSWORD

在初始化完成后,将根用户(不是 MYSQL_USER ! 中指定的用户)设置为过期,强制在首次登录时更改密码。注意:此功能仅在 MySQL 5.6 及更高版本中受支持。在 MySQL 5.5 上使用此选项将在初始化期间抛出相应的错误。

MYSQL_INITDB_SKIP_TZINFO

首次运行时,MySQL 会自动从本地系统加载 CONVERT_TZ() 函数所需的时区信息。如果这并非预期情况,此选项会禁用时区加载。

INIT_TOKUDB

在 TokuDB 引擎上开启。只有当透明大页(THP)被禁用时才能激活。

INIT_ROCKSDB

开启 RocksDB 引擎。

Docker 机密信息

作为通过环境变量传递敏感信息的替代方法,可将 _FILE 附加到先前列出的环境变量上,从而使初始化脚本从容器中存在的文件加载这些变量的值。特别是,这可用于从存储在 /run/secrets/<secret_name> 文件中的 Docker 机密中加载密码。例如:

$ docker run --name some-mysql -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/mysql-root -d percona:tag

目前,这仅支持 MYSQL_ROOT_PASSWORDMYSQL_ROOT_HOSTMYSQL_DATABASEMYSQL_USERMYSQL_PASSWORD

遥测技术

从 Percona Server 8.0.35 - 27 开始,遥测功能将默认启用。如果您决定不向 Percona 发送使用数据,可以设置 PERCONA_TELEMETRY_DISABLE=1 环境变量。例如:

$ docker run --name some-mysql -e  PERCONA_TELEMETRY_DISABLE=1 -d percona:tag

正在初始化一个新实例

当容器首次启动时,将使用指定名称创建一个新数据库,并使用提供的配置变量进行初始化。此外,它将执行在 /docker-entrypoint-initdb.d 中找到的扩展名为 .sh.sql.sql.gz 的文件。文件将按字母顺序执行。您可以通过将 SQL 转储挂载到该目录并提供具有贡献数据的自定义映像,轻松填充您的 percona 服务。默认情况下,SQL 文件将导入到由 MYSQL_DATABASE 变量指定的数据库中。

注意事项

数据存储于何处

重要提示:在 Docker 容器中运行的应用程序所使用的数据有几种存储方式。我们鼓励 percona 镜像的用户熟悉可用的选项,包括:

  • 让 Docker 通过使用其自身内部的卷管理将数据库文件写入主机系统的磁盘来管理您的数据库数据的存储。这是默认设置,对用户来说简单且相当透明。缺点是,对于直接在主机系统(即在容器之外)上运行的工具和应用程序,这些文件可能很难定位。
  • 在主机系统(容器外部)上创建一个数据目录,并将其挂载到容器内部可见的目录。这样可以将数据库文件放置在主机系统上的已知位置,并且便于主机系统上的工具和应用程序访问这些文件。缺点是用户需要确保该目录存在,并且例如主机系统上的目录权限和其他安全机制已正确设置。

Docker 文档是了解不同存储选项和变体的良好起点,并且有多个博客和论坛帖子在该领域进行讨论并提供建议。在这里,我们将仅为上述后一种选项展示基本过程:

  1. 在您的主机系统的合适卷上创建一个数据目录,例如 /my/own/datadir

  2. 像这样启动您的 percona 容器:

    $ docker run --name some-percona -v /my/own/datadir:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d percona:tag
    

命令的 -v /my/own/datadir:/var/lib/mysql 部分将底层主机系统中的 /my/own/datadir 目录作为 /var/lib/mysql 挂载到容器内部,默认情况下 MySQL 会将其数据文件写入此处。

在 MySQL 初始化完成之前没有连接

如果容器启动时没有初始化数据库,那么将创建一个默认数据库。虽然这是预期的行为,但这意味着在初始化完成之前,它不会接受传入的连接。这可能会在使用自动化工具(例如 docker-compose ,它会同时启动多个容器)时引起问题。

如果您尝试连接到 MySQL 的应用程序无法妥善处理 MySQL 停机或等待 MySQL 优雅地启动,那么在服务启动之前设置一个连接重试循环可能是必要的。有关官方镜像中此类实现的示例,请参阅 WordPress 或 Bonita。

针对现有数据库的使用情况

如果您使用已包含数据库(特别是 mysql 子目录)的数据目录启动 percona 容器实例,则应从运行命令行中省略 $MYSQL_ROOT_PASSWORD 变量;无论如何,该变量都将被忽略,并且预先存在的数据库不会以任何方式被更改。

创建数据库转储

大多数常规工具都可以使用,尽管在某些情况下,为确保它们能够访问 mysqld 服务器,其使用方法可能会有些复杂。确保这一点的一个简单方法是使用 docker exec ,并从同一容器中运行该工具,类似于以下操作:

$ docker exec some-percona sh -c 'exec mysqldump --all-databases -uroot -p"$MYSQL_ROOT_PASSWORD"' > /some/path/on/your/host/all-databases.sql

从转储文件中恢复数据

为恢复数据。您可以使用带有 -i 标志的 docker exec 命令,类似于以下内容:

$ docker exec -i some-percona sh -c 'exec mysql -uroot -p"$MYSQL_ROOT_PASSWORD"' < /some/path/on/your/host/all-databases.sql

许可证

查看此映像中所包含软件的许可证信息。

与所有 Docker 镜像一样,这些镜像可能还包含其他可能受其他许可证约束的软件(例如来自基础发行版的 Bash 等,以及所包含的主要软件的任何直接或间接依赖项)。

一些能够自动检测到的额外许可信息可能会在 repo-info 存储库的 percona/ 目录中找到。

对于任何预构建图像的使用,图像用户有责任确保对此图像的任何使用都符合其中包含的所有软件的任何相关许可。