Php and backup mysql

How to Backup MySQL Database using PHP

Dynamically creating database backup via program will be hand in many a situations. We can schedule the backup process periodically by using CRON jobs.

Taking the database backup using PHP programming is easy. In this tutorial, we are going to learn how to backup MySQL database with a simple core PHP code.

First, I get the database connection object to get the table schema and data to be dumped into a file. I read all the table names from the database and store into an array.

Then, I iterate the array of database tables to prepare the SQL script for the data/structure. This SQL script will be written into a file which will be downloaded to the user’s browser and removed from the target.

Getting Database Table Names

The code shows how to get the database connection and set the default character set before executing queries. Since we are dumping the database structure and the data, we need to be careful about the consistency.

By setting the default character set, it tells the database server about the character encoding.

data-backup

The SHOW TABLES statement is used to fetch the table names. The table names are stored in an array which will be iterated to prepare the backup SQL script for the database structure and the data.

set_charset("utf8"); // Get All Table Names From the Database $tables = array(); $sql = "SHOW TABLES"; $result = mysqli_query($conn, $sql); while ($row = mysqli_fetch_row($result)) < $tables[] = $row[0]; >?> 

Create SQL Script for Table Data/Structure

After fetching the list of the database table name in an array, I loop through this array to generate the SQL script. For each loop iteration, I have generated the SQL script for creating the table structure and dumping data into the table.

The SHOW CREATE TABLE statement is used to get the SQL for creating a table structure. Then, I get the column name and data to prepare the SQL for dumping data.

 else < $sqlScript .= '""'; >if ($j < ($columnCount - 1)) < $sqlScript .= ','; >> $sqlScript .= ");\n"; > > $sqlScript .= "\n"; > ?> 

Save and Download Database Backup File

After preparing the SQL script for the database table and the structure, it will be written into a backup file which is created dynamically in the specified target.

Then, this file will be downloaded to the user’s browser and removed from the target location. The code for saving and downloading the database backup file is,

Источник

Простой бэкап сайта средствами PHP

В этой статье я попытаюсь разъяснить создание простого скрипта для полного бэкапа сайта (файлы + база данных MySQL) средствами PHP, который будет отправлять отчет на почту и удалять старые архивы.

Для начала нужен FTP доступ к файловой системе, где расположен сайт. Предположим, что сайт у нас находится по адресу /home/my_site/www. Создаем папку backup в my_site:

И конечно же, сам файл backup.php:

touch /home/my_site/www/backup.php 

Открываем backup.php любым редактором и создаем переменные:

$backup_folder = '/home/my_site/backup'; // куда будут сохранятся файлы $backup_name = 'my_site_backup_' . date("Y-m-d"); // имя архива $dir = '/home/my_site/www'; // что бэкапим $delay_delete = 30 * 24 * 3600; // время жизни архива (в секундах) $db_host = 'example.com'; $db_user = 'root'; $db_password = 'password'; $db_name = 'database'; $mail_to = 'my_email@example.com'; $mail_subject = 'Site backup'; $mail_message = ''; $mail_headers = 'MIME-Version: 1.0' . "\r\n"; $mail_headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; $mail_headers .= 'To: me ' . "\r\n"; $mail_headers .= 'From: my_site ' . "\r\n"; 

Пишем функцию для бэкапа файлов:

function backupFiles($backup_folder, $backup_name, $dir) < $fullFileName = $backup_folder . '/' . $backup_name . '.tar.gz'; shell_exec("tar -cvf " . $fullFileName . " " . $dir . "/* "); return $fullFileName; >
function backupDB($backup_folder, $backup_name) < $fullFileName = $backup_folder . '/' . $backup_name . '.sql'; $command = 'mysqldump -h' . $db_host . ' -u' . $db_user . ' -p' . $db_password . ' ' . $db_name . ' >' . $fullFileName; shell_exec($command); return $fullFileName; > 

И для удаления старых архивов:

function deleteOldArchives($backup_folder, $delay_delete) < $this_time = time(); $files = glob($backup_folder . "/*.tar.gz*"); $deleted = array(); foreach ($files as $file) < if ($this_time - filemtime($file) >$delay_delete) < array_push($deleted, $file); unlink($file); >> return $deleted; > 

В общем все, осталось выполнить данные функции и отправить письмо:

