Каким образом происходит backup данных на сервере ?

evgkuz

Новичок
Каким образом происходит backup данных на сервере ?

Каким образом происходит backup данных на сервере ?
Это должен делать php-скрипт или какая-то другая программа или сам сервер ?
Если php-скрипт, то есть ли стандартные программы для этого ? Ведь время выполнения скрипта ограничено, а данных много !
 

.des.

Поставил пиво кому надо ;-)
данных каких? Если БД, то для этого есть встроенные средства в самой БД (mysqldump).
Если это не твой сервер, то об этом должен заботиться хостер. А твоя задача проследить чтобы этот пункт был в договоре.
Если сервер твой, то сам и настраиваешь как, когда, и чем производить backup
 

confguru

ExAdmin
Команда форума
Все делается через shell
Просто скрипт бекапит www,mail,db
 

Interrupt

Guest
Правильо. Вешаешь на крон скрипт который будет сохранять и зжимать базу.
А вот пример, думаю разберешься:
PHP:
$dbhost = 'localhost'; // Server address of your MySQL Server
$dbuser = 'your_username'; // Username to access MySQL database
$dbpass = 'yourpass'; // Password to access MySQL database
$dbname = 'database_name'; // Database Name

// Optional Options You May Optionally Configure

$use_gzip = "yes";  // Set to No if you don't want the files sent in .gz format
$remove_sql_file = "yes"; // Set this to yes if you want to remove the .sql file after gzipping. Yes is recommended.
$remove_gzip_file = "no"; // Set this to yes if you want to delete the gzip file also. I recommend leaving it to "no"
 
// Configure the path that this script resides on your server.

$savepath = "/www/htdocs/dbsender"; // Full path to this directory. Do not use trailing slash!

$send_email = "yes";  // Do you want this database backup sent to your email? Fill out the next 2 lines
$to      = "[email protected]";  // Who to send the emails to
$from    = "[email protected]"; // Who should the emails be sent from?

$senddate = date("j F Y");

$subject = "MySQL Database Backup - $senddate"; // Subject in the email to be sent.
$message = "Your MySQL database has been backed up and is attached to this email"; // Brief Message.


$use_ftp = "yes"; // Do you want this database backup uploaded to an ftp server? Fill out the next 4 lines
$ftp_server = "localhost"; // FTP hostname
$ftp_user_name = "ftp_username"; // FTP username
$ftp_user_pass = "ftp_password"; // FTP password
$ftp_path = "/"; // This is the path to upload on your ftp server!

// Do not Modify below this line! It will void your warranty!

	$date = date("mdy-hia");
	$filename = "$savepath/$dbname-$date.sql";	
	passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename");
	
	if($use_gzip=="yes"){
		$zipline = "tar -czf ".$dbname."-".$date."_sql.tar.gz $dbname-$date.sql";
		shell_exec($zipline);
	}
	if($remove_sql_file=="yes"){
		exec("rm -r -f $filename");
	}
	
	if($use_gzip=="yes"){
		$filename2 = "$savepath/".$dbname."-".$date."_sql.tar.gz";
	} else {
		$filename2 = "$savepath/$dbname-$date.sql";
	}
	
	
	if($send_email == "yes" ){
		$fileatt_type = filetype($filename2);
		$fileatt_name = "".$dbname."-".$date."_sql.tar.gz";
		
		$headers = "From: $from";
		
		// Read the file to be attached ('rb' = read binary)
		$file = fopen($filename2,'rb');
		$data = fread($file,filesize($filename2));
		fclose($file);
	
		// Generate a boundary string
		$semi_rand = md5(time());
		$mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";
	
		// Add the headers for a file attachment
		$headers .= "\nMIME-Version: 1.0\n" ."Content-Type: multipart/mixed;\n" ." boundary=\"{$mime_boundary}\"";
	
		// Add a multipart boundary above the plain message
		$message = "This is a multi-part message in MIME format.\n\n" ."--{$mime_boundary}\n" ."Content-Type: text/plain; charset=\"iso-8859-1\"\n" ."Content-Transfer-Encoding: 7bit\n\n" .
		$message . "\n\n";
	
		// Base64 encode the file data
		$data = chunk_split(base64_encode($data));
	
		// Add file attachment to the message
		$message .= "--{$mime_boundary}\n" ."Content-Type: {$fileatt_type};\n" ." name=\"{$fileatt_name}\"\n" ."Content-Disposition: attachment;\n" ." filename=\"{$fileatt_name}\"\n" ."Content-Transfer-Encoding: base64\n\n" .
		$data . "\n\n" ."--{$mime_boundary}--\n";
	
		// Send the message
		$ok = @mail($to, $subject, $message, $headers);
		if ($ok) {
			echo "<h4><center>Database backup created and sent! File name $filename2</center></h4>";
		} else {
			echo "<h4><center>Mail could not be sent. Sorry!</center></h4>";
		}
	}
	
	if($use_ftp == "yes"){
		$ftpconnect = "ncftpput -u $ftp_user_name -p $ftp_user_pass -d debsender_ftplog.log -e dbsender_ftplog2.log -a -E -V $ftp_server $ftp_path $filename2";
		shell_exec($ftpconnect);
		echo "<h4><center>$filename2 Was created and uploaded to your FTP server!</center></h4>";
	
	}
	
	if($remove_gzip_file=="yes"){
		exec("rm -r -f $filename2");
	}
?>
 

Phoenix

Guest
2 Interrupt :
а подлиннее скрипта не было? :)
 

aloner

Guest
man mysqldump
man bash

Не надо изобретать велосипед.
 

csa

Guest
действительно не надо, поэтому - man fsbackup ;^)
брать на opennet.ru
 

csa

Guest
нет, это набор скриптов для бекапа файлов и, в частности, баз мускула и постгресса
умеет скипать отдельные таблицы в базах, делать инкрементальный бекап (только для файлов, имхо) и сохранять все это на удаленном серваке (по фтп либо по ssh)
см. сюда: http://www.opennet.ru/dev/fsbackup/
 

Groonya

Guest
Если есть доступ к командам shell, то все ведь гораздо проще

на крон вешается

PHP:
exec("сp -R   ../catalog  ../catalog");
как и говорил admin
 

ForJest

- свежая кровь
exec("сp -R ../catalog ../catalog");
admin говорил совсем не так :) Зачем exec? :)
 

Groonya

Guest
затем, что shell-команду по крону надо запустить каким-то скриптом, будь то пхп или перл
разве я не прав?
 

tony2001

TeaM PHPClub
команда шелла по крону запускается-таки самим шеллом (сюрприз).
 

Groonya

Guest
да, черт возьми, а ведь правда, но это если говорить про настоящий севрерный бэкап
а если юзер хочет делать собственный бэкап в пределах своей директории, без сервер. скриптов не обойтись (может, именно это и имелось в виду evgkuz)
 
Сверху