Php скрипт копирования базы mysql

Делаем бэкап базы данных MySQL на PHP

Можно, конечно, полагаться на случай, что пронесет, а можно просто написать небольшой скрипт, установить его в CRON и больше не парится за то, что ваш сайт в один прекрасный момент ляжет и его придется с визгом и матом долго и нудно поднимать. При работе с популярными движками сайтов, бэкап базы сделать конечно в разы проще, там на это счет написанна несметная куча модулей, которые за вас все сохранят, заархивируют да еще и на мыло отправят. Но как правило они используют API самих движков, а это уже не три строчки кода (на тот случай если захочится позаимствовать такое решение у Drupal или Joomla).

Потому если движок самописный или просто если нужно что-то очень простое и понятно как работающее — то данный снипет является решением всех проблем.

backup_tables('localhost','username','password','*'); // можно либо перечислить все таблицы, которые нужны или отметить звездочкой, что нужно делать дамп всей базы function backup_tables($host,$user,$pass,$name,$tables = '*') < $link = mysql_connect($host,$user,$pass); mysql_select_db($name,$link); // Если бекапим все таблицы if($tables == '*') < $tables = array(); $result = mysql_query('SHOW TABLES'); while($row = mysql_fetch_row($result)) < $tables[] = $row[0]; >> else < $tables = is_array($tables) ? $tables : explode(',',$tables); >// проходим по массиву таблиц foreach($tables as $table) < $result = mysql_query('SELECT * FROM '.$table); $num_fields = mysql_num_fields($result); $return.= 'DROP TABLE '.$table.';'; $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); $return.= "nn".$row2[1].";nn"; for ($i = 0; $i < $num_fields; $i++) < while($row = mysql_fetch_row($result)) < $return.= 'INSERT INTO '.$table.' VALUES('; for($j=0; $jelse < $return.= '""'; >if ($j <($num_fields-1)) < $return.= ','; >> $return.= ");n"; > > $return.="nnn"; > // пишем результат в файл $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); fwrite($handle,$return); fclose($handle); >

Источник

Читайте также:  Linux man page to html

Элементарные 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 собираем новый бэкап базы и гзипем его.

Читайте также:  Java create error log file

Ну и не забываем про код и картинки… /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. любые дополнения и критика приветствуются.

Источник

micc83 / mysqldump.php

This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode characters

ini_set( ‘display_errors’ , 1 );
ini_set( ‘display_startup_errors’ , 1 );
error_reporting( E_ALL );
$ database = ‘db’ ;
$ user = ‘user’ ;
$ pass = ‘pass’ ;
$ host = ‘localhost’ ;
$ dir = dirname(__FILE__) . ‘/dump.sql’ ;
echo »

Backing up database to ` `

«;

exec(» mysqldump —user= < $ user >—password= < $ pass >—host= < $ host > < $ database >—result-file= < $ dir >2>&1 «, $ output );
var_dump( $ output );

Excellent script. Thanks a lot ..
By the way, if you i want to just dump the tables structures of the DB. How to do that? thanks in advance.

Error occur while running above script please help me to solve this.

array (size=2)
0 => string »mysqldump’ is not recognized as an internal or external command,’ (length=65)
1 => string ‘operable program or batch file.’ (length=31)

You have to add MySQL_Installation_Path/bin to PATH. For example if you are using MariaDB and your installation path is:

Well you have to add C:/MariaDB/bin to system path.

Just use mysqldump-php within your php code. Check out the examples or the wiki, but it is as easy as:

error_reporting(E_ALL); require_once __DIR__ . '/vendor/autoload.php'; include_once(dirname(__FILE__) . '/vendor/mysqldump-php/src/Ifsnop/main.inc.php'); use Ifsnop\Mysqldump as IMysqldump; try < $dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password'); $dump->start('storage/work/dump.sql'); > catch (\Exception $e) < echo 'mysqldump-php error: ' . $e->getMessage(); >

Just use mysqldump-php within your php code. Check out the examples or the wiki, but it is as easy as:

error_reporting(E_ALL); require_once __DIR__ . '/vendor/autoload.php'; include_once(dirname(__FILE__) . '/vendor/mysqldump-php/src/Ifsnop/main.inc.php'); use Ifsnop\Mysqldump as IMysqldump; try < $dump = new IMysqldump\Mysqldump('mysql:host=localhost;dbname=testdb', 'username', 'password'); $dump->start('storage/work/dump.sql'); > catch (\Exception $e) < echo 'mysqldump-php error: ' . $e->getMessage(); > 

