PHP备份数据库的原理和方法 57

1、PHP备份数据库的原理
查找所有表--查找所有字段(需要列出所有字段名,
字段类型等相关信

息)---查找所有数据(读取数据出来注意
特殊符号的转换
addslashes

())--生成SQL(把数据格式化
生成对应的SQL)
通过相关函数输出SQL相关信息,并格式化后生成文件,保存!
2、PHP中mysql相关函数
mysql_list_tables() 表查询函数,类似mysql_query() 函数

mysql_fetch_field() 字段信息函数,返回句柄

Name 字段的名称
Table 字段所属数据表的名称
Type 字段的类型max_length 字段的最大长度not_null 字段是否不能

为空,是,则这一项的值为1primary_key 字段是否为主键,是,则这

一项的值为1unique_key 字段是否为unique键,是,则这一项的值为

1
multiple_key 字段是否不为unique键,是,则这一项的值为1

Numeric 字段是否为数字型,是,则这一项的值为1Blob 字段是否为

blob型,是,则这一项的值为1
Unsigned 数字型的字段是否为unsigned的,是,则这一项的值为1

Zerofill 数字型的字段是否为zerofilled是,则这一项的值为1

CREATE TABLE `help_category` (
`help_category_id` int(5)

unsigned NOT NULL,
`name` char(64) NOT NULL
)
3、备份时候的注意事项 1、注意数据库的大小,过大或者过多的表

分段处理 2、生成的SQL文件名或者存放不易被猜到 3、备份生

成文件可以表或者自动为单位保存 4、可以使用ZIP组件压缩生成的

文件以便保持
----------------------------------------迷你

版----------------------------------------------------
<?php
$mysql_dbname = "php100";
mysql_connect("localhost", "root", "");
mysql_select_db($mysql_dbname);

$sql_list = mysql_list_tables($mysql_dbname);
while ($row_data = mysql_fetch_row($sql_list)) {
echo $row_data[0] . "<br>";
get_table_fd($row_data[0], "sql");

// $fp=fopen("sql/$tablename.sql","w+");
// fwrite($fp,$field);
// fclose($fp);
}

function get_table_fd($tablename) {
$field = "CREATE TABLE `$tablename`(\n";
$result = mysql_query("select * from $tablename");
while ($meta = mysql_fetch_field($result)) {
if ($meta->not_null)
$not_null = "not_null";
$field .= "`$meta->name` $meta->type($meta->max_length)

$not_null; \n";
}
$field .= ")\n";
return $field;
}

?>

-------------------------------------------------张恩明

版-----------------------------------------
<?php
//---需要设置的变量信息
$user = "admin";//系统管理员用户名
$pass = "e10adc3949ba59abbe56e057f20f883e";//该密码是md5

加密值,初始值为123456,密码格式也可以写成:$pass = md5

("123456");
$url = "http://localhost/PHP/";//网址设置,必须配置好该网址,否

则系统是会出错的噢!记得最后得有“/”
$lang = "gbk";//该功能是数据库要导入时,如果MYSQL高于4.0.x版

本时,需要设置的语言编码格式!呵呵~

//----从这里开始,您就不要去设置了噢!下面的信息无所谓的!
$dbhost = "localhost";
$dbuser = "root";
$dbpass = "";
$dbdata = "";

header("Content-type: text/html; charset=gbk");
error_reporting(E_ALL & ~E_NOTICE);
ob_start();
@set_time_limit(0);
function error($msg="",$url2="index.php")
{
global $url;
die("<script language=javascript>alert(‘友情提示:\\n\\n\\t".

$msg."\\n‘);location.href=‘".$url.$url2."‘</script>");
return true;
}

function set_sql_cookie($act="backup")
{
global $url,$dbhost,$dbuser,$dbpass,$dbdata;
echo "<title>设置数据库信息 - PHP100备份系统</title>\n";
echo "<style type=‘text/css‘>\nbody\n{\tbody:normal 14px ‘宋体

‘,‘Tahoma‘,‘Arial‘;\n}\n</style>\n";
echo "请设置好数据库服务器、账号、密码及数据库的名称等参数信

