laravel 数据库备份和数据恢复

本文详细介绍了如何使用PHP实现数据库的自动备份与手动恢复过程,包括从环境配置到执行具体命令的完整步骤,适用于需要定期进行数据备份及快速恢复场景的技术人员。

    /**
     * 数据备份
     */
    public function database_beifen(){

        $DB_HOST = getenv('DB_HOST');
        $DB_DATABASE = getenv('DB_DATABASE'); //从配置文件中获取数据库信息
        $DB_USERNAME = getenv('DB_USERNAME');
        $DB_PASSWORD = getenv('DB_PASSWORD');

        $dumpfname = $DB_DATABASE . "_" . date("Y-m-d_H-i-s").".sql";
        $command = "F:\\phpStudy2016\\MySQL\\bin\\mysqldump --add-drop-table --host=$DB_HOST --user=$DB_USERNAME ";//mysql的地址,改成自己机器上的实际地址
        if ($DB_PASSWORD) $command.= "--password=". $DB_PASSWORD ." ";
        $command.= $DB_DATABASE;
        $command.= " > " . $dumpfname;
        system($command);

        return make_json_result(0,'备份成功',$dumpfname);
    }

    /**
     * 数据恢复
     */
    public function database_huifu(Request $request){
        $input = \Input::except('_token');
        $path = public_path();

        $file_name = $path.'\\'.$input['sql'];  //要导入的SQL文件名
        $file_name = str_replace('\\','/',$file_name);

        $DB_HOST = getenv('DB_HOST');
        $DB_DATABASE = getenv('DB_DATABASE'); //从配置文件中获取数据库信息
        $DB_USERNAME = getenv('DB_USERNAME');
        $DB_PASSWORD = getenv('DB_PASSWORD');

        set_time_limit(0); //设置超时时间为0,表示一直执行。当php在safe mode模式下无效,此时可能会导致导入超时,此时需要分段导入
        $fp = @fopen($file_name, "r") or die("不能打开SQL文件 $file_name");//打开文件
        //dd($fp);
        @mysql_connect($DB_HOST, $DB_USERNAME, $DB_PASSWORD) or die("不能连接数据库 $DB_HOST");//连接数据库
        @mysql_select_db($DB_DATABASE) or die ("不能打开数据库 $DB_DATABASE");//打开数据库

        echo "<p>正在清空数据库,请稍等....<br>";
        $result = mysql_query("SHOW tables");
        //dd($result);
        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命令
        //echo "mysql -u$DB_USERNAME -p$DB_PASSWORD $DB_DATABASE < ".$file_name;
        //echo "source ".$file_name;
        //exec("source ".$file_name);
        $_sql = file_get_contents($file_name);
        $_arr = explode(';', $_sql);
        //dd($_arr);
        foreach ($_arr as $_value) {
            mysql_query("SET NAMES 'utf8'");
            mysql_query($_value.';');
        }
        echo "<br>导入完成!";
        mysql_close();
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值