使用PHP备份MYSQL数据的多种方法


Posted in PHP onJanuary 15, 2014

下面提供两种方法,仅供研究使用。

第1种方法:

<?php
$host="localhost";
$user="root";
$password="";
$dbname="dbname";
mysql_connect($host,$user,$password);
mysql_select_db($dbname);
$mysql= "set names utf8;";
mysql_query($mysql);
$q1=mysql_query("show tables");
while($t=mysql_fetch_array($q1)){
$table=$t[0];
$q2=mysql_query("show create table `$table`");
$sql=mysql_fetch_array($q2);
$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";
}
$filename=$dbname.date('Ymj').".sql";
$fp = fopen($filename,'w');
fputs($fp,$mysql);
fclose($fp);
echo "数据备份成功,生成备份文件".$filename;
?>

第2种方法:

<?php
$host="localhost";
$user="root";
$password="";
$dbname="dbname";
backup_tables($host,$user,$password,$dbname);
/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*')
{
  $link = mysql_connect($host,$user,$pass);
  mysql_select_db($name,$link);
  //get all of the tables
  if($tables == '*')
  {
    $tables = array();
    $result = mysql_query('SHOW TABLES');
    while($row = mysql_fetch_row($result))
    {
      $tables[] = $row[0];
    }
  }
  else
  {
    $tables = is_array($tables) ? $tables : explode(',',$tables);
  }
  $return = '';
  //cycle through
  foreach($tables as $table)
  {
    $result = mysql_query('SELECT * FROM '.$table);
    $num_fields = mysql_num_fields($result);    
    $return.= 'DROP TABLE '.$table.';';
    $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
    $return.= "\n\n".$row2[1].";\n\n";
    for ($i = 0; $i < $num_fields; $i++) 
    {
      while($row = mysql_fetch_row($result))
      {
        $return.= 'INSERT INTO '.$table.' VALUES(';
        for($j=0; $j<$num_fields; $j++) 
        {
          $row[$j] = addslashes($row[$j]);
          $row[$j] = ereg_replace("\n","\\n",$row[$j]);
          if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
          if ($j<($num_fields-1)) { $return.= ','; }
        }
        $return.= ");\n";
      }
    }
    $return.="\n\n\n";
  }
  //save file
  $handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+');
  fwrite($handle,$return);
  fclose($handle);
}
?>
PHP 相关文章推荐
以文本方式上传二进制文件的PHP程序
Oct 09 PHP
smarty实例教程
Nov 19 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
Dec 02 PHP
php实现查看邮件是否已被阅读的方法
Dec 03 PHP
PHP数字和字符串ID互转函数(类似优酷ID)
Jun 30 PHP
PHP处理JSON字符串key缺少双引号的解决方法
Sep 16 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
学习php设计模式 php实现桥梁模式(bridge)
Dec 07 PHP
PHP页面跳转操作实例分析(header方法)
Sep 28 PHP
弹出模态框modal的实现方法及实例
Sep 19 PHP
php安装扩展mysqli的实现步骤及报错解决办法
Sep 23 PHP
Yii框架中用response保存cookie,用request读取cookie的原理解析
Sep 04 PHP
PHP编程风格规范分享
Jan 15 #PHP
php object转数组示例
Jan 15 #PHP
windows下PHP_intl.dll正确配置方法(apache2.2+php5.3.5)
Jan 14 #PHP
PHP类继承 extends使用介绍
Jan 14 #PHP
那些年我们错过的魔术方法(Magic Methods)
Jan 14 #PHP
PHP mail()函数使用及配置方法
Jan 14 #PHP
PHP 登录完成后如何跳转上一访问页面
Jan 14 #PHP
You might like
WinXP + Apache +PHP5 + MySQL + phpMyAdmin安装全功略
2006/07/09 PHP
使用PHP遍历文件夹与子目录的函数代码
2011/09/26 PHP
php正则表达式使用的详细介绍
2013/04/27 PHP
修改apache配置文件去除thinkphp url中的index.php
2014/01/17 PHP
php 创建以UNIX时间戳命名的文件夹(示例代码)
2014/03/08 PHP
CodeIgniter实现更改view文件夹路径的方法
2014/07/04 PHP
Laravel框架中自定义模板指令总结
2017/12/17 PHP
刷新时清空文本框内容的js代码
2007/04/23 Javascript
Javascript this关键字使用分析
2008/10/21 Javascript
ImageZoom 图片放大镜效果(多功能扩展篇)
2010/04/14 Javascript
js中document.getElementByid、document.all和document.layers区分介绍
2011/12/08 Javascript
jQuery查找节点并获取节点属性的方法
2016/09/09 Javascript
React Native实现简单的登录功能(推荐)
2016/09/19 Javascript
js格式化时间的简单实例
2016/11/27 Javascript
AngularJS双向绑定和依赖反转实例详解
2017/04/15 Javascript
关于使用axios的一些心得技巧分享
2017/07/02 Javascript
Angular 中使用 FineReport不显示报表直接打印预览
2019/08/21 Javascript
[55:44]OG vs NAVI 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
Python中声明只包含一个元素的元组数据方法
2014/08/25 Python
利用Python获取操作系统信息实例
2016/09/02 Python
Python使用sftp实现上传和下载功能(实例代码)
2017/03/14 Python
Python之文字转图片方法
2018/05/10 Python
numpy 声明空数组详解
2019/12/05 Python
解决pytorch DataLoader num_workers出现的问题
2020/01/14 Python
python使用openCV遍历文件夹里所有视频文件并保存成图片
2020/01/14 Python
如何查找和删除数据库中的重复数据
2014/11/05 面试题
Prototype是怎么扩展DOM的
2014/10/01 面试题
思想品德课教学反思
2014/02/10 职场文书
成品库仓管员岗位职责
2014/04/06 职场文书
2014教师党员自我评议(5篇)
2014/09/20 职场文书
高一语文教学反思
2016/02/16 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python
Vue的生命周期一起来看看
2022/02/24 Vue.js
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android
Python使用BeautifulSoup4修改网页内容
2022/05/20 Python