Ошибка: mysqldump: 1044 Access denied when using LOCK TABLES

В данной статье пойдет речь об ошибке 1044 Access denied when using LOCK TABLES, которую вы можете получить при попытке создать резервную копию с помощью утилиты mysqldump.


Описание

Полностью текст ошибки выглядит следующим образом:

mysqldump: Got error: 1044: Access denied for user 'user'@'localhost' to database 'database_name' when using LOCK TABLES

Как видно из текста ошибки, проблема заключается в том, что пользователь, под которым вы пытаетесь сделать резервную копию, не обладает правами на "LOCK TABLES". Вот что говорит мануал, по этому поводу:

mysqldump requires at least the SELECT privilege for dumped tables, SHOW VIEW for dumped views, TRIGGER for dumped triggers, and LOCK TABLES if the --single-transaction option is not used. Certain options might require other privileges as noted in the option descriptions.
For each dumped database, lock all tables to be dumped before dumping them. The tables are locked with READ LOCAL to permit concurrent inserts in the case of MyISAM tables. For transactional tables such as InnoDB, --single-transaction is a much better option than --lock-tables because it does not need to lock the tables at all.
Because --lock-tables locks tables for each database separately, this option does not guarantee that the tables in the dump file are logically consistent between databases. Tables in different databases may be dumped in completely different states.

Исправляем ошибку

Как видно из описания, решить данную проблему можно как минимум двумя разными способами.

Способ (быстрый)

Достаточно добавить к mysqldump аргумент --single-transaction, т.е. целиком команда для создания резервной копии будет выглядеть примерно так:

mysqldump -u user -p --single-transaction database_name > database_backup.sql

Способ (чуть дольше)

Необходимо просто выдать тому пользователю (в нашем примере "user"), под которым мы пытаемся создать резервную копию права на "LOCK TABLES" на ту базу(-ы), резервную копию которой(-ых), мы пытаемся создать. Для этого, необходимо подключиться под учетной записью root к MySQL серверу и выдать нужные права. Делается это следующим образом:
1) Подключаемся к MySQL серверу под учетной записью root

mysql -u root -p

2) Выдаем нужные права для пользователя, под которым мы пытаемся сделать резервную копию

GRANT LOCK TABLES ON database_name.* TO 'user'@'localhost';

database_name - название базы данных, резервную копию которой вы пытаетесь сделать, необходимо поменять на то, которое подходит для вашего случая.
user - имя пользователя под которым вы пытаетесь сделать резервную копию, необходимо поменять на то, которое подходит для вашего случая.
3) Отключаемся

exit;


Добавить комментарий

Ваш e-mail не будет опубликован.

Напоминаем Вам, что Ваше сообщение будет опубликовано только после проверки администратором сайта. Обычно это занимает 1-2 рабочих дня.