我有一个用于实时项目的 MySQL 数据库,我想在可用于开发目的的同一台服务器上创建它的副本。我已经使用 MySQL 转储创建了实时数据库的副本。我这样做如下:
mysqldump -u root -p mydatabase_live > mydatabase_dump.sql
然后我登录到 MySQL 并创建了一个名为 mydatabase_test 的空数据库。然后我尝试通过退出 MySQL 并执行以下操作将转储复制到新创建的 database_test:
mysql -u root -p database_test < mydatabase_dump.sql
这在第 527 行给我错误消息 ERROR 1359 (HY000):触发器已存在。
当我重新登录到 MySQL 并检查我刚刚转储的数据库上的触发器时,我看不到任何具有重复名称的触发器。我已经尝试重复上述过程以防初始转储中出现某种错误,但问题仍然存在。
谁能解释为什么我会收到此错误消息以及如何解决这个问题?
我正在使用适用于 Linux 的 MySQL Ver 14.14 Distrib 5.7.25
* 请注意在下面接受的答案中添加详细信息 *
可以在文本编辑器中打开 MySQL 转储文件。我用过vi。解决方案是找到触发器并更改触发器名称的一部分,将其标识为属于您从中获取转储的模式,将其更改为您针对转储的模式。在我的例子中,这意味着将 mydatabase_live
.my_table
更改为 mydatabase_test
.my_table
。然后登录mysql,删除测试表然后重新创建它,然后注销并再次执行复制命令。
最佳答案
触发器存储在 Information_Schema.Triggers 表中。也许这就是为什么您不能复制它们,也许可以用不同的名称创建一个新的?
在这里查看更多信息
关于使用 sql dump 克隆数据库时出现 MYSQL 错误 - 错误 1359 (HY000) : Trigger already exists,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54578970/