Skip to main content

Скрипт резервного копіювання баз Mysql в локальну папку



Вирішив повністю відмовитися від використання ispmanager, бо ресурси займає, а використовується тільки для одного - резервного копіювання даних. Але раз це можна зробити власноруч, то тримати панель на сервері для десяти сайтів взагалі немає сенсу.

А тому найпершим завданням стає створення резервних копій баз даних mysql. Бази невеликі за розміром, тому буде використовуватися найпростіший варіант бекапов - створення архівів і розміщення їх в певній папці сервера.



Звичайно, куди надійніше було б відправляти бекап по sftp куди-небудь на інший сервер в іншому дата-центрі (і країні, чого вже там), але оскільки мої сайти змінюються пару раз на місяць, то скачування бекапів раз в два дні не можна назвати важким заняттям. :)

Досвіду в написанні скриптів на Bash у мене не було до цього моменту. Але розібратися не склало труднощів, з огляду на численні приклади скриптів резервного копіювання mysql на різних сайтах про адміністрування серверів.



Сам скрипт mysqlbackup.sh:

  #! / Bin / bash
 # Ініціалізувавши змінні

 TMPDIR = "sqlfiles"
 BACKUPDIR = "/ storage"
 USER = "root"
 PASS = "xxx"
 TIMEY = $ (date +% Y-% m-% d)

 # Перевіряємо наявність папки для бекапів

 if [!  -d "$ BACKUPDIR"];  then
   mkdir -m 0700 "$ BACKUPDIR"
 fi

 # Перевіряємо наявність тимчасового каталогу

 if [!  -d "$ BACKUPDIR / $ TMPDIR"];  then
   mkdir -m 0700 "$ BACKUPDIR / $ TMPDIR"
 fi

 # Зберігаємо копії

 cd "$ BACKUPDIR / $ TMPDIR"
 for database in `mysql -s -r -e 'SHOW DATABASES' |  grep -v Database |  grep -v information_schema |  grep -v performance_schema |  grep -v mysql`;
 do mysqldump $ database> $ database.sql; done

 # Створюємо архів

 cd "$ BACKUPDIR"
 tar -cjf databases - "$ TIMEY" .tbz2 "$ TMPDIR"
 chmod 0600 databases - "$ TIMEY" .tbz2

 # Видаляємо тимчасову папку

 rm -r $ TMPDIR
 echo "Бази даних збережені!"
 exit 1 

Робота з mysql виконується безпосередньо від користувача root, так як він має доступ відразу до всіх баз даних.

З резервної копії виключаються бази даних information_schema, mysql, performance_schema. Потім всі бази поміщаються в bzip2-архів і складуються в певну папку, звідки їх потім можна скачати.



У планувальнику Cron прописується завдання на виконання скрипта раз на добу, наприклад, о першій годині ночі.

  00 01 * * * sh ~ / mysqlbackup.sh 

Якщо в налаштуваннях крона заданий вірний email, то на пошту прийде звіт, в якому будуть перераховані збережені бази даних.

PS Також можна створювати резервні копії та кілька разів в день. Для цього потрібно в імені архіву вказувати ще й час створення, щоб файл не перезаписувати.



Як ви оціните статтю?
Звёзд: 1Звёзд: 2Звёзд: 3Звёзд: 4Звёзд: 5 (Поки оцінок немає)
Завантаження ...

” 4 Коментарі "Скрипт резервного копіювання баз Mysql в локальну папку"

    1. Вірно, упущений момент. Але лише тому, що у себе використовую файл .my.cnf в домашній папці root. Там прописаний логін і пароль в такому форматі:

        [Client]
       user = root
       password = 12345qwerty 

      Треба було додати це в пост раніше. :)

Додати коментар

Ваш e-mail не буде опублікований.