13

我正在尝试为php构建一个docker映像,它可以处理mysql容器中的数据库转储。问题是,它似乎安装的是mariadb版本,而不是客户端的mysql版本。这给了我一个错误mysqldump:未知变量“set-gtid-preated=OFF”

我无法更改进行转储的脚本,因为它是laravel核心的一部分。它检测服务器sql版本,看看是否应该添加该命令。所以我真的需要在php图像/容器上有正确的客户端版本。

这是我的Dockerfile

FROM库/php:7.4-fpmRUN apt-get更新\&&apt-get安装-y默认-mysql-客户端
5
  • 1
    为什么把所有东西都堆在一个容器里?容器背后的想法是你可以制作一个只是用于倾倒。
    – 蝌蚪
    评论 2020年9月25日7:21
  • 这是MySQL 8.0的一个特性,所以它可能正在安装旧版本的客户端?
    – 蝌蚪
    评论 2020年9月25日7:22
  • @tadman Everything位于单独的容器中,但由于转储是从php本身(CLI)运行的,我看不出让它将该命令传递给另一个容器有什么好处。
    – 辛贝克
    评论 2020年9月25日7:28
  • 提醒你,转储是一件很简单的事情,所以如果你真的遇到了麻烦,你可能会找到另一个已经这样做的容器,或者你可以很快地将一个容器组合在一起。我有一种感觉,PHP映像的基本操作系统没有最新的MySQL,并且提供了不兼容的选项。
    – 蝌蚪
    评论 2020年9月25日7:30
  • 您还可以尝试使用另一个更新的PHP运行时容器。也可以选择为该安装添加额外的存储库(Debian?Ubuntu?),但这很快就会变得异常混乱。
    – 塔德曼
    评论 2020年9月25日7:31

3个答案

重置为默认值
11

我设法找到了解决办法。我决定通读一下官方mysql映像是如何构建的,并在这里实现相同的解决方案。

https://hub.docker.com/layers/mysql/library/mysql/latest/images/sha256-b589f11ab39a852fd13090aeb56314978c73a16d615e28ec148306889b67889f?context=explore

因此,添加此功能后,安装了所需的客户端,一切正常。

运行apt-key adv--keyserver ha.pool.sks-keyservers.net--recv-keys 8C718D3B5072E1F5运行echo“debhttp://repo.mysql.com/apt/debian/buster mysql-8.0“>/etc/apt/sources.list.d/mysql.listRUN apt-get更新\&&apt-get安装-y mysql-community-client
2
6

如果您构建该映像,请运行docker运行-it<MyImageName>bash你可以探索一下发生了什么。

apt显示默认mysql-client显示了以下内容,所以您是正确的,它是mariadb。

根部@ff27370412ab:/var/www/html#apt-show default-mysql-client包:default-mysql-client版本:1.0.5优先级:可选章节:数据库来源:mysql-defaults维护者:Debian MySQL维护者<[电子邮件保护]>安装尺寸:10.2 kB取决于:mariadb-client-10.3下载大小:3532 BAPT-手动安装:是APT来源:http://deb.debian.org/debian网站buster/main和64包描述:MySQL数据库客户端二进制文件(元包)

然后你可以跑步apt搜索mysql找到其他可以使用的包。

我浏览了其中一些,但没有找到任何看起来像非马拉伊德的。但您可以使用以下步骤将其添加到apt回购中。https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/

1
  • 你的评论非常适合我。谢谢。
    – 幻影
    评论 2021年1月8日18:48
5

正如上文@jeff-h所述,自2021年11月以来,答案略有变化:

RUN集合-ex\#gpg:key 5072E1F5:公钥“MySQL发布工程<[电子邮件保护]>“已导入键=“859BE8D7C586F538430B19C2467B942D3A79BD29”\export GNUPGHOME=“$(mktemp-d)”\gpg--batch--keyserver keyserver.ubuntu.com--recv-keys“$key”\gpg—批处理—导出“$key”>/etc/apt/trusted.gpg.d/mysql.gpg\gpgconf—全部删除\rm-rf“$GNUPGHOME”\apt-key-list>/dev/null

这里的关键区别(双关语)是新的密钥服务器地址。

  • 旧版本:ha.pool.sks-keyservers.net
  • 新增:keyserver.ubuntu.com

编辑;在下面@jeff-h的评论中添加了新的密钥。

你的答案

单击“发布您的答案”,表示您同意我们的服务条款并确认您已阅读我们的隐私政策.

不是你想要的答案吗?浏览标记的其他问题问你自己的问题.