gpt4 book ai didi

mysql - 使用 Docker 命令从 Mysql 导出 View

转载 作者:行者123 更新时间:2023-11-29 06:38:21 24 4
gpt4 key购买 nike

下面的代码从数据库中单独提取 View 。但是,我试图让它在单个 docker run 或 exec 命令中运行。

现在,当我尝试时,管道命令与尝试转义引号相结合会出现错误。

mysql -u username INFORMATION_SCHEMA
--skip-column-names --batch
-e "select table_name from tables where table_type = 'VIEW'
and table_schema = 'database'"
| xargs mysqldump -u username database
> views.sql

有人知道如何在一个 docker 命令中实现这一目标吗?

例如:

docker exec -i $(docker-compose ps -q mysqldb) mysql ...

非常有爱。

最佳答案

您可以从“数据库服务器上”以外的位置运行 mysql 客户端命令和 mysqldump 工具。在您的情况下,您可以从具有 MySQL 服务器的主机运行它们,假设您使用 docker run -p 3306:3306 等选项启动了数据库。它看起来像

mysql -h 127.0.0.1 -u username INFORMATION_SCHEMA \
--skip-column-names --batch \
-e "select table_name from tables where table_type = 'VIEW' and table_schema = 'database'" \
| xargs mysqldump -h 127.0.0.1 -u username database \
> views.sql

这避免了尝试将其输入到docker exec时出现的所有 shell 引用问题,并且还避免了需要主机上的根级别访问权限来执行管理任务的要求(如果您可以运行任何 Docker 命令,然后您可以使用 docker run 将自己添加到主机的/etc/sudoers 等)。

不过,我也同意@MichaelBoesl的回答:这已经足够长了,尝试将其变成一句台词并不值得为各种引用和转义带来麻烦。我可能会将其写入脚本并将 SQL 查询放入文件中。

#!/bin/sh
: ${MYSQL_HOST:=127.0.0.1}
: ${MYSQL_USER:=username}
: ${MYSQL_DATABASE:=INFORMATION_SCHEMA}
cat >/tmp/dump_views.sql <<SQL
SELECT table_name
FROM tables
WHERE table_type='VIEW' AND table_schema='database';
SQL
mysql -h "$MYSQL_HOST" -u "$MYSQL_USER" --skip-column-names --batch \
"$MYSQL_DATABASE" </tmp/dump_views.sql \
| xargs mysqldump -h "$MYSQL_HOST" -u "$MYSQL_USER" "$MYSQL_DATABASE"

关于mysql - 使用 Docker 命令从 Mysql 导出 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52795622/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com