我想使用mysqlsh来做以下事情:
1.转储给定数据库的FULL模式(不仅仅是表,还有函数、触发器、与此数据库模式相关的所有内容,与mysqldump -R DATABASE > DATABASE.sql
相同)
1.将此完整模式加载到我刚刚创建的全新数据库中(类似于mysql --database=NEWDATABASE < DATABASE.sql
)
当我运行mysqlsh --execute 'util.dumpTables("DATABASE", [], "SQL/DATABASE", {all:true});'
时,它当然只是转储表,这可以很容易地用这个命令mysqlsh --database=NEWDATABASE --execute 'util.loadDump("SQL/DATABASE", {schema: 'NEWDATABASE', ignoreVersion:true,resetProgress:true});
导入到一个全新的数据库中。问题是它缺少函数和存储过程。
然后我尝试了mysqlsh --execute 'util.dumpSchemas(["DATABASE"], "DATABASE");'
,然后用mysqlsh --database=NEWDATABASE --execute 'util.loadDump("DATABASE", {dryRun: true, ignoreVersion:true});'
将它加载到一个新的数据库中,但我立即注意到它试图加载到原始数据库中,而不是我的新数据库。那么我如何将它加载到一个新的数据库中,一个完全不同的名称?
如果你想知道的话,我正在学习如何最大化我的用例mysqlsh,所以旧的mysqldump
在这种情况下不是一个选择。
2条答案
按热度按时间5n0oy7gb1#
我想你只需要在加载
.sql
文件之前用文本编辑器编辑它。这个工具实际上是用于转储模式并将它们导入到不同的MySQL示例,但保持模式名称不变。
ozxc1zmp2#
我认为在转储文件的开头进行一个简单的字符串替换就足够了。
只需更换
"use olddatabase;"
与
"use newdatabase;"
除非你的SQL代码,例如存储过程和视图定义包含一些花哨的数据库间命令,例如(I'm making this up)....
select u.name, u.id from olddatabase.users u inner join somedatabase.tokens t on u.id = t.id where...
那么你也需要在这里执行适当的字符串替换。