PHP代码实现数据库定时备份和还原

更新时间:2023-03-21 编辑:创始人 关注人次:0 新格搜索


ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去$interval=60*30;// 每隔半小时运行do{//这里是你要执行的代码 添加备份php或者还原的php的脚本,sleep($interval);// 等待5分钟}while(true);一、备份数据库

ignore_user_abort();//关掉浏览器,PHP脚本也可以继续执行.
set_time_limit(0);// 通过set_time_limit(0)可以让程序无限制的执行下去
$interval=60*30;// 每隔半小时运行
do{
//这里是你要执行的代码 添加备份php或者还原的php的脚本,
sleep($interval);// 等待5分钟
}while(true);

一、备份数据库并下载到本地【db_backup.php】

Php代码

<?php   // 设置SQL文件保存文件名   $filename=date("Y-m-d_H-i-s")."-".$cfg_dbname.".sql";   // 所保存的文件名   header("Content-disposition:filename=".$filename);   header("Content-type:application/octetstream");   header("Pragma:no-cache");   header("Expires:0");   // 获取当前页面文件路径,SQL文件就导出到此文件夹内   $tmpFile = (dirname(__FILE__))."\\".$filename;   // 用MySQLDump命令导出数据库   exec("mysqldump -u$cfg_dbuser -p$cfg_dbpwd --default-character-set=utf8 $cfg_dbname > ".$tmpFile);   $file = fopen($tmpFile, "r"); // 打开文件   echo fread($file,filesize($tmpFile));   fclose($file);   exit;   ?>

二、还原数据库【db_restore.php】

Php代码

<form id="form1" name="form1" method="post" action="">   【数据库SQL文件】:<input id="sqlFile" name="sqlFile" type="file" />   <input id="submit" name="submit" type="submit" value="还原" />   </form>   <?php   // 我的数据库信息都存放到config.php文件中,所以加载此文件,如果你的不是存放到该文件中,注释此行即可;   require_once((dirname(__FILE__).'/../../include/config.php'));   if ( isset ( $_POST['sqlFile'] ) )   {   $file_name = $_POST['sqlFile']; //要导入的SQL文件名   $dbhost = $cfg_dbhost; //数据库主机名   $dbuser = $cfg_dbuser; //数据库用户名   $dbpass = $cfg_dbpwd; //数据库密码   $dbname = $cfg_dbname; //数据库名   set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入   $fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件   mysql_connect($dbhost,<mark>6来源gaodaimacom搞#^代%!码网</mark><strong>搞gaodaima代码</strong> $dbuser, $dbpass) or die("不能连接数据库 $dbhost");//连接数据库   mysql_select_db($dbname) or die ("不能打开数据库 $dbname");//打开数据库   echo "<p>正在清空数据库,请稍等....<br>";   $result = mysql_query("SHOW tables");   while ($currow=mysql_fetch_array($result))   {   mysql_query("drop TABLE IF EXISTS $currow[0]");   echo "清空数据表【".$currow[0]."】成功!<br>";   }   echo "<br>恭喜你清理MYSQL成功<br>";   echo "正在执行导入数据库操作<br>";   // 导入数据库的MySQL命令   exec("mysql -u$cfg_dbuser -p$cfg_dbpwd $cfg_dbname < ".$file_name);   echo "<br>导入完成!";   mysql_close();   }   ?>


网上摘抄2:

前段时间主机提供商服务器发生了问题,让人郁闷的事是将数据恢复到了一星期以前,导致好些博客数据丢失。
痛定思痛,想出了一个自动备份网站数据的方法。
1. 在服务器上实现数据转成SQL
为了实现服务器上的数据转成SQL脚本,需要在服务器上放一个PHP文件,这个PHP文件的目的是连接到数据库,然后将数据读取出来,最后再转成SQL。例如,我们放一个tosql.php文件在服务器htdocs目录,内容如下:

<?phperror_reporting(E_ALL & ~E_NOTICE);include_once 'application/configs/dbconfig.php';include_once 'application/includes/db.class.php';header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');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: text/plain; charset=utf-8");$db = new db();$db->connect($config['db']['host'], $config['db']['user'], $config['db']['pass']);$db->select_db($config['db']['name']);$db->query('set names utf8');$sqldump = '';//  我的表名都以tbs_开头$sql = "SHOW TABLE STATUS WHERE name like 'tbs_%'";$query = $db->query($sql);while($table = $db->fetch_array($query)) {    $sqldump .= sql_dumptable($table['Name']);}echo $sqldump;  function sql_dumptable($table) {  global $db;    $tabledump = "DROP TABLE IF EXISTS $table;\n";  $createtable = $db->query("SHOW CREATE TABLE $table");  $create = $db->fetch_array($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_array($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;}

2. 在本地新增一个PHP文件,目的是从服务器上获取SQL基本,然后写入到本地文件。这个PHP文件取名为nextdata.php,内容如下:

<?php$filename = dirname(__FILE__) . '/data/tbs_' . date('YmdHis', mktime() + 3600 * 8) . '.sql';$sqldump = file_get_contents('http://www.nextphp.com/tosql.php');file_put_contents($filename, $sqldump);

3. 实现定时备份
本地使用的是Windows操作系统,可以使用计划任务定时的执行备份任务,这样需要一个批处理文件。批处理文件名称为nextdata.bat,内如如下:

D:\wamp\bin\php\php5.3.5\php nextdata.php

经过上述三个步骤后,我们的计划任务就会定时的执行服务器上的tosql.php文件,然后将其内容写入到本地,从而实现了数据库的备份任务。

分享到微信
本文地址: http://www.goz.cn/a/news/chengxudaima/2023-03/show-663.html 点击链接地址复制。
上一篇:什么是域名劫持和域名污染 下一篇:修改百度在线编辑器(UEDITOR)自动排版首行缩进四个字符问题

服务支持

我们珍惜您每一次在线咨询,有问必答;用专业的技术,贴心的服务,解答您的开发疑问。

让您真正感受到我们的服务态度和专业技术!