使用Docker命令从Mysql导出视图

使用Docker命令从Mysql导出视图,mysql,docker,view,export,Mysql,Docker,View,Export,下面的代码分别从数据库中提取视图。然而,我试图让它在一个docker运行或exec命令中运行 现在当我尝试时,pipe命令和尝试转义引号的组合会给我带来错误 mysql -u username INFORMATION_SCHEMA --skip-column-names --batch -e "select table_name from tables where table_type = 'VIEW' and table_schema = 'database'" | xargs mysql

下面的代码分别从数据库中提取视图。然而,我试图让它在一个docker运行或exec命令中运行

现在当我尝试时,pipe命令和尝试转义引号的组合会给我带来错误

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 ...

非常喜欢。

您可以将所有命令放入容器上的bash脚本中,然后执行脚本

您可以将所有命令放入容器上的bash脚本中,然后执行脚本

您可以从数据库服务器以外的地方运行mysql客户机命令和mysqldump工具。在您的例子中,您可以从拥有MySQL服务器的主机上运行它们,假设您使用docker run-p3306:3306之类的选项启动了数据库。看起来像

mysql-H127.0.0.1-u用户名信息\u模式\ -跳过列名-批处理\ -e从表类型为“视图”和表模式为“数据库”的表中选择表名称\ |xargs mysqldump-h 127.0.0.1-u用户名数据库\ >views.sql 这避免了试图将其输入docker exec时出现的所有shell引用问题,也避免了需要对主机进行根级别访问才能执行管理任务的要求。如果您可以运行任何docker命令,那么您可以使用docker run将自己添加到主机的/etc/sudoers中

不过,我也同意@MichaelBoesl的回答:这段时间足够长了,要想把它变成一行,真的不值得各种引用和逃避所带来的麻烦。我可能会将其写入脚本并将SQL查询放入文件中

!/垃圾箱/垃圾箱 :${MYSQL_主机:=127.0.0.1} :${MYSQL\u USER:=username} :${MYSQL_数据库:=信息_架构} cat>/tmp/dump_views.sql您可以从数据库服务器以外的地方运行mysql客户机命令和mysqldump工具。在您的例子中,您可以从拥有MySQL服务器的主机上运行它们,假设您使用docker run-p3306:3306之类的选项启动了数据库。看起来像

mysql-H127.0.0.1-u用户名信息\u模式\ -跳过列名-批处理\ -e从表类型为“视图”和表模式为“数据库”的表中选择表名称\ |xargs mysqldump-h 127.0.0.1-u用户名数据库\ >views.sql 这避免了试图将其输入docker exec时出现的所有shell引用问题,也避免了需要对主机进行根级别访问才能执行管理任务的要求。如果您可以运行任何docker命令,那么您可以使用docker run将自己添加到主机的/etc/sudoers中

不过,我也同意@MichaelBoesl的回答:这段时间足够长了,要想把它变成一行,真的不值得各种引用和逃避所带来的麻烦。我可能会将其写入脚本并将SQL查询放入文件中

!/垃圾箱/垃圾箱 :${MYSQL_主机:=127.0.0.1} :${MYSQL\u USER:=username} :${MYSQL_数据库:=信息_架构}
cat>/tmp/dump_views.sql是的,这是另一种方式,但我正在尝试看看是否存在这种情况。是的,这是另一种方式,但我正在尝试看看是否存在这种情况。有趣。我想你是对的。谢谢你带我和@MichaelBoesl一起去看更好的方法。我很感激,很有趣。我想你是对的。谢谢你带我和@MichaelBoesl一起去看更好的方法。我很感激。