我正在尝试为php构建一个docker镜像,它可以处理mysql容器中的数据库转储。问题是它似乎安装的是mariadb版本,而不是mysql版本的客户端。这会给我一个错误mysqldump: unknown variable 'set-gtid-purged=OFF'
执行转储的脚本不是我可以更改的脚本,因为它是laravel内核的一部分。它会检测服务器的sql版本,看看是否应该添加该命令。所以我真的需要在我的php镜像/容器上有一个正确的客户端版本。
这是我的Dockerfile
FROM library/php:7.4-fpm
RUN apt-get update \
&& apt-get install -y default-mysql-client发布于 2020-09-25 16:46:39
我设法找到了一个解决方案。我决定通读一下官方的mysql镜像是如何构建的,并在这里实现相同的解决方案。
因此,添加这个,安装了所需的客户端,一切都正常了。
RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 8C718D3B5072E1F5
RUN echo "deb http://repo.mysql.com/apt/debian/ buster mysql-8.0" > /etc/apt/sources.list.d/mysql.list
RUN apt-get update \
&& apt-get install -y mysql-community-client发布于 2020-09-25 16:00:26
如果您构建了该映像,然后运行docker run -it <MyImageName> bash,那么您可以稍微探索一下发生了什么。
apt show default-mysql-client显示了以下内容,因此您是正确的。
root@ff27370412ab:/var/www/html# apt show default-mysql-client
Package: default-mysql-client
Version: 1.0.5
Priority: optional
Section: database
Source: mysql-defaults
Maintainer: Debian MySQL Maintainers <pkg-mysql-maint@lists.alioth.debian.org>
Installed-Size: 10.2 kB
Depends: mariadb-client-10.3
Download-Size: 3532 B
APT-Manual-Installed: yes
APT-Sources: http://deb.debian.org/debian buster/main amd64 Packages
Description: MySQL database client binaries (metapackage)然后,您可以运行apt search mysql来查找您可以使用的其他包。
我浏览了其中的几个,但没有找到任何看起来像非maraidb的。但是您可以使用以下步骤将其添加到您的apt repo中。https://dev.mysql.com/doc/mysql-apt-repo-quick-guide/en/
发布于 2022-01-25 16:57:56
正如上面的@jeff-h所说,自2021年11月以来,答案略有变化:
RUN set -ex; \
# gpg: key 5072E1F5: public key "MySQL Release Engineering <mysql-build@oss.oracle.com>" imported
key='A4A9406876FCBD3C456770C88C718D3B5072E1F5'; \
export GNUPGHOME="$(mktemp -d)"; \
gpg --batch --keyserver keyserver.ubuntu.com --recv-keys "$key"; \
gpg --batch --export "$key" > /etc/apt/trusted.gpg.d/mysql.gpg; \
gpgconf --kill all; \
rm -rf "$GNUPGHOME"; \
apt-key list > /dev/null这里的关键区别(双关语)是新的keyserver地址。
旧版ha.pool.sks-keyservers.net
keyserver.ubuntu.com:
https://stackoverflow.com/questions/64059522
复制相似问题