社区
基础编程
帖子详情
请教如何用php编写mysql的数据库备份程序?
feidaoxiaoli
2006-04-12 10:41:42
我做了一个论文投递系统,客户追加要求要添加一个数据库备份功能,请教各位该如何实现!
谢谢大家了。
...全文
616
5
打赏
收藏
请教如何用php编写mysql的数据库备份程序?
我做了一个论文投递系统,客户追加要求要添加一个数据库备份功能,请教各位该如何实现! 谢谢大家了。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
5 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
ice_berg16
2006-05-08
打赏
举报
回复
http://stone.lanqiaobiz.com/sqlTool.rar
朝阳
2006-05-08
打赏
举报
回复
/****** 備份數據庫結構 ******/
/*
函數名稱:table2sql()
函數功能:把表的結構轉換成爲SQL
函數參數:$table: 要進行提取的表名
返 回 值:返回提取後的結果,SQL集合
函數作者:heiyeluren
*/
function table2sql($table)
{
global $db;
$tabledump = "DROP TABLE IF EXISTS $table;\n";
$createtable = $db->query("SHOW CREATE TABLE $table");
$create = $db->fetch_row($createtable);
$tabledump .= $create[1].";\n\n";
return $tabledump;
}
/****** 備份數據庫結構和所有數據 ******/
/*
函數名稱:data2sql()
函數功能:把表的結構和數據轉換成爲SQL
函數參數:$table: 要進行提取的表名
返 回 值:返回提取後的結果,SQL集合
函數作者:heiyeluren
*/
function data2sql($table)
{
global $db;
$tabledump = "DROP TABLE IF EXISTS $table;\n";
$createtable = $db->query("SHOW CREATE TABLE $table");
$create = $db->fetch_row($createtable);
$tabledump .= $create[1].";\n\n";
$rows = $db->query("SELECT * FROM $table");
$numfields = $db->num_fields($rows);
$numrows = $db->num_rows($rows);
while ($row = $db->fetch_row($rows))
{
$comma = "";
$tabledump .= "INSERT INTO $table VALUES(";
for($i = 0; $i < $numfields; $i++)
{
$tabledump .= $comma."'".mysql_escape_string($row[$i])."'";
$comma = ",";
}
$tabledump .= ");\n";
}
$tabledump .= "\n";
return $tabledump;
}
/****** 具體實現操作 ******/
/*好,我們既然把代碼都寫出來了,那麽我們如何在具體的程序種去實現備份呢,我們看下面的代碼。*/
/* 備份數據庫 */
// 注意:我們一下的數據庫操作采用了phplib的DB類
// 定義要保存的數據表、前綴、保存到何處
$tables = array('us_sort', 'us_download', 'us_article', 'us_guestbook'); //定義要保存的數據表,一個數組
$prefix = 'us_'; // 要保存的.sql文件的前綴
$saveto = 'server'; // 要保存到什麽地方,是本地還是服務器上,默認是服務器
$back_mode = 'all'; // 要保存的方式,是全部備份還是只保存數據庫結構
$admin = 'heiyeluren'; //管理員名稱
$admin_email = 'heiyeluren@163.com'; // 管理員郵箱
// 定義數據保存的文件名
$local_filename = $prefix.date('Ymd_His').'.sql"';
if (!$filename) { $filename = $db_backup_path . $prefix . date('Ymd_His_'). create_check_code(4) . ".sql"; }
$filename = $prefix.date(Ymd_His). create_check_ code(6).".sql"; // 保存在服務器上的文件名
// 注意後面的create_check_code()函數,這是一個生成隨機碼的函數,詳細可以參考:
// http://blog.csdn.net/heiyeshuwu/archive/2005/01/26/268446.aspx
// 獲取數據庫結構和數據內容
foreach($tables as $table)
{
if ($back_mode == 'all') { $sqldump .= data2sql($table); }
if ($back_mode == 'table') { $sqldump .= table2sql($table); }
}
// 如果數據內容不是空就開始保存
if(trim($sqldump))
{
// 寫入開頭信息
$sqldump =
"# --------------------------------------------------------\n".
"# 數據表備份\n".
"#\n".
"# 服務器: $db->Host\n".
"# 數據庫:$db->Database\n".
"# 備份編號: ". create_sess_id() ."\n". // 這裏有一個生成session id的函數
"# 備份時間: ".time_to_date('',6)."\n". // 這裏就是獲取當前時間的函數
"#\n".
"# 管理員:$admin ($admin_email)\n". // 管理員的用戶名和郵箱地址
"# $copyright\n".
"# --------------------------------------------------------\n\n\n".
$sqldump;
// 保存到本地
if($saveto == "local")
{
ob_end_clean();
header('Content-Encoding: none');
header('Content-Type: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? 'application/octetstream' : 'application/octet-stream'));
header('Content-Disposition: '.(strpos($HTTP_SERVER_VARS['HTTP_USER_AGENT'], 'MSIE') ? 'inline; ' : 'attachment; ').'filename="'.$local_filename);
header('Content-Length: '.strlen($sqldump));
header('Pragma: no-cache');
header('Expires: 0');
echo $sqldump;
}
// 保存到本地結束
// 保存在服務器
if($saveto == "server")
{
if($filename != "")
{
@$fp = fopen($filename, "w+");
if ($fp)
{
@flock($fp, 3);
if(@!fwrite($fp, $sqldump))
{
@fclose($fp);
exit_msg("數據文件無法保存到服務器,請檢查目錄屬性你是否有寫的權限。");
}
else
{
exit_msg("數據成功備份至服務器 $filename 中。");
}
}
else
{
exit_msg("無法打開你指定的目錄". $filename .",請確定該目錄是否存在,或者是否有相應權限");
}
}
else
{
exit_msg("您沒有輸入備份文件名,請返回修改。");
}
}
// 保存到服務器結束
}
else
{
exit_msg("數據表沒有任何內容");
}
/* 備份數據庫結束 */
zeroleonhart
2006-04-12
打赏
举报
回复
有两种方法,一是复制数据库的文件,二是导出sql语句
iasky
2006-04-12
打赏
举报
回复
$DB是一个mysql类的实例
iasky
2006-04-12
打赏
举报
回复
function sqldumptable($table, $fp=0) {
global $DB;
$tabledump = "DROP TABLE IF EXISTS $table;\n";
$tabledump .= "CREATE TABLE $table (\n";
$firstfield=1;
$fields = $DB->query("SHOW FIELDS FROM $table");
while ($field = $DB->fetch_array($fields)) {
if (!$firstfield) {
$tabledump .= ",\n";
} else {
$firstfield=0;
}
$tabledump .= " $field[Field] $field[Type]";
if (!empty($field["Default"])) {
$tabledump .= " DEFAULT '$field[Default]'";
}
if ($field['Null'] != "YES") {
$tabledump .= " NOT NULL";
}
if ($field['Extra'] != "") {
$tabledump .= " $field[Extra]";
}
}
$DB->free_result($fields);
$keys = $DB->query("SHOW KEYS FROM $table");
while ($key = $DB->fetch_array($keys)) {
$kname=$key['Key_name'];
if ($kname != "PRIMARY" and $key['Non_unique'] == 0) {
$kname="UNIQUE|$kname";
}
if(!is_array($index[$kname])) {
$index[$kname] = array();
}
$index[$kname][] = $key['Column_name'];
}
$DB->free_result($keys);
while(list($kname, $columns) = @each($index)){
$tabledump .= ",\n";
$colnames=implode($columns,",");
if ($kname == "PRIMARY") {
$tabledump .= " PRIMARY KEY ($colnames)";
} else {
if (substr($kname,0,6) == "UNIQUE") {
$kname=substr($kname,7);
}
$tabledump .= " KEY $kname ($colnames)";
}
}
$tabledump .= "\n);\n\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
$rows = $DB->query("SELECT * FROM $table");
$numfields = mysql_num_fields($rows);
while ($row = $DB->fetch_array($rows)) {
$tabledump = "INSERT INTO $table VALUES(";
$fieldcounter=-1;
$firstfield=1;
while (++$fieldcounter<$numfields) {
if (!$firstfield) {
$tabledump.=", ";
} else {
$firstfield=0;
}
if (!isset($row[$fieldcounter])) {
$tabledump .= "NULL";
} else {
$tabledump .= "'".mysql_escape_string($row[$fieldcounter])."'";
}
}
$tabledump .= ");\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
}
$DB->free_result($rows);
}
python第二天学习笔记
课程规划:十五天 现在已经是3.8时代了。准备换教材。跟随3.0以后的版本学,明天重新整理。 第二天 编码规范 命名规则 清楚地说明该变量、函数、类、模块包含的含义 代码缩进 制表符 若干个空格 不能混用 空行分隔 函数或语句块之间用空行来分割 增强可读性 语句分隔 C\JAVA 等使用分号来标识一个语句的结束 Python使用换行来表示该语句的结束 行末 ''来拆分多行语句 基本概念 数据类型 整形 0x0X十六进制 0为前缀八进制 0b0B二进制 浮点型 表示实数 大部分情况表示小数 复数 同复数规则
python学习笔记(自用)第二天
python自学笔记
Python学习笔记第二天(Python基本语句)
Python学习笔记第二天讲解行与缩进 关键字 数据类型的用法。
python学习笔记 第二天
比较(即关系)运算符 python中的比较运算符如下表: 运算符 描述 示例 == 检查两个操作数的值是否相等,如果是则条件变为真 如a=3,b=3则( a == b)为true. != 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 如a=1,b=3则(a l= b)为true. <> 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 如a=1,b=3(a <> b)为true.这个类似于=运算符 > 检查左操作数的值是否大于右操
Python学习笔记 第二天
第二章 Python基础(一) 1.学习一门新语言的方法【类比学习 选择基本点,参考,类 比 彼此对照】 a.变量 【常量】 b.数据类型 整型 字符 浮点 c.控制语句 if while switch--case for break continue d.特殊的数据类型 e.面向对象的特点 ...
基础编程
21,889
社区成员
140,329
社区内容
发帖
与我相关
我的任务
基础编程
从PHP安装配置,PHP入门,PHP基础到PHP应用
复制链接
扫一扫
分享
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章