Резервні копії дуже корисні для відновлення даних після будь-яких збоїв або пошкоджень.
Я використовую простий сценарій для резервного копіювання бази даних із сервера MySQL.
Будучи системним адміністратором, я рекомендую зберігати віддалену копію кожного резервного копіювання.
Використаєм два варіанти резервування БД
1. Створення резервної копії в архів на локальному сервері
2. Створення резервної копії на віддалений FTP сервер
Я використовую такий скрипт: /home/backup_mysql.sh
#!/bin/bash export PATH=/bin:/usr/bin:/usr/local/bin TODAY=`date +"%d%b%Y"` DB_BACKUP_PATH='/home/ext/backups_mysql/' MYSQL_HOST='localhost' MYSQL_PORT='3306' MYSQL_USER='pcuser' MYSQL_PASSWORD='mypass' DATABASE_NAME='pc_db' BACKUP_RETAIN_DAYS=15 ## Кількість днів зберігання локальної резервної копії ################################################################# mkdir -p ${DB_BACKUP_PATH}/${TODAY} echo "Backup started for database - ${DATABASE_NAME}"
mysqldump -h ${MYSQL_HOST} \ -P ${MYSQL_PORT} \ -u ${MYSQL_USER} \ -p${MYSQL_PASSWORD} \ ${DATABASE_NAME} | gzip > ${DB_BACKUP_PATH}/${TODAY}/${DATABASE_NAME}-${TODAY}.sql.gz if [ $? -eq 0 ]; then echo "Database backup successfully completed" else echo "Error found during backup" exit 1 fi ##### Видалення старих копій після {BACKUP_RETAIN_DAYS} днів ##### DBDELDATE=`date +"%d%b%Y" --date="${BACKUP_RETAIN_DAYS} days ago"` if [ ! -z ${DB_BACKUP_PATH} ]; then cd ${DB_BACKUP_PATH} if [ ! -z ${DBDELDATE} ] && [ -d ${DBDELDATE} ]; then rm -rf ${DBDELDATE} fi fi ### End of script ####
даєм файлу можливість виконуватись chmod + x /home/backup_mysql.sh
добавляю в планувальник crontab -e
0 2 */3 * * /home/backup_mysql.sh
Запускати кожен третій день в 0 хв 2 год
# Example of job definition:
# .---------------- Хвилини (0 - 59)
# | .------------- Години (0 - 23)
# | | .---------- День у місяці (1 - 31)
# | | | .------- Місяць (1 - 12) або jan,feb,mar,apr ...
# | | | | .---- День тижня (0 - 6) (Неділя=0 or 7) або sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * користувач команда для запуску
Створення резервної копії на віддалений FTP сервер
#!/bin/bash ###################################################### DATE=`date +%d%b%y` LOCAL_BACKUP_DIR="/backup/" DB_NAME="test" DB_USER="root" DB_PASSWORD="your password" FTP_SERVER="ftp.pc-service.cv.ua" FTP_USERNAME="ftp user name" FTP_PASSWORD="ftp user password" FTP_UPLOAD_DIR="/backup/" LOG_FILE=/backup/backup-DATE.log ############### Local Backup ######################## mysqldump -u $DB_USER -p$DB_PASSWORD $DB_NAME | gzip > $LOCAL_BACKUP_DIR/$DB_NAME-$DATE.sql.gz ############### UPLOAD to FTP Server ################ ftp -n $FTP_SERVER << EndFTP user "$FTP_USERNAME" "$FTP_PASSWORD" binary hash cd $FTP_UPLOAD_DIR #pwd lcd $LOCAL_BACKUP_DIR put "$DB_NAME-$DATE.sql.gz" bye EndFTP if test $? = 0 then echo "Database Successfully Uploaded to Ftp Server File Name $DB_NAME-$DATE.sql.gz " > $LOG_FILE else echo "Error in database Upload to Ftp Server" > $LOG_FILE fi
Деталі налаштування - відредагуйте наведений вище сценарій для наведеної нижче змінної відповідно до вашого системного середовища. Розмістіть усі значення правильно, щоб сценарій працював належним чином.
LOCAL_BACKUP_DIR => Локальний шлях напряму для зберігання резервної копії
DB_NAME => назва бази даних
DB_USER => ім'я користувача адміністратора бази даних
DB_PASSWORD => пароль адміністратора бази даних
FTP_SERVER => ip сервера ftp для імені хосту
FTP_USERNAME => ім'я користувача ftp
FTP_PASSWORD => пароль ftp
FTP_UPLOAD_DIR => шлях резервної копії сервера ftp
LOG_FILE => ім'я та розташування файлу журналу
Сподіваюсь, цей сценарій допоможе вам зробити резервну копію бази даних через FTP-сервер
Кому лінь використовувати скрипти є готове рішення по вигрузці бекапів mysqlbackupftp