Linux下Mysql数据库备份与还原

1.数据库列表展示

首先要查找数据库文件,获取文件信息,并已列表的形式展示:

$backup_path = 'www/wwwroot/database'; //包含数据库文件夹地址
$file = self::scandirFolder($backup_path);
$list=[];
if(!empty($file)){
    foreach($file as $k=>$v){
        $list[$k]['file_name']=$v;
        $res = get_headers(http() . '/backup/database/'.$v,true);
        //四舍五入获取文件大小,单位M;
        $list[$k]['file_size']=round($res['Content-Length']/1024/1024,2);
    }
}
/**
 * @param $dir
 * @param array $filter
 * @return array
 * 获取目录下目录
 */
function scandirFolder($path)
{
    $list     = [];
    $temp_list = scandir($path);
    foreach ($temp_list as $file)
    {
        //排除根目录
        if ($file != ".." && $file != ".")
        {
            if (is_dir($path . "/" . $file))
            {
                //子文件夹,进行递归
                $list[$file] = self::scandirFolder($path . "/" . $file);
            }
            else
            {
                //根目录下的文件
                $list[] = $file;
            }
        }
    }
    return $list;
}
/**
 * @param $dir /目录
 * @param string $ext 指定文件
 * @return array
 * 获取目录下文件
 */
public function getDirFile($dir, $ext = 'php', $del_ext = false)
{
    $res = scandir($dir);
    foreach ($res as $k => $dir_path) {
        if (!is_file($dir . DIRECTORY_SEPARATOR . $dir_path)) {
            unset($res[$k]);
        } else {
            if (!empty($ext) && pathinfo($dir_path, 4) !== $ext) {
                unset($res[$k]);
            }
            if ($del_ext) {
                $res[$k] = str_replace('.' . pathinfo($dir_path, 4), '', $dir_path);
            }
        }

    }
    rsort($res);
    return $res;
}

这样获取到数据库文件列表,输出前台展示

2.数据备份

//设置时区
 date_default_timezone_set("Asia/Shanghai");
 /*********************************备份数据库start*********数据库大小100G以下*******************/
                $db_user='';//数据库账号
                $db_pwd='';//数据库密码
                $db_name='';//数据库名
                //固定格式
                $filename='db_'.$database['database'].'_'. date("Ymd")."_".date("His");
                $name=根路径.'database' . DIRECTORY_SEPARATOR.$filename. '.sql.gz';//数据库文件存储路径
                //已压缩包的形式备份
                $exec="/www/server/mysql/bin/mysqldump -u".$db_user." -p".$db_pwd." ".$db_name." | gzip > ".$name;
                $result=exec($exec);//注意 php要放开禁用函数exec

3.数据库还原

/*********************************还原数据库start******数据库大小100G以下**********************/
$db_user='';//数据库账号
$db_pwd='';//数据库密码
$db_name='';//数据库名
$filename=$param_name;
$name=根路径 . 'database' . DIRECTORY_SEPARATOR.$filename;//数据库文件存储路径
//先解压,再还原
$exec="gunzip < ".$name." |/www/server/mysql/bin/mysql  -u".$db_user." -p".$db_pwd." ".$db_name." >/dev/null  &";
$result=exec($exec);

猜你喜欢

转载自blog.csdn.net/echozly/article/details/122235534