我的生产副本中有一个视图(它是一个只读数据库),我需要将其中一个视图复制到我的数据仓库中。最好的办法是什么?我无法从副本上的视图创建表。意思是我做不到 CREATE TABLE Table_From_View AS SELECT * FROM My_View; 我无法复制创建视图定义的所有表。其中一些包含敏感数据。我肯定我错过了一些基本的东西。。。思想?
CREATE TABLE Table_From_View AS SELECT * FROM My_View;
sd2nnvve1#
在mysql中,视图不存储任何内容。它更像是一个别名或宏。它只是将查询逻辑传递给底层的基表。您需要在创建视图的同一mysql示例上存在底层基表,并且在查询视图时,基表必须保持在同一mysql示例上。如果只想复制视图的内容,因此不复制视图未选择的其他敏感数据,则必须创建基表来复制数据:
mysql> CREATE TABLE myview_base AS SELECT * FROM myview;
然后可以对该复制表执行逻辑转储:
shell > mysqldump --single-transaction mydatabase myview_base > myview_base.sql
然后将该转储文件恢复到数据仓库中,就像恢复任何其他sql转储文件一样。另一种可能的策略:
SELECT * FROM myview INTO OUTFILE 'filename.csv';
这会将sql查询的结果转储到文件中。看到了吗https://dev.mysql.com/doc/refman/8.0/en/select-into.html该文件将在数据库服务器上创建,因此如果您没有服务器的shell访问权限,则无法检索该文件。
1条答案
按热度按时间sd2nnvve1#
在mysql中,视图不存储任何内容。它更像是一个别名或宏。它只是将查询逻辑传递给底层的基表。
您需要在创建视图的同一mysql示例上存在底层基表,并且在查询视图时,基表必须保持在同一mysql示例上。
如果只想复制视图的内容,因此不复制视图未选择的其他敏感数据,则必须创建基表来复制数据:
然后可以对该复制表执行逻辑转储:
然后将该转储文件恢复到数据仓库中,就像恢复任何其他sql转储文件一样。
另一种可能的策略:
这会将sql查询的结果转储到文件中。看到了吗https://dev.mysql.com/doc/refman/8.0/en/select-into.html
该文件将在数据库服务器上创建,因此如果您没有服务器的shell访问权限,则无法检索该文件。