mysqldump: укажите имя базы данных для каждого пользователя в ~ / .my.cnf

490
chr0mag

Я использую общий сервер с несколькими пользователями. Каждый пользователь имеет свою собственную базу данных в MySQL и соответствующие учетные данные. Я создал шаблон systemd timer & service (т.е. sitetasks @ .timer & sitetasks @ .service ) для ежедневного запуска mysqldump для резервного копирования базы данных каждого пользователя. Информация о пользователе читается mysqldump из файла .my.cnf в домашнем каталоге каждого пользователя.

Затем я могу запустить системный таймер / службу для конкретного пользователя (например, sitetasks@user1.service ), чтобы создать резервную копию базы данных этого пользователя.

Тем не менее, я не могу найти способ указать имя базы данных в .my.cnf . Я посмотрел на параметр --databases, но это просто флаг, а не способ указать базу данных или набор баз данных.

Я могу придумать несколько способов решить это по-разному:

  1. создать пользовательский системный таймер / сервис - но это не очень хорошо масштабируется
  2. поместите файл .db-name в домашний каталог пользователей и прочитайте его при вызове mysqldump (что-то вроде mysqldump $ (cat .db-name)> backup.sql) - но теперь мне нужен дополнительный файл
  3. похож на # 2, но анализирует wp-config.php каждого пользователя (базы данных для Wordpress)
  4. убедитесь, что имя базы данных всегда совпадает с именем пользователя

Однако ни один из них не является настолько масштабируемым и переносимым, как возможность использования существующего файла параметров MySQL .my.cnf .

Есть ли способ указать имя базы данных по умолчанию в .my.cnf ?

1

1 ответ на вопрос

1
Jarek Jóźwik

У каждого пользователя есть доступ к базе данных, к которой ему были предоставлены права доступа, поэтому, если вы дали mysqldumpуказание сбросить все базы данных: --all-databasesрезервная копия была бы создана только для базы данных этого пользователя и, конечно, все общие базы данных, к которым он имеет доступ. Обычно это information_schemaтолько. Фактически это не делает размер дампа намного большим - никакая информация из этой схемы не сбрасывается - потому что там есть динамическая информация.
Таким образом, обеспечивая привилегии для каждого пользователя - у вас есть простое решение для резервного копирования баз данных этих пользователей, просто выгрузив «все базы данных».

Интересно. Я предполагал, что mysqldump выдаст ошибку без прав на все базы данных. Похоже, что в дампе, использующем --all-database, отсутствуют директивы CREATE TABLE и USE, которые полезны при восстановлении, но я думаю, я могу заставить его включить их с некоторыми дополнительными переключателями? chr0mag 6 лет назад 0
Исправление: --all-database содержит директивы CREATE TABLE & USE. Передайте --no-create-db, чтобы опустить CREATE TABLE. chr0mag 6 лет назад 1