Hi!请登陆

mysqldump锁表出错及解决方法 when using LOCK TABLES

2020-11-12 50 11/12

问题

一般使用 mysqldump 命令即可,但从生产环境直接导出表有报错,如下:

mysqldump: Got error: 1044: Access denied for user ‘xxx’@’xxx’ to database ‘xxx’ when using LOCK TABLES

分析

从以下报错可以判断 mysqldump 使用的用户没锁表权限。
登录到 mysql 下可以确认。

*************************** 8. row ***************************
                  Host: 127.0.0.1
                  User: xxx
              Password: *xxx
           Select_priv: Y
           Insert_priv: Y
           Update_priv: Y
           Delete_priv: Y
           Create_priv: Y
             Drop_priv: Y
           Reload_priv: Y
         Shutdown_priv: N
          Process_priv: N
             File_priv: N
            Grant_priv: Y
       References_priv: N
            Index_priv: Y
            Alter_priv: Y
          Show_db_priv: N
            Super_priv: Y
 Create_tmp_table_priv: N
      Lock_tables_priv: N
          Execute_priv: Y
       Repl_slave_priv: N
      Repl_client_priv: N
      Create_view_priv: Y
        Show_view_priv: Y
   Create_routine_priv: Y
    Alter_routine_priv: Y
      Create_user_priv: Y
            Event_priv: N
          Trigger_priv: Y
Create_tablespace_priv: N
              ssl_type:
14 rows in set (0.00 sec)

解决方法

授予用户锁表权限即可。

网上有人说使用 –skip-lock-tables,这个会影响数据的一致性(可能比丢数据还要遭糕),故不推荐使用这个方法。 –single-transaction 用于 Innodb 引擎的数据库 dump 时,可以不锁表。

相关推荐