使用sql转储克隆数据库时出现MYSQL错误-错误1359(HY000):触发器已存在

使用sql转储克隆数据库时出现MYSQL错误-错误1359(HY000):触发器已存在,mysql,database-trigger,Mysql,Database Trigger,我有一个MySQL数据库,用于一个实时项目,我想在同一台服务器上创建一个副本,用于开发目的。我已经使用MySQL转储创建了live数据库的副本。我是这样做的: mysqldump -u root -p mydatabase_live > mydatabase_dump.sql 然后我登录到MySQL并创建了一个名为mydatabase_test的空数据库。然后,通过从MySQL中注销并执行以下操作,尝试将转储复制到新创建的数据库_测试: mysql -u root -p database

我有一个MySQL数据库,用于一个实时项目,我想在同一台服务器上创建一个副本,用于开发目的。我已经使用MySQL转储创建了live数据库的副本。我是这样做的:

mysqldump -u root -p mydatabase_live > mydatabase_dump.sql
然后我登录到MySQL并创建了一个名为mydatabase_test的空数据库。然后,通过从MySQL中注销并执行以下操作,尝试将转储复制到新创建的数据库_测试:

mysql -u root -p database_test < mydatabase_dump.sql
mysql-u root-p database\u test
这会在第527行显示错误消息error 1359(HY000):触发器已存在

当我重新登录MySQL并检查刚刚转储的数据库上的触发器时,我看不到任何名称重复的触发器。我尝试过重复上述过程,以防初始转储中出现某种错误,但问题会重复出现

有人能解释我为什么会收到这个错误消息以及如何解决这个问题吗

我正在使用MySQL版本14.14发行版5.7.25,用于Linux

*注意在下面接受的答案中添加细节*
MySQL转储文件可以在文本编辑器中打开。我用了维姆。解决方案是找到触发器并更改触发器名称中标识它属于从中获取转储的模式的部分,将其更改为转储的目标模式。在我的情况下,这意味着将
mydatabase\u live
myu表
更改为
mydatabase\u test
myu表
。然后登录到mysql,删除测试表,然后重新创建它,然后注销并再次执行copy命令

触发器存储在信息\u Schema.Triggers表中。也许这就是为什么你不能复制它们,或者用不同的名字创建一个新的

请查看此处以了解更多信息

Linux

    mysqldump -u root -p mydatabase_live > mydatabase_dump.sql
    mysqladmin create database_test
    cat mydatabase_dump.sql | sed s/`mydatabase_live`/`database_test`/g | mysql -u root -p database_test
窗口

    mysqldump -u root -p mydatabase_live > mydatabase_dump.sql
    mysqladmin create database_test
    type mydatabase_dump.sql | sed s/`mydatabase_live`/`database_test`/g | mysql -u root -p database_test
注释

    mysqldump -u root -p mydatabase_live > mydatabase_dump.sql
    mysqladmin create database_test
    type mydatabase_dump.sql | sed s/`mydatabase_live`/`database_test`/g | mysql -u root -p database_test
  • 如果您在Windows中,则需要Windows版本的
    sed
    (例如)
  • 我使用了一个例子中几个答案的变体
  • 我正在使用MySQL 5.7
  • 在导出触发器和视图时,5.7中的mysqldump包含数据库名称
  • 我把我的密码放在一个env var中,并在命令行上传递它(我知道,我很糟糕,我明白了)。我之所以提到它,是因为我不知道当您将数据管道传输到mysql可执行文件,然后它提示输入密码时会发生什么

谢谢!成功了。我会在我的问题中添加一些信息,以防其他人也有同样的问题。这似乎是mysqldump中的一个bug。在命令行上指定数据库时,如果未在其前面添加
--databases
选项,则转储文件中的对象不应使用数据库名称限定。