cronjob для автоматичного резервного копіювання БД на попередньо встановлений файл


12

Я використовую найновіший Linux Mint. Мені було цікаво, чи можливо створити спеціальну cronjob для резервного копіювання бази даних.

У моєму /etc/cronjobфайлі є такий код:

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh

В моєму /home/users/backup.sh:

mysqldump -uroot -p MyDatabase > /home/users/backup_MyDB/full_myDB.sql

Замість цього full_myDB.sqlя хотів би мати щось на зразок, 2014-04-04_full_myDB.sqlде дата додається динамічно залежно від дати, яку ми маємо.

Якщо файл резервного копіювання SQL старше одного тижня, я б хотів, щоб cronjob видалив його автоматично.

Відповіді:


15

З GNU date(за замовчуванням у Linux Mint) ви можете:

mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql

Щоб видалити файли старше 1 тижня:

find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +

Хоча, як правило, розумно бачити, що ви видаляєте, перш ніж видаляти (принаймні, під час тестування сценарію), для цього просто зробіть:

find /home/users/backup_MyDB -type f -mtime +7

Я готував відповідь, але ти побив мене: Р
Рамеш,

2
@Ramesh, радий, що я переміг когось іншого для зміни - зазвичай я публікую повідомлення, а хтось уже має подібну відповідь.
Graeme

Дуже хороша. Єдине, що я змінюю для свого використання, - це введення даних про db у файл .my.cnf.
Йоганн Дайк

4

Я використав вищевказану інформацію і хотів надати ще одне незначне оновлення, яке фактично скорочує одну із дійсно великих таблиць, що сповільнювало наші резервні копії.

Сподіваємось, це допомагає комусь іншому.

Використовуючи вищевказану інформацію, я створив базовий скрипт оболонки під назвою mysqlbackup.sh із наступним вмістом:

#!/bin/sh
find /data/var/backups/mysql/dumps -type f -mtime +3 -exec rm {} +
mysql -e "truncate table sitename_prod.cache_table"
mysqldump sitename_prod > /data/var/backups/mysql/dumps/$(date +%F)_full_sitename_prod.sql

Обов’язково запускайте: chmod + x mysqlbackup.sh

Я також помістив це у свій crontab -e:

# MYSQL Dump and retention for 3 days
30 22 * * * bash /root/bin/mysqldump.sh > /dev/null 2>&1

3

Я знаю, що це велика стара, але я використав вищевказані відповіді та додав інструкцію щодо стиснення файлів. Сподіваємось, хтось інший вважає це корисним.

1) Дослідивши трохи, 7-блискавка здається найкращим компресором там. Якщо ваш дистрибутив Linux підтримує це, ви можете скористатись інструментом установки:

sudo apt-get install p7zip-full

Крім того, ви можете використовувати tar.gz, якщо вам зручніше.

2) Потім ви створюєте сценарій, наприклад /home/users/backup.sh із вмістом:

#!/bin/sh
find /home/users/backup_MyDB -type f -mtime +7 -exec rm {} +
mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +%F)_full_myDB.sql
7z a /home/users/backup_MyDB/$(date +%F)_full_myDB.7z /home/users/backup_MyDB/*.sql
rm -f /home/users/backup_MyDB/*.sql

Цей скрипт знайде файли з більш ніж 7 днями та видалить їх, тоді він зробить sql-дамп, потім він буде 7-zip усі .sql файли в каталозі, потім видалить усі .sql в каталозі ( BTW, ви можете додатково додати команду mysql перед дамп, як зазначено в попередній відповіді, якщо вона потрібна)

3) Ми робимо chmod +x /home/users/backup.shтак, що це може бути виконаним.

3.1) Ви повинні перевірити свій сценарій, якщо він працює за призначенням

4) Запрограмуємо завдання за допомогою crontab -e

# Minute   Hour   Day of Month       Month          Day of Week        Command    
# (0-59)  (0-23)     (1-31)    (1-12 or Jan-Dec)  (0-6 or Sun-Sat)                
30        4          *            *                1-6            /home/users/backup.sh >> /dev/null 2>&1

І це все. Він буде робити резервну копію вашої бази даних MySQL кожен день в тиждень о 4:30 ранку (крім неділі) та стискати резервну копію


1

Щоб додати відповідь до @ Graeme, можливо, варто зауважити, що іноді вам може знадобитися уникнути символу '%' у роботі cron, щоб він виглядав так:

 mysqldump -uroot -p MyDatabase >/home/users/backup_MyDB/$(date +\%F)_full_myDB.sql
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.