问题
一般使用 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 时,可以不锁表。
如若转载,请注明出处:https://www.ozabc.com/jianzhan/79466.html