$start = microtime(true); // запускаем таймер $deleteOld = deleteOldArchives($backup_folder, $delay_delete); // удаляем старые архивы $doBackupFiles = backupFiles($backup_folder, $backup_name, $dir); // делаем бэкап файлов $doBackupDB = backupDB($backup_folder, $backup_name); // и базы данных // добавляем в письмо отчеты if ($doBackupFiles) < $mail_message .= 'site backuped successfully
'; $mail_message .= 'Files: ' . $doBackupFiles . '
'; > if ($doBackupDB) < $mail_message .= 'DB: ' . $doBackupDB . '
'; > if ($deleteOld) < foreach ($deleteOld as $val) < $mail_message .= 'File deleted: ' . $val . '
'; > > $time = microtime(true) - $start; // считаем время, потраченое на выполнение скрипта $mail_message .= 'script time: ' . $time . '
'; mail($mail_to, $mail_subject, $mail_message, $mail_headers); // и отправляем письмо

Источник

Элементарные PHP скрипты для резервного копирования данных

В ответ недавнему топику о бэкапах на Bash. Топик полезный, без сомнений, однако я хочу продемонстрировать более гибкий способ…
Основной недостаток приведенного способа в топике выше — ненадобность. Ну честно, кому надо бэкапить файлы и базу одновременно? Т.е. бэкапить каждый день и файлы и базу — глупо, но и делать раз в месяц это глупо. Поэтому мой пример я разбил на 2 части. Отдельно делаем бэкап базы ежедневно и отдельно делаем бэкап файлов раз в неделю.
Соответственно, нам понадобится php на сервере. Что в наше время уже не роскошь, а банальщина.
Итак, для себя я решил, что локально бэкапы хранятся в /usr/backup/
Создаем php скрипт /usr/backup/backup_db:

#!/usr/local/bin/php
$exс=array(‘information_schema’, ‘mysql’);
$db_pass=’password’;
$db_user=’root’;

system(‘mkdir -p /usr/backup/mysql/’.date(‘d.m.Y’).’/’);
$db=mysql_connect(«localhost», $db_user, $db_pass);
$sql=mysql_query(«SHOW DATABASES»);
while($a=mysql_fetch_assoc($sql)) $base=$a[‘Database’];
if(!in_array($base, $exс)) exec(‘/usr/local/bin/mysqldump -u’.$db_user.’ -p’.$db_pass.’ —opt ‘.$base.’ | /usr/bin/gzip > /usr/backup/mysql/’.date(‘d.m.Y’).’/’.$base.’.gz’);
>
>

Как видим, все просто и примитивно. Отмечу, что $exс — массив с исключениями. Сюда добавляем базы, которые не хотим бэкапить каждый день. Остальные базы, что видет пользователь $db_user, мы бэкапим, причем каждую отдельно и кладем их в директорию /usr/backup/mysql/дата/база.gz
Это намного удобней, чем создавать под каждый проект отдельный файл бэкапов. Например, у меня 2 сервера и на каждом 10+ проектов. Не так и много, но кол-во постоянно обновляется. Кто-то ушел, кто-то пришел, появился новый сервер итп. Мне достаточно скопировать один файл и бэкапы всех проектов собираются автоматом. Это удобно.
Соответственно добавляем в крон строку (для FreeBSD. Для Linux, насколько помню, другая. Пожалуйста, поправте, линуксойды):
0 5 * * * root /usr/backup/backup_db
Которая говорит о том, что каждый день в 05:00 собираем новый бэкап базы и гзипем его.

Ну и не забываем про код и картинки… /usr/backup/backup_www…
У кого как, у меня все проекты лежат в /usr/local/www/…

#!/usr/local/bin/php
$exс=array(‘test.ru’);
$dir=’/usr/local/www/’;

system(‘mkdir -p /usr/backup/www/’.date(‘d.m.Y’).’/’);
$d=opendir($dir);
while(($file=readdir($d))!==false) if($file!=’.’ && $file!=’..’ && is_dir($dir.’/’.$file) && !in_array($file, $exс)) exec(‘tar cpzvf /usr/backup/www/’.date(‘d.m.Y’).’/’.$file.’.tar.gz —exclude=*.log* —exclude=*.svn* ‘.$dir.$file);
>
>

