您的位置:首页 > 编程语言 > PHP开发

PHP备份MySQL数据库

2015-10-11 16:54 651 查看
一般备份数据库都是直接把数据库所在的目录整个复制到另一个地发,这分为增量备份、差分备份;热备份、冷备份等。技术手段很多,都是在服务器上直接进行。但是如果我们无法登录服务器命令行,而且连mysql也进不去,那就只能通过脚本备份了(这里有个前提,你必须能上传文件到服务器,一般项目开发会给ftp)。这里我用php来演示。

脚本备份分为三种:导出文件到服务器、导出文件到客户端、浏览器直接输出sql语句

以上三种方式对权限要求是递减的:第一种必须要有写权限、第二种前提是sql文件大小低于服务器对文件传输的限制、第三种就是没有任何权限,直接输出裸文本,然后导出为文件

核心函数:获取指定表的结构及数据

function dump_table($table) {
$q2 = mysql_query("show create table $table");
$sql = mysql_fetch_array($q2);
$mysql = "DROP TABLE IF EXISTS $table;\n";
$mysql.=$sql['Create Table'].";\n";

$q3 = mysql_query("select * from $table");
while($data=mysql_fetch_assoc($q3)) {
$keys = array_keys($data);
$keys = array_map('addslashes',$keys);
$keys = join('`,`',$keys);
$keys = "`".$keys."`";
$vals = array_values($data);
$vals = array_map('addslashes',$vals);
$vals = join("','",$vals);
$vals = "'".$vals."'";
$mysql.="insert into `$table`($keys) values($vals);\n";
}
$mysql.="\n";

return $mysql;
}


第一种方法:导出到服务器
<?php
error_reporting(0);
$host = 'localhost';
$user = 'root';
$passwd = '';
$dbname = 'table';

$con = mysql_connect($host,$user,$passwd);

mysql_select_db($dbname);
$mysql = "set names utf8;\n";
mysql_query($mysql);
$tables = mysql_query('show tables');
while($t=mysql_fetch_array($tables)) {
$table = $t[0];
$mysql .= dump_table($table);
}

/*保存的文件名 */
$filename = "bak".date("Ymj").".sql";

/*将文件写入服务器,必须有写权限 */
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "Bak success ".$filename;


第二种方法:导出到客户端

<?php
error_reporting(0);
$host = 'localhost';
$user = 'root';
$passwd = '';
$dbname = 'table';

$con = mysql_connect($host,$user,$passwd);

mysql_select_db($dbname);
$mysql = "set names utf8;\n";
mysql_query($mysql);
$tables = mysql_query('show tables');
while($t=mysql_fetch_array($tables)) {
$table = $t[0];
$mysql .= dump_table($table);
}

/*输出内容写入文件下载给客户端,受到服务器文件传输限制*/
$filename = "bak".date("Ymj").".sql";
header("Content-disposition:filename=".$filename);
header("Content-type:application/octetstream");
header("Pragma:no-cache");
header("Expires:0");
echo $mysql;


第三种方法:以纯文本输出

<?php
error_reporting(0);
header('content-type:text/plain;charset=utf-8'); //这个必须有,否则乱码
$host = 'localhost';
$user = 'root';
$passwd = '';
$dbname = 'table';

$con = mysql_connect($host,$user,$passwd);

mysql_select_db($dbname);
$mysql = "set names utf8;\n";
mysql_query($mysql);
$tables = mysql_query('show tables');
while($t=mysql_fetch_array($tables)) {
$table = $t[0];
$mysql = dump_table($table);

echo $mysql; //直接输出每张表的sql,没有任何限制,将得到的文本另存为sql即可
}


以上方法的脚本均放在服务器上执行(一般服务器数据库不对外开放)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: