【问题标题】:mysqldump: Got error: 1449:mysqldump:出现错误:1449:
【发布时间】:2014-12-22 08:50:33
【问题描述】:

mysqldump: Got error: 1449: The user specified as a definer('root'@'192.200.1.16') 在使用 LOCK TABLES 时不存在

请给出上述错误的解决方案。

【问题讨论】:

标签: mysql windows


【解决方案1】:

最新的答案提到使用 --single-transaction 确保当您恢复该备份时,您将再次遇到该错误,因此最好的解决方案是更改定义器,如果用户缺少任何管理员用户的添加定义器目前正在使用。

【讨论】:

    【解决方案2】:

    最好使用--single-transaction的第一个mysqldump,例如:

    mysqldump --single-transaction -u root -p mydb > mydb.sql
    

    如果上面不起作用,请尝试下面的一个。

    您必须替换该过程/方法的定义器,然后您才能生成转储而不会出错。

    你可以这样做:

    UPDATE `mysql`.`proc` p SET definer = 'root@localhost' WHERE definer='root@192.200.1.16'
    

    第三方编辑

    对于 mysql 8.0,表 proc 不再存在。试试

     SELECT * FROM information_schema.routines;
    

    【讨论】:

    • 如果您需要更改的是表而不是过程、视图或方法,该怎么办?
    • 谢谢!有效!另外,如果有人感兴趣,here 是有关--single-transaction 选项的一些文档。
    • 特别是(来自文档):“--single-transaction 选项和--lock-tables 选项是互斥的,因为 LOCK TABLES 会导致任何未决事务被隐式提交。”所以我猜它删除了任何 LOCK该事务的 TABLES 设置,因此不再有任何冲突?反正我就是这么读的..
    【解决方案3】:

    从另一台主机复制所有视图和表格后,我遇到了同样的问题。

    在我使用此查询更改数据库中的所有定义器后,它起作用了。

      SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
                    table_name, 
                    " AS ", 
                    view_definition, ";") 
        FROM information_schema.views 
        WHERE table_schema='your-database-name';
    

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,问题是想要将数据库从一个实例迁移到另一个实例,但转储中还有一些过程引用了其他数据库,所以我标记了这个错误并通过修改过程或未能删除来纠正一些。

      【讨论】:

        【解决方案5】:

        试试这个:

        mysqldump -h hostname -u thomas -p -x dbname >  xxx_2015_03_25.sql
        

        【讨论】:

        • 需要提供更多信息来解决查询,只是转储并不能解决问题。
        • 这个答案不支持这个问题。
        • 这个答案离题了
        猜你喜欢
        • 2021-06-28
        • 1970-01-01
        • 1970-01-01
        • 2014-07-07
        • 1970-01-01
        • 1970-01-01
        • 2020-09-09
        • 2016-08-18
        • 1970-01-01
        相关资源
        最近更新 更多