Автоматичне резервне копіювання на php
Відео: Як створити резервну копію бази даних в MySQL
Відео: Налаштування резервного копіювання в програмі 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 годині ночі. Тоді якщо щось з Вашим сайтом трапиться, архів завжди можна буде викачати з сервера і відновити сайт з резервної копії.
- Sms backup & restore
- Mcbackup
- Appmonster v5 pro
- Ease backup pro
- App backup and restore
- Helium
- Див backup
- Програми резервного копіювання linux
- Acronis true image резервне копіювання і відновлення windows
- Огляд easeus todo backup - резервне копіювання і відновлення даних
- Синій екран смерті 0x0000003f
- Titanium backup резервне копіювання - інструкція
- Резервне копіювання важливих даних
- Резервне копіювання за методом євгенія попова
- Автоматизуємо бекап бази 1c 7.7 на sql 2005
- Резервне копіювання на андроїд і відновлення даних на android
- Резервне копіювання ubuntu
- Sony пропонує карти sdhc з можливістю резервного копіювання
- Winrar: настройка автоматичного резервного копіювання
- Super backup: cmc і контакти
- Резервна копія iphone