息!";
echo "<form method=‘post‘ action=‘".$url."index.php?act=".

$act."&set=cookie‘>\n";
echo "服务器 <input type=‘text‘ name=‘db_host‘ value=‘".

$dbhost."‘ style=‘width:150px;height:20px;‘><br />\n";
echo "账&nbsp; 号 <input type=‘text‘ name=‘db_user‘ value=‘".

$dbuser."‘ style=‘width:150px;height:20px;‘><br />\n";
echo "密&nbsp; 码 <input type=‘password‘ name=‘db_pass‘

value=‘".$dbpass."‘ style=‘width:150px;height:20px;‘><br />\n";
echo "名&nbsp; 称 <input type=‘text‘ name=‘db_data‘ value=‘".

$dbdata."‘ style=‘width:150px;height:20px;‘><br /><br />\n";
echo "<input type=‘submit‘ value=‘确认‘> <input type=‘reset‘

value=‘重置‘></form>\n";
die();
return true;
}

function chk_get_set($act="backup")
{
global $url,$dbhost,$dbuser,$dbpass,$dbdata;
$db_host = $_POST["db_host"];
$db_user = $_POST["db_user"];
$db_pass = $_POST["db_pass"];
$db_data = $_POST["db_data"];
if(empty($db_host) || empty($db_user) || empty($db_data)) error

("数据库服务器、账号及数据库名称是不能为空","index.php?act=".

$act);
@mysql_connect($db_host,$db_user,$db_pass) or error("无法连

接到服务器上,请检查","index.php?act=".$act);
@mysql_select_db($db_data) or error("无法连接到数据库!请检查

!","index.php?act=".$act);
$msg = $act == "recover" ? "恢复" : "备份";
if($act == "backup" && !file_exists($db_data)) mkdir

($db_data);//创建数据库名称!
if($act == "recover" && !file_exists($db_data)) error("文件夹 ".

$db_data." 不存在!","index.php?act=".$act);
setcookie("qinggan_db",$db_host."___".$db_user."___".

$db_pass."___".$db_data);//设置服务器的COOKIE
@mysql_close();//关闭数据库连接
error("数据库信息已经配置完成,将进行下一步操作:\\n\\n\\t\\t".

$msg."数据!","index.php?act=".$act);
return true;
}

function sql_connect($cookie_db)
{
global $lang;
$dbarray = explode("___",$cookie_db);
mysql_connect($dbarray[0],$dbarray[1],$dbarray[2]);//连接信息
if(mysql_get_server_info()>"4.1") mysql_query("SET NAMES ‘".

$lang."‘");
if(mysql_get_server_info()>"5.0.1") mysql_query("SET

sql_mode=‘‘");
mysql_select_db($dbarray[3]);
return true;
}

function sql_query($sql="")
{
if(empty($sql)) return false;
$query = mysql_query($sql);
return $query;
}

function sql_fetch_array($query)
{
if(empty($query)) return false;
$rows = mysql_fetch_array($query);
return $rows;
}

function table2sql($table)
{
$tabledump = "DROP TABLE IF EXISTS ".$table.";\n";
$query = sql_query("SHOW CREATE TABLE ".$table);
$rows = sql_fetch_array($query);
$tabledump .= $rows[1].";\n\n";
return $tabledump;
}

function errmsg($msg="",$url2="index.php")
{
global $url;
echo "<script language="JavaScript">\nfunction moveNew()

{\nlocation.href="".$url.$url2."";\n}\nwindow.setTimeout

(‘moveNew()‘,‘2000‘);\n</script>";
echo $msg;
echo "<br /><br />";
echo "如果您的系统不支持跳转或系统长时间未跳转,请手动点击操

作!";
echo "<input type=‘button‘ onclick="window.location=‘".$url.

$url2."‘" value=‘手动点击跳转‘>";
die();
return true;
}

function read_msg($file)
{
if([email protected]($file,"rb"))
{
$file_data=fread($handle,filesize($file));
fclose($handle);
}
return $file_data;
}

function recover_data($sql)
{
$sql=str_replace("\r","\n",$sql);
$sql_array=explode(";\n",$sql);
foreach($sql_array as $key=>$value)
{
$value = trim($value);
if($value == "#" || $value == "--")
{
$queryy = explode("\n",$value);
$value = ‘‘;
foreach($queryy as $v2)
{
if($v2[0]!=‘#‘) $value.=$v2;
}
}
if($value)
{
$value=trim(str_replace("\n","",$value));
if(get_cfg_var("magic_quotes_gpc")) stripslashes($value);
sql_query($value);
}
}
return true;
}

$cookie_chk = $_COOKIE["qinggan_userchk"];
$cookie_db = $_COOKIE["qinggan_db"];
if($cookie_chk)
{
if($cookie_chk != $user."___".md5($pass)) header("Location:".

$url."index.php");
}
$act = $_GET["act"] ? $_GET["act"] : $_POST["act"];
@$act_set = $_GET["set"];
if($act == "backup")
{
echo "<title>当前正在备份信息... - PHP100网站备份系统 -

www.PHP100.com</title>";
if(empty($cookie_chk)) error("需要用户验证账号和密码!");
if($act_set == "cookie") chk_get_set($act);
if(empty($cookie_db)) set_sql_cookie($act);
sql_connect($cookie_db);//连接数据库
$dbarray = explode("___",$cookie_db);
$table_list = mysql_list_tables($dbarray[3]);//列出所有表格
$table_count = mysql_num_rows($table_list);//呵呵获取表格总数
if(!file_exists($dbarray[3]."/".$dbarray[3].".sql"))
{
//-----备份数据表信息
$array = array();
for($i=0;$i<mysql_num_rows($table_list);$i++)
{
$table = mysql_tablename($table_list,$i);//
$array[$i] = table2sql($table);
}
$msg = implode("\n",$array);
$handle = fopen($dbarray[3]."/".$dbarray[3].".sql","wb");
if(!get_cfg_var("magic_quotes_gpc")) addslashes($msg);
fputs($handle,$msg);
fclose($handle);
unset($msg);
}
//-----表格
@$tableid = $_GET["tableid"] ? intval($_GET["tableid"]) : 0;
@$startid = $_GET["startid"] ? intval($_GET["startid"]) : 0;
@$pageid = $_GET["pageid"] ? intval($_GET["pageid"]) : 0;
//-----开始内容备份
if(($tableid+1)<$table_count)
{
$table = mysql_tablename($table_list,$tableid);
$query = sql_query("select count(*) as count from `".$table."`");
$num = sql_fetch_array($query);
$count = $num["count"];//获取个数
$per_size = 1000;//最大数不超过1000
if($count<$per_size) $per_size = $count;
if($count && $startid < $count)
{
$query = sql_query("select * from `".$table."` limit ".$startid.",".

$per_size);//
$numfields = mysql_num_fields($query);
$tabledump = "";
while($rows = mysql_fetch_row($query))
{
$tabledump .= "INSERT INTO $table VALUES (";
$comma = ‘‘;
for($i = 0; $i < $numfields; $i++)
{
$tabledump .= $comma.(‘\‘‘.mysql_escape_string($rows[$i]).‘\‘‘);
$comma = ‘,‘;
}
$tabledump .= ");\n";
//---------------
$startid++;
if(strlen($tabledump)>(2048*1024))
{
$handle = fopen($dbarray[3]."/".$table."_".$pageid.".sql.","wb");
if(!get_cfg_var("magic_quotes_gpc")) addslashes($tabledump);
fputs($handle,$tabledump);
fclose($handle);
unset($tabledump);//清空内容!
errmsg("正在备份数据表 ".$table." 信息,当前已经写入第 ".

($pageid+1)." 页,即将写入第 ".($pageid+2)." 页信

息","index.php?act=backup&tableid=".$tableid."&startid=".

($startid)."&pageid=".($pageid+1));
}
}
//----
if($tabledump)
{
if($pageid>0)
{
@$msg = file_get_contents($dbarray[3]."/".$table."_".($pageid-

1).".sql");
if(strlen($msg) < (2048*1024))
{
$handle = fopen($dbarray[3]."/".$table."_".($pageid-

1).".sql","ab");
if(!get_cfg_var("magic_quotes_gpc")) addslashes($tabledump);
fputs($handle,$tabledump);
fclose($handle);
unset($tabledump,$msg);
$newpageid = $pageid;
}
else
{
$handle = fopen($dbarray[3]."/".$table."_".$pageid.".sql","wb");
if(!get_cfg_var("magic_quotes_gpc")) addslashes($tabledump);
fputs($handle,$tabledump);
fclose($handle);
unset($tabledump);
$newpageid = $pageid + 1;
}
}
else
{
$handle = fopen($dbarray[3]."/".$table."_".$pageid.".sql","wb");
if(!get_cfg_var("magic_quotes_gpc")) addslashes($tabledump);
fputs($handle,$tabledump);
fclose($handle);
unset($tabledump);
$newpageid = $pageid + 1;
}
}
if($startid<$count)
{
errmsg("正在备份数据表 ".$table." 信息。","index.php?

act=backup&tableid=".$tableid."&startid=".

($startid)."&pageid=".$newpageid);
}
else
{
//------
errmsg("数据表 ".$table." 信息已经备份完毕,将开始备份下一个数

据表!","index.php?act=backup&tableid=".($tableid+1));
}
}
else
{
errmsg("数据表 ".$table." 信息为空,将开始下一个数据表信息备

份","index.php?act=backup&tableid=".($tableid+1));
}
}
else
{
setcookie("qinggan_db","");//清空数据库COOKIE信息
setcookie("qinggan_userchk","");//清空用户验证信息
error("数据已经备份完毕!","index.php");
}
}
elseif($act == "recover")
{
echo "<title>恢复数据表信息 - PHP100网站备份系统 -

www.PHP100.com</title>";
if(empty($cookie_chk)) error("需要用户验证账号和密码!");
if($act_set == "cookie") chk_get_set($act);
if(empty($cookie_db)) set_sql_cookie($act);
sql_connect($cookie_db);//连接数据库
$dbarray = explode("___",$cookie_db);
$sql = read_msg($dbarray[3]."/".$dbarray[3].".sql");
recover_data($sql);
errmsg("数据表结构已经恢复,正在恢复数据信息!","index.php?

act=recover_data");
}
elseif($act == "recover_data")
{
echo "<title>恢复数据信息 - PHP100网站备份系统 -

www.PHP100.com</title>";
if(empty($cookie_chk)) error("需要用户验证账号和密码!");
if($act_set == "cookie") chk_get_set($act);
if(empty($cookie_db)) set_sql_cookie($act);
sql_connect($cookie_db);//连接数据库
$dbarray = explode("___",$cookie_db);
//-----
$table_list = mysql_list_tables($dbarray[3]);//列出所有表
$table_count = mysql_num_rows($table_list);//呵呵获取表总数
$tableid = $_GET["tableid"] ? intval($_GET["tableid"]) : 0;
$pageid = $_GET["pageid"] ? intval($_GET["pageid"]) : 0;
$table = mysql_tablename($table_list,$tableid);
if(($tableid+1)<$table_count)
{
if(!file_exists($dbarray[3]."/".$table."_".$pageid.".sql"))
{
errmsg("数据表 ".$table." 信息不存在或未曾备份!","index.php?

act=recover_data&tableid=".($tableid+1));
}
$sql = read_msg($dbarray[3]."/".$table."_".$pageid.".sql");
if($sql) recover_data($sql);
if(file_exists($dbarray[3]."/".$table."_".($pageid+1).".sql"))
{
errmsg("正在恢复数据表 ".$table." 信息","index.php?

act=recover_data&tableid=".$tableid."&pageid=".($pageid+1));
}
else
{
errmsg("已经恢复数据表 ".$table." 信息,将恢复下一个数据表信息

!","index.php?act=recover_data&tableid=".($tableid+1));
}
}
else
{
setcookie("qinggan_userchk","");
setcookie("qinggan_db","");
error("数据信息均已经恢复完毕!","index.php");
}
}
elseif($act == "check")
{
$chk_user = $_POST["chk_user"];
$chk_pass = $_POST["chk_pass"];
if(empty($chk_user) || empty($chk_pass)) error("账号或密码不能为

空");
if($chk_user != $user || md5($chk_pass) != $pass) error("账号或密

码不正确!");
setcookie("qinggan_userchk",$chk_user."___".md5($pass));//设置

cookie信息
?>
<title>选择操作项目 - PHP100网站备份系统 -

www.PHP100.com</title>
<style type="text/css">
body
{
font:normal 14px ‘宋体‘,‘Tahoma‘,‘Arial‘;
}
</style>
请选择您要操作的项目!<br /><br />
<input type="button" onclick="window.location=‘index.php?

act=backup‘" value="备份数据"><br /><br />
<input type="button" onclick="window.location=‘index.php?

act=recover&iftable=yes‘" value="恢复数据"><br />
<?php
}
else
{
setcookie("qinggan_userchk","");
setcookie("qinggan_db","");
?>
<title>验证账号 - PHP100网站备份系统 -

www.PHP100.com</title>
<style type="text/css">
body
{
font:normal 14px ‘宋体‘,‘Tahoma‘,‘Arial‘;
}
</style>
在操作之前您需要输入账号和密码进行身份确认!
<form method="post" action="index.php?act=check">
账号:<input type="text" name="chk_user"

style="width:150px;height:20px;"><br />
密码:<input type="password" name="chk_pass"

style="width:150px;height:20px;"><br /><br />
<input type="submit" value="确认"> <input type="reset"

value="重填"></form>
<?php
}
ob_end_flush();
?>
<br /><br />
备份原理:

<blockquote>
<li>一表一文件!<a href="http://www.php100.com">PHP100数

据库备份系统</a>
<li>单表文件大于2048K时,自动创建新文件!
<li>首次生成数据结构表!该表起总纲作用!
<li>同目前主流的备份程序不一样!本系统生成sql文件——是否兼容

phpmyadmin创建的表未验证!
</blockquote>

PHP备份数据库的原理和方法 57,布布扣,bubuko.com

时间: 2024-10-10 20:19:48

PHP备份数据库的原理和方法 57的相关文章

Linux VPS主机备份数据库的4个方法

从虚拟主机过度到VPS之后,一般的站长可能会感觉到运维时间成本还是比较大的.比如在VPS维护.备份数据方面,在没有使用定期自动备份功能的软件时基本都是用手工备份的.对于网页文件,我们可以通过压缩打包FTP下载的方式搞定,但是MYSQL数据库的备份需要格外的小心,一旦备份失误缺失,然后真需要还原恢复的时候可能会造成很大的损失. 下面给大家整理一些比较常用的Linux VPS主机备份MySQL数据库的方式: 第一.PHPMYADMIN导出方法 不论我们使用的是WEB面板,还是使用一键包,应该都会有安

Mysql备份数据库的一种方法

今天添加了一个数据库自动备份的模块,mysql数据备份的方法有很多,可以对单个数据库备份,可以多个数据库备份,也可以对某一个表进行备份,可以只备份数据库的结构不备份数据,可以根据需要做不同处理,正好现在有点时间,简单的记录一下最为简单的一种备份方法. Mysql版本:5.1 1.利用mysqldump对mysql数据库进行备份mysqldump是一个单独的可执行程序,并非mysql运行时的一个命令,使用mysqldump时,如果是在Windows下下,需要先在环境变量中添加到系统路径,然后就能通

重新安装sqlyog时备份数据库链接列表的方法

一般在本机C:\Documents and Settings\Administrator\Application Data\SQLyog这个目录下有个sqlyog.ini文件.把这个文件备份一下就ok了,等重新安装sqlyog后重新覆盖这个文件,那些之前保存的链接数据库的记录都出来了. 原文:http://www.oicto.com/sqlyog-bak-ini/

windows下mysql定时备份数据库几种方法

第一种:新建批处理文件 backup.dat 代码如下: net stop mysqlxcopy "C:/Program Files/MySQL/MySQL Server 5.0/data/piaoyi/*.*" D:/db_backup/%date:~0,10%/ /ynet start mysql 注意:批处理命令中路径里有空格的话,必须在路径上加上双引号!然后使用Windows的"计划任务"定时执行该批处理脚本即可.(例如:每天凌晨3点执行backup.bat

使用mysqldump备份数据库方法

数据库: oldcat 数据库表:t_oldcat 1.首先在opt目录下创建备份目录 [[email protected] ~]# mkdir -p /opt/mysql/data_bak 2.查询数据库表: [[email protected] ~]# mysql -uoldcat -poldcat123 -e "use oldcat;select * from t_oldcat" +----+--------+ | id | name   | +----+--------+ | 

discuz后台备份数据库出错修复方法

很多网站程序后台都有数据库备份还原功能,大家也很喜欢这个功能,但是难免备份中可能会发生错误. 就好像下面这个discuz的后台数据库备份.备份到一半的时候,就提示以下出错: 其实,从上面的提示中我们可以看到他是因为xxx表,出现问题. 这时我们如果对数据库语句那些不太熟悉,我们可以利用phpmyadmin来尝试修复表. 进入phpmyadmin.找到我们的对应的数据库,可以选择一张表,也可以选择全部,然后在对应的右边的选中项那选择修复表. 修复之后,在重新备份进入后台备份数据库,备份成功. 交流

如果有人问你数据库的原理,叫他看这篇文章

一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 Teradata .但很少有文章讲解数据库是如何工作的.你可以自己谷歌/百度一下『关系型数据库原理』,看看结果多么的稀少[译者注:百度为您找到相关结果约1,850,000个-] ,而且找到的那些文章都很短.现在如果你查找最近时髦的技术(大数据.NoSQL或JavaScript),你能找到更多深入探讨它们如何工作的文章. 难道关系型数据库已经太古老太无趣,除了大学教材.研究文

SqlServer定时备份数据库和定时杀死数据库死锁解决

PS:Sqlserver 2008 R2,windows 8 64位 1.备份数据库 因为要备份,我们就要用到Sqlserver的代理,默认数据库的代理是不开启的.需要我们手动开启的. 执行备份数据库脚本,现在将脚本公布,其实将这一段代码中需要保存的文件路径和数据库名称替换一下就可以实现备份了.但是还没有达到定时备份的目的 ? 1 2 3 4 5 6 7 8 9 10 11 --自动备份并保存最近5天的SQL数据库作业脚本 宋彪 20130310 DECLARE @filename VARCHA

mysql的备份: Xtrabackup的使用方法

Xtrabackup: Xtrabackup的优点:1.快速 ,支持并行备份.--parallel=8 2.在线备份备份,不阻塞读写(INNODB),对MYISAM添加全局锁3.支持在线搭建主从复制 Xtrabackup的基本实用方法: -- 全备innobackupex --defaults-file=/etc/my.cnf --user=root  --socket=/var/lib/mysql/mysql.sock --parallel=8 /home/backup/ /home/back