使用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 相关文章推荐
mysql5详细安装教程
Jan 15 PHP
php目录操作函数之获取目录与文件的类型
Dec 29 PHP
那些年一起学习的PHP(二)
Mar 21 PHP
PHP 读取大文件的X行到Y行内容的实现代码
Jun 24 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
标准PHP的AES加密算法类
Mar 12 PHP
php使用Jpgraph绘制饼状图的方法
Jun 10 PHP
php实现QQ空间获取当前用户的用户名并生成图片
Jul 25 PHP
详解WordPress开发中用于获取分类及子页面的函数用法
Jan 08 PHP
PHP类的自动加载机制实现方法分析
Jan 10 PHP
thinkPHP+LayUI 流加载实现功能
Sep 27 PHP
PHP Swoole异步Redis客户端实现方法示例
Oct 24 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
第九节--绑定
2006/11/16 PHP
php 分页函数multi() discuz
2009/06/21 PHP
使用PHP提取视频网站页面中的FLASH地址的代码
2010/04/17 PHP
PHP中类的自动加载的方法
2017/03/17 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
Ext 今日学习总结
2010/09/19 Javascript
自制轻量级仿jQuery.boxy对话框插件代码
2010/10/26 Javascript
一个JQuery写的点击上下滚动的小例子
2011/08/27 Javascript
Jquery.addClass始终无效原因分析
2013/09/08 Javascript
JavaScript表格常用操作方法汇总
2015/04/15 Javascript
学习AngularJs:Directive指令用法(完整版)
2016/04/26 Javascript
轮播的简单实现方法
2016/07/28 Javascript
jQuery插件扩展实例【添加回调函数】
2016/11/26 Javascript
vue 请求后台数据的实例代码
2017/06/22 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
js模块加载方式浅析
2017/08/12 Javascript
浅析从vue源码看观察者模式
2018/01/29 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
解决python3 urllib中urlopen报错的问题
2017/03/25 Python
python 读取鼠标点击坐标的实例
2018/12/29 Python
Python中三元表达式的几种写法介绍
2019/03/04 Python
python3.7 sys模块的具体使用
2019/07/22 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
解决Keras中循环使用K.ctc_decode内存不释放的问题
2020/06/29 Python
JAVA中运算符的分类及举例
2015/09/12 面试题
岗位职责的含义
2013/11/17 职场文书
商务英语大学生职业生涯规划书范文
2014/01/01 职场文书
师说教学反思
2014/02/07 职场文书
大学专科求职信
2014/07/02 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
幼儿园教师节演讲稿
2014/09/03 职场文书
结婚保证书
2015/01/16 职场文书
三八妇女节寄语
2015/02/27 职场文书
2015选调生工作总结
2015/07/24 职场文书
Python使用protobuf序列化和反序列化的实现
2021/05/19 Python
Python实现制作销售数据可视化看板详解
2021/11/27 Python