Какую командную строку я могу использовать для резервного копирования базы данных MySql каждую неделю в имя файла с датой (чтобы оно не противоречило предыдущим резервным копиям)?

Кроме того, является ли это разумной стратегией резервного копирования? Моя база данных относительно небольшая (полный экспорт сейчас составляет всего 3,2 мегабайта). Уровень оттока относительно низкий. Мне нужно вернуть полную БД, если что-то пойдет не так. И было бы очень круто, если бы я мог видеть изменения, происходящие за определенный промежуток времени.

3
KevinM 1 Июн 2010 в 03:15

3 ответа

Лучший ответ

Еженедельное резервное копирование с помощью cron и mysqldump:

Благодарим @timdev answer (+1) за предоставление командной строки.

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

* * * * * = [minute] [hour] [day of month] [month] [day of week]

Однако, поскольку вам нужно еженедельное резервное копирование, вы можете указать дни, в которые будет выполняться резервное копирование, при третьем запуске (день месяца), чтобы смоделировать недельный интервал.

0 4 1,8,15,21,28 * * DATE=`date +%y-%m-%d`; mysqldump -u <dbuser> -p<dbpasswd> <dbname> | gzip > dbname-$DATE.sql.gz

Это будет запускаться в 4:00 утра 1, 8, 15, 21 и 28 числа каждого месяца.

1
bakkal 1 Июн 2010 в 03:56
+1 за исправление моего ответа. Не знаю, почему я подумал, что он просит ежемесячно, когда в теме вопроса стоит «еженедельно» ...
 – 
timdev
1 Июн 2010 в 04:26
3
Похоже, что 0 0 * * 0 - лучший синтаксис, чтобы это было действительно еженедельно.
 – 
KevinM
1 Июн 2010 в 04:30
Да, 0 для дня недели означает, что резервное копирование будет выполняться каждое воскресенье в полночь с использованием этой строки cron
 – 
yincrash
1 Сен 2011 в 08:20

Вы можете попробовать что-то вроде этого:

0 4 1 * * DATE=`date +%y-%m-%d`; mysqldump -u <dbuser> -p<dbpasswd> <dbname> | gzip > dbname-$DATE.sql.gz

Которая будет выгружать вашу базу данных (и архивировать ее) первого числа каждого месяца в 4:00 утра.

2
timdev 1 Июн 2010 в 03:39

Вы можете попробовать репликацию MySQL

Репликация позволяет реплицировать данные с одного сервера базы данных MySQL (главного) на один или несколько серверов баз данных MySQL (подчиненные). Репликация является асинхронной - ведомые устройства не должны быть постоянно подключены для получения обновлений от ведущего устройства. Это означает, что обновления могут происходить по междугородним соединениям и даже по временным или прерывистым соединениям, таким как служба удаленного доступа.

Таким образом, если что-то пойдет не так с вашей первичной базой данных (главной), подчиненное устройство может служить готовой заменой.

0
bakkal 1 Июн 2010 в 03:20
Меня сейчас не волнует, что сама база данных не работает. Меня беспокоит потеря данных или непреднамеренное редактирование пользователями.
 – 
KevinM
1 Июн 2010 в 03:27
Полностью согласен. Это была моя нестандартная идея: «Мне нужно иметь возможность получить полную БД, если что-то пойдет не так». Я думаю, что репликация делает это быстро.
 – 
bakkal
1 Июн 2010 в 03:28