If you’re in windows like me and don’t want create a ENVIRONMENT VARIABLE, you can use the mysql dir before the dump command

Backing up database to ` `"; exec(" --user= --password= --host=  --result-file= 2>&1", $output); var_dump($output); 

The script works well locally, now how can I use it externally?

Thanks a lot for this script.

I improved it with a bit of bash and a desktop launcher, it's written in French but this may interest someone:

first of all let me thank you for the amazing simple script.. it works great, but i needed to add some features to fit my project, such as save file from input form in php, where we select de name of the backup and post it to the execut backup script, and then download file in webrowser directly. attached below is a working example of the code.

And yeahhh keep up the good work lads.

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

include_once("conect-db.php");

$name_backup = $_REQUEST['name_backup'];

$command='mysqldump --opt -h' .$databaseHost .' -u' .$databaseUsername .' -p' .$databasePassword .' ' .$databaseName .' > ' .$name_backup;
exec($command,$output,$worked);

$file_name = basename($name_backup);
//save the file by using base name
$fn = file_put_contents($file_name,file_get_contents($name_backup));
header("Expires: 0");
header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
header("Cache-Control: no-store, no-cache, must-revalidate");
header("Cache-Control: post-check=0, pre-check=0", false);
header("Pragma: no-cache");
header("Content-type: application/file");
header('Content-length: '.filesize($file_name));
header('Content-disposition: attachment; filename="'.basename($file_name).'"');
readfile($file_name);

switch($worked) case 0:
echo 'The database ' .$databaseName .' was successfully stored in the following path '.getcwd().'./' .$name_backup .'';
break;
case 1:
echo 'An error occurred when exporting ' .$databaseName .' zu '.getcwd().'/' .$mysqlExportPath .'';
break;
case 2:
echo 'An export error has occurred, please check the following information:

MySQL Database Name: ' .$databaseName .'
MySQL User Name: ' .$databaseUsername .'
MySQL Password: NOTSHOWN
MySQL Host Name: ' .$databaseHost .'

';
break;
>
?>

Источник

How to Backup MySQL Database using PHP

The database backup is a most important task for every web developer. Regular database backup prevents risk to lose the data and it helps to restore the database if any issue occurred. So, backup the database whenever possible is a good idea.

There many ways available to backup MySQL database in a file and you can backup database in one click from hosting server. But if you want to take MySQL database backup without login to your hosting server or phpMyAdmin, you can do it from the script using PHP. In this tutorial, we will build a PHP script to backup MySQL database and save in a SQL file.

Perform MySQL Database Backup using PHP

All the PHP code will be grouped together in backupDatabaseTables() function. Using backupDatabaseTables() function you can backup specific tables or all tables from a database. The following parameters are required to backup MySQL database using PHP.

  • $dbHost – Required. Specifies the host of the database.
  • $dbUsername – Required. Specifies the database username.
  • $dbPassword – Required. Specifies the database password.
  • $dbName – Required. Specifies the database which you wants to backup.
  • $tables – Optional. Specifies the table names in comma separated string or array. Omit this parameter to take backup all tables of the database.
/** 
* @function backupDatabaseTables
* @author CodexWorld
* @link http://www.codexworld.com
* @usage Backup database tables and save in SQL file
*/
function backupDatabaseTables($dbHost,$dbUsername,$dbPassword,$dbName,$tables = '*') //connect & select the database
$db = new mysqli($dbHost, $dbUsername, $dbPassword, $dbName);
//get all of the tables
if($tables == '*') $tables = array();
$result = $db->query("SHOW TABLES");
while(
$row = $result->fetch_row()) $tables[] = $row[0];
>
>else
$tables = is_array($tables)?$tables:explode(',',$tables);
>
//loop through the 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] = ereg_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 file
$handle = fopen('db-backup-'.time().'.sql','w+');
fwrite($handle,$return);
fclose($handle);
>

Usage:
Use backupDatabaseTables() function in PHP to generate MySQL database backup and save in a SQL file.

backupDatabaseTables('localhost','root','*****','codexworld');

Are you want to get implementation help, or modify or enhance the functionality of this script? Click Here to Submit Service Request

If you have any questions about this script, submit it to our QA community - Ask Question

Источник

Оцените статью