24 вересня, Неділя, 2023
A- A A+

mysql automatic backup scriptРезервні копії дуже корисні для відновлення даних після будь-яких збоїв або пошкоджень.

Я використовую простий сценарій для резервного копіювання бази даних із сервера 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