Как видим, скрипт бэкапт все, кроме log файлов и svn файлов. Насчет svn может быть я и не прав, но пока проблем с этим небыло. Так же массив $exс является исключениями.
Для данного скрипта в крон пишем несколько другое правило:
0 5 * * 6 root /usr/backup/backup_www
таким образом бэкапим скрипты и статику в 5 утра в выходной.
Я использую данные скрипты не только на своих серверах, но и на клиентских. Правда, на клиентских дополняю их еще и копированием архивов на третьи сервера для пущего страху. На некоторых серверах отдельные таблицы в нужных базах бэкаплю каждый час итп. PHP дает гибкость, которой так не хватает в bash`е.

p.s. после добавления данных в крон не забываем его ребутить. И не забываем ставить chmod +x для backup_db и backup_www
p.p.s. любые дополнения и критика приветствуются.

Источник

How to Backup MySQL Database using PHP Tutorial

Inside this article we will see how to backup mysql database using PHP. To create database backup we use many process like downloading database backup files from mysql workbench, taking backup via mysqldump, using terminal command, etc.

Here we will use mysqldump command to take database backup but we will use shell_exec() PHP function. The shell_exec() function is an inbuilt function in PHP which is used to execute the commands via shell and return the complete output.

Create an Application

Create a folder data-backup in your localhost directory. Make sure this folder should have sufficient permissions to read and write operations.

Method #1 – Using MySqldump

Inside this folder, create a file called index.php.

MySql command to take backup (Syntax).

mysqldump -u [username] -p[password] [database_name] > [backup_file_name].sql

Command is for taking backup of database php_shop and backup will be saved into location /var/www/html/ and file name is data.sql.

It will backup entire database data with table structure.

Backup database table structure only –

mysqldump -u [username] -p[password] --no-data [database_name] > [backup_file_name].sql

Backup database table data only –

Use the —no-create-info option, or its shorthand -t .

mysqldump -u [username] -p[password] --no-create-info [database_name] > [backup_file_name].sql

Backup database few table –

mysqldump -u [username] -p[password] [database_name] table1 table2 table3 > [backup_file_name].sql

Method #2 – Using Queries

query("SHOW TABLES"); while($row = $result->fetch_row()) < $tables[] = $row[0]; >>else < $tables = is_array($tables)?$tables:explode(',',$tables); >foreach($tables as $table)< $result = $db->query("SELECT * FROM $table"); $numColumns = $result->field_count; $return .= "DROP TABLE $table;"; $result2 = $db->query("SHOW CREATE TABLE $table"); $row2 = $result2->fetch_row(); $return .= "\n\n".$row2[1].";\n\n"; for($i = 0; $i < $numColumns; $i++)< while($row = $result->fetch_row()) < $return .= "INSERT INTO $table VALUES("; for($j=0; $j < $numColumns; $j++)< $row[$j] = addslashes($row[$j]); $row[$j] = preg_replace("\n","\\n",$row[$j]); if (isset($row[$j]))< $return .= '"'.$row[$j].'"' ; >else < $return .= '""'; >if ($j < ($numColumns-1)) < $return.= ','; >> $return .= ");\n"; > > $return .= "\n\n\n"; > //save db file in same folder $handle = fopen('db-backup-'.time().'.sql','w+'); fwrite($handle,$return); fclose($handle);

It fetch all tables from database. It will read table structure and fetch data from it.

Application Testing

Open browser and hit this URL: http://localhost/data-backup/index.php

When we execute this program it will create mysql database backup to given path.

We hope this article helped you to learn How to Backup MySQL Database using PHP Tutorial in a very detailed way.

Online Web Tutor invites you to try Skillshike! Learn CakePHP, Laravel, CodeIgniter, Node Js, MySQL, Authentication, RESTful Web Services, etc into a depth level. Master the Coding Skills to Become an Expert in PHP Web Development. So, Search your favourite course and enroll now.

If you liked this article, then please subscribe to our YouTube Channel for PHP & it’s framework, WordPress, Node Js video tutorials. You can also find us on Twitter and Facebook.

Newsletter

Find Us on Youtube

Online Web Tutor Youtube

Categories

  • AWS S3 (4)
  • Blogging (2)
  • CakePHP 4 (101)
  • CodeIgniter 4 (194)
  • Guest Post (8)
  • jQuery & Javascript (109)
  • Laravel 10 (81)
  • Laravel 8 (163)
  • Laravel 9 (227)
  • MySQL (10)
  • Node Js (16)
  • PHP Miscellaneous (119)
  • Technology (17)
  • WordPress (33)

Источник

Читайте также:  JavaScript confirmation box
Оцените статью