zoukankan      html  css  js  c++  java
  • 数据库备份的两种方法

    数据库备份是必要的一般都是使用mysqldump进行备份,我这边写了两种备份方法可以参考一下。

    第一种:使用mysqldump结合exec函数进行数据库备份操作。

    代码如下:

    /**
     * Subject: php-mysql 实现数据库备份.
     * User: luokakale
     * Date: 2018/11/9
     * Time: 13:31
     */
    
    header('Content-Type:text/html;charset=utf8');
    ini_set("max_execution_time", "0");//代码运行时间不限制  防止备份失败
    ini_set('memory_limit', '128M');//设置内存 根据需求可以修改
    date_default_timezone_set("PRC");
    //创建需要保存sql文件的文件夹
    $path = 'D:SQLdatabse_backup';
    //定义数据库配置
    $user = ''; //数据库账户
    $pwd  = ''; //数据库密码
    $dbname = ''; //数据库名称
    
    //备份数据库命令地址文件
    $sqladdress = 'D:phpStudyMySQLinmysqldump.exe';
    
    //备份指定地址
    $time = time();
    $path = 'D:SQLdatabse_backup'.'\'.date("Ymd",$time);
    if(!file_exists($path))
    {
        mkdir($path,0777,true);
    }
    
    //备份的数据库文件名
    $sqlFile = $dbname."_%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%.sql";
    //判断是否存在密码
    $password = $pwd== ''?'':'  -p'.$pwd;
    //拼接备份命令
    $order =  $sqladdress.' --opt  -u'.$user.$password.' '.$dbname.' >'.$path.'\'.$sqlFile;
    //执行命令
    exec($order);

    我使用的是集成的phpstudy里面的mysql下面的mysqldump.exe来备份,备份的数据库名字写法是 数据库名字+年月日时.  上面代码中我对数据库密码进行了判断,我这边有些数据库是不需要密码的。最后使用exec执行命令。

    第二种:使用php+mysql+header函数进行数据库备份和下载操作。

    代码如下:

    header('Content-Type:text/html;charset=utf8');
    ini_set("max_execution_time", "0");//代码运行时间不限制  防止备份失败
    ini_set('memory_limit', '1024M');//设置内存 根据需求可以修改
    date_default_timezone_set("PRC");
    header("Content-Type:text/html;charset=utf-8");
    $host="";
    $user="";//账户
    $password="";//密码
    $dbname="";//数据库名称
    $con =  mysqli_connect("$host","$user","$password","$dbname");
    mysqli_select_db($con,$dbname);
    $mysql= "set charset utf8;
    ";#for mysql>=5.0
    mysqli_query($con,"SET NAMES 'UTF8'");
    $q1=mysqli_query($con,"show tables");
    while($t=mysqli_fetch_array($q1)){
        $table=$t[0];
        $q2=mysqli_query($con,"show create table `$table`");
        $sql=mysqli_fetch_array($q2);
        $mysql.=$sql['Create Table'].";
    
    ";#DDL
        $q3=mysqli_query($con,"select * from `$table`");
        while($data=mysqli_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);
    ";
            unset($data);
        }
        $mysql.="
    ";
        unset($t);
    }
    mysqli_close($con);
    $filename=date('Ymj').".sql"; //文件名为当天的日期
    $time = time();
    $path = 'D:SQLdatabse_backup'.'\'.date("Ymd",$time).'\';
    // 检查目录是否存在
    if(!is_dir($path)){
        // 新建目录
        mkdir($path, 0777, true);
    }
    $file_name = $path.$filename;
    $fp = fopen($file_name,'w');
    fputs($fp,$mysql);
    fclose($fp);
    $fp=fopen($file_name,"r");
    $file_size=filesize($file_name);
    header("Content-type: application/octet-stream");
    header("Accept-Ranges: bytes");
    header("Accept-Length: ".$file_size);
    header("Content-Disposition: attachment; filename=".$filename);
    //这里一定要使用echo 进行输出,否则下载的文家是空白的
    echo fread($fp,$file_size);
    fclose($fp);
    exit;

    个人建议用第一种,第二种太消耗内存了。

    第一种可以做成定时备份,windows下可以用定时任务。

    本文属原创内容,为了尊重他人劳动,转载请注明本文地址:

    https://www.cnblogs.com/luokakale/p/9935772.html

  • 相关阅读:
    JMeter中的HTTPS套接字错误
    使用JMETER进行REST API测试(分步指南)
    JMeter BeanShell示例
    未能载入软件包“WebDriverAgentRunner”,因为它已损坏或丢失必要的资源。
    ERROR: Could not connect to lockdownd, error code -19 -20
    (转)Selenium-11: Execute JavaScript with JavascriptExecutor
    在服务器上使用 gradle 打包 android 源码
    poi+properties文件实现多环境测试数据一键切换
    cocos2D-X 常用功能封装
    MD5 AND JSON AND XML
  • 原文地址:https://www.cnblogs.com/luokakale/p/9935772.html
Copyright © 2011-2022 走看看