mysqlsh转储和加载完整模式

oiopk7p5  于 2023-04-05  发布在  Mysql
关注(0)|答案(2)|浏览(113)

我想使用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在这种情况下不是一个选择。

5n0oy7gb

5n0oy7gb1#

我想你只需要在加载.sql文件之前用文本编辑器编辑它。
这个工具实际上是用于转储模式并将它们导入到不同的MySQL示例,但保持模式名称不变。

ozxc1zmp

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...那么你也需要在这里执行适当的字符串替换。

相关问题