Автоматичне резервне копіювання на php

Відео: Як створити резервну копію бази даних в MySQL

Автоматичне резервне копіювання на PHP

Відео: Налаштування резервного копіювання в програмі 1С: Бухгалтерія 3.0

Резервне копіювання - річ вкрай важлива, яку потрібно робити щодня, а то й частіше. Не буду пояснювати, навіщо це потрібно, це повинно бути і так зрозуміло. Питання тільки в тому, як цей процес автоматизувати, щоб кожен день не витрачати на це час. У підсумку, я почав шукати скрипт автоматичного резервного копіювання на PHP. Але, на жаль, нічого доброго не попалося. Траплялися тільки величезні програми з 1000 кнопками.




Але ж які завдання у резервного копіювання? Просто зберігати в архів всі файли і папки сайту, а також робити дамп бази даних, які так само додати в архів. Для створення такої функціональності 1000 кнопок не буде потрібно, тому я вирішив написати свій скрипт автоматичного резервного копіювання на PHP. Повний код даного скрипта наведений нижче:

Відео: Що таке резервне копіювання (бекап)? Де зберігати резервні копії файлів?

lt ;?php
set_time_limit
(0) -// Прибираємо обмеження на максимальний час роботи скрипта
/ * Масив з іменами баз даних (ім`я бази даних можна подивитися в phpMyAdmin) * /
$ db_names
= array() -
$ db_names
[]="Db1"-
$ db_names
[]="Db2"-

/ * Масив з іменами директорій, в яких лежать всі файли сайту * /
/ * ВАЖЛИВО: Всі шляхи повинні бути фізичними і йти від кореня сервера. Точний фізичний шлях можна подивитися через phpinfo () * /
$ source_dirs
= array() -
$ source_dirs
[]="/home/mysite1.ru"-
$ source_dirs
[]="/home/mysite2.ru"-

$ offset_dirs
= strlen("/ Home /") -// Службова змінна, що служить для усунення зайвих папок в архіві

/ * Параметри підключення до бази даних * /
$ host
="Localhost"-
$ user
="Root"-
$ password
=""-

$ dump_dir
="/ Home / backup"-// Директорія, куди будуть поміщатися архіви
$ delay_delete
=35*24*3600-// Час в секундах, через яке архіви будуть видалятися
$ filezip
="Backup_".date("Y-m-d").".zip"-// Ім`я архіву

deleteOldArchive
() -// Видаляємо все старі архіви

if(file_exists($ dump_dir."/".$ filezip))exit-// Якщо архів з таким ім`ям вже є, то закінчуємо скрипт

$ db_files
= array() -// Масив, куди будуть поміщатися файли з дампом баз даних

for($ i =0- $ i lt; count($ db_names) - $ i++){
$ filename
= $ db_names[$ i].".sql"-// Файл з дампом бази даних
$ db_files
[]= $ dump_dir."/".$ filename-// Розміщуємо файл в масив
$ fp
= fopen($ dump_dir."/".$ filename,"A") -// Відкриваємо файл
$ db
=new mysqli($ host, $ user, $ password, $ db_names[$ i]) -// Єднаймося з базою даних
$ db
-gt;query("SET NAMES `utf-8`") -// Встановлюємо кодування з`єднання
$ result_set
= $ db-gt;query("SHOW TABLES") -// запрошувати всі таблиці з бази
while(($ table = $ result_set-gt;fetch_assoc())!=false){
/ * Перебір всіх таблиць в базі даних * /
$ table
= array_values($ table) -
if($ fp){
$ result_set_table
= $ db-gt;query("SHOW CREATE TABLE` ".$ table[0]."` ") -// Отримуємо запит на створення таблиці
$ query
= $ result_set_table-gt;fetch_assoc() -
$ query
= array_values($ query) -
fwrite
($ fp," N".$ query[1]."- n") -// Додаємо результат в файл
$ rows
="SELECT * FROM` ".$ table[0]."` "-
$ result_set_rows
= $ db-gt;query($ rows) -// Отримуємо список всіх записів в таблиці
while(($ row = $ result_set_rows-gt;fetch_assoc())!=false){
$ query
=""-
/ * Шляхом перебору всіх записів додаємо запити на їх створення в файл * /
foreach($ row as $ field){
if(is_null($ field)) $ field ="NULL"-
else $ field =" `".$ db-gt;real_escape_string($ field)." `"-// екрануючи значення
if($ query =="") $ query = $ field-
else $ query .=",".$ field-
}
$ query
="INSERT INTO` ".$ table[0]."` VALUES ( ".$ query.") ;"-
fwrite
($ fp, $ query) -
}
}
}
fclose
($ fp) -// Закриваємо файл
$ db
-gt;close() -// Закриваємо з`єднання з базою даних і переходимо до наступної
}

$ zip
=newZipArchive() -// Створюємо об`єкт класу ZipArchive
$ allfiles
= array() -// Масив зі списком всіх файлів, які будуть поміщені в архів
if($ zip-gt;open($ dump_dir."/".$ filezip,ZipArchive::CREATE)===true){
for($ i =0- $ i lt; count($ source_dirs) - $ i++){
/ * Рекурсивний перебір всіх директорій * /
if(is_dir($ source_dirs[$ i])) recoursiveDir($ source_dirs[$ i]) -
else $ allfiles[]= $ source_dirs[$ i] -// Додаємо файл в підсумковий масив
foreach($ allfiles as $ val) {
/ * Додаємо в ZIP-архів всі отримані файли * /
$ local
= substr($ val, $ offset_dirs) -
$ zip
-gt;addFile($ val, $ local) -
}
}
/ * Додаємо в ZIP-архів все дампи баз даних * /
for($ i =0- $ i lt; count($ db_files) - $ i++){
$ local
= substr($ db_files[$ i], strlen($ dump_dir)+1) -
$ zip
-gt;addFile($ db_files[$ i], $ local) -
}
$ zip
-gt;close() -
}

for($ i =0- $ i lt; count($ db_files) - $ i++) unlink($ db_files[$ i]) -// Очищаємо масив db_files

/ * Функція для рекурсивного перебору і збереження всіх файлів і папок в масив, який потім повертається * /
function recoursiveDir($ dir) {
global $ allfiles-
if($ files = glob($ dir."/{,.}*", GLOB_BRACE)){
foreach($ files as $ file)
$ b_name
= basename($ file) -
if(($ b_name ==".")
}
}

/ * Функція для видалення всіх старих архівів * /
function deleteOldArchive(){
global $ dump_dir-
global $ delay_delete-
$ ts
= time() -
$ files
= glob($ dump_dir."/*.zip") -
foreach($ files as $ file)
if($ ts - filemtime($ file)gt; $ delay_delete) unlink($ file) -
}
?gt;



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

Поділися в соціальних мережах:

Схожі
Огляд easeus todo backup - резервне копіювання і відновлення данихОгляд easeus todo backup - резервне копіювання і відновлення даних
Резервне копіювання за методом євгенія поповаРезервне копіювання за методом євгенія попова
Програми резервного копіювання linuxПрограми резервного копіювання linux
HeliumHelium
Автоматизуємо бекап бази 1c 7.7 на sql 2005Автоматизуємо бекап бази 1c 7.7 на sql 2005
Резервне копіювання на андроїд і відновлення даних на androidРезервне копіювання на андроїд і відновлення даних на android
Ease backup proEase backup pro
Sony пропонує карти sdhc з можливістю резервного копіюванняSony пропонує карти sdhc з можливістю резервного копіювання
Резервне копіювання mysql бази данихРезервне копіювання mysql бази даних
Синій екран смерті 0x0000003fСиній екран смерті 0x0000003f
» » Автоматичне резервне копіювання на php