资讯专栏INFORMATION COLUMN

透过 Crontab 排程备份 Mariadb (Mysql)使用 php

zhkai / 1801人阅读

摘要:本教学使用环境介绍伺服器端资料库语言版本本机端本教学将使用纯去备份资料库并下载到目录底下设定每天凌晨执行脚本记得开头一定要,即便你有启用缩写备份后的名称资料库设定资料库使用者帐

本教学使用环境介绍
伺服器端:Ubuntu 18.04 LTS
资料库:Mariadb 10.1.34(Mysql)
语言版本:php 7.3
本机端:MacOS High Sierra

本教学将使用纯 php 去备份资料库并下载到目录底下

$ crontab -e

设定每天凌晨00:00 执行

0 0 * * * php /var/www/backup.php

backup.php 脚本记得开头一定要 「

header("Content-Type: text/html; charset=utf-8");
function backup_mysql_database($options){
$mtables = array(); $contents = "-- Database: `".$options["db_to_backup"]."` --
";

$mysqli = new mysqli($options["db_host"], $options["db_uname"], $options["db_password"], $options["db_to_backup"]);
if ($mysqli->connect_error) {
    die("Error : (". $mysqli->connect_errno .") ". $mysqli->connect_error);
}
$mysqli->query("SET NAMES utf8");
$mysqli->set_charset("utf8mb4");
$results = $mysqli->query("SHOW TABLES");

while ($row = $results->fetch_array()){
    if (!in_array($row[0], $options["db_exclude_tables"])){
        $mtables[] = $row[0];
    }
}

foreach($mtables as $table){
    $contents .= "-- Table `".$table."` --
";

    $results = $mysqli->query("SHOW CREATE TABLE ".$table);
    while ($row = $results->fetch_array()){
        $contents .= $row[1].";

";
    }

    $results = $mysqli->query("SELECT * FROM ".$table);
    $row_count = $results->num_rows;
    $fields = $results->fetch_fields();
    $fields_count = count($fields);

    $insert_head = "INSERT INTO `".$table."` (";
    for($i=0; $i < $fields_count; $i++){
        $insert_head .= "`".$fields[$i]->name."`";
            if($i < $fields_count-1){
                    $insert_head .= ", ";
                }
    }
    $insert_head .= ")";
    $insert_head .= " VALUES
";

    if($row_count>0){
        $r = 0;
        while ($row = $results->fetch_array()){
            if(($r % 400) == 0){
                $contents .= $insert_head;
            }
            $contents .= "(";
            for($i=0; $i < $fields_count; $i++){
                $row_content = str_replace("
","
",$mysqli->real_escape_string($row[$i]));

                switch($fields[$i]->type){
                    case 8: case 3:
                        $contents .= $row_content;
                        break;
                    default:
                        $contents .= """. $row_content .""";
                }
                if($i < $fields_count-1){
                        $contents .= ", ";
                    }
            }
            if(($r+1) == $row_count || ($r % 400) == 399){
                $contents .= ");

";
             } else {
                $contents .= "),
";
            }
            $r++;
        }
    }
}

if (!is_dir ( $options["db_backup_path"] )) {
        mkdir ( $options["db_backup_path"], 0777, true );
 }

## 备份后的 sql 名称
$backup_file_name = "dev-" . date( "Y-m-d H:i:s").".sql";

$fp = fopen($options["db_backup_path"] . "/" . $backup_file_name ,"w+");
if (($result = fwrite($fp, $contents))) {
   // echo "Backup file created "$backup_file_name" ($result)";

}
fclose($fp);
return $backup_file_name;
}

## 资料库设定
$options = array(
    "db_host"=> "localhost",
    "db_uname" => "root", // 资料库使用者帐号
    "db_password" => "password", // 资料库密码
    "db_to_backup" => "db", // 资料库名称
    "db_backup_path" => "/var/www/", // 保存到哪个路径
    "db_exclude_tables" => array()
);
$backup_file_name=backup_mysql_database($options);

这样就可以透过 php 备份到该主机下,直接产生 sql 档了。

Line ID:ianmac
QQ:1258554508

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/31243.html

相关文章

  • 透过 Crontab 排程备份 MariadbMysql使用 php + exec + mys

    摘要:本教学使用环境介绍伺服器端资料库语言版本本机端一开始原本是用去备份资料库,但是发现会有一些问题,于是改成这种方式,直接透过去备份,出来的格式也不会有什么问题。 本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra 一开始原本是用 php 去备份资料库,但是发现会...

    mingzhong 评论0 收藏0
  • 透过 Crontab 排程备份 MariadbMysql使用 php + exec + mys

    摘要:本教学使用环境介绍伺服器端资料库语言版本本机端一开始原本是用去备份资料库,但是发现会有一些问题,于是改成这种方式,直接透过去备份,出来的格式也不会有什么问题。 本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra 一开始原本是用 php 去备份资料库,但是发现会...

    felix0913 评论0 收藏0
  • 透过 Crontab 排程备份 MariadbMysql使用 php

    摘要:本教学使用环境介绍伺服器端资料库语言版本本机端本教学将使用纯去备份资料库并下载到目录底下设定每天凌晨执行脚本记得开头一定要,即便你有启用缩写备份后的名称资料库设定资料库使用者帐 本教学使用环境介绍伺服器端:Ubuntu 18.04 LTS资料库:Mariadb 10.1.34(Mysql)语言版本:php 7.3本机端:MacOS High Sierra 本教学将使用纯 php 去备份...

    TerryCai 评论0 收藏0
  • Linux crontab 访问PHP URL完成定时任务

    摘要:而我本人需要完成的任务是定时访问一个文件链接去生成,所以访问就不能用去完成,而是要用。本站的这篇下执行定时任务命令详解写的非常详细,建议看一下。 crontab -e 新建/编辑一个任务crontab -l 列出所有任务 crontab 格式: 基本格式 :分钟 小时 日 月 星期 命令第1列表示分钟1~59 每分钟用或者 /1表示第2列表示小时1~23(0表示0点...

    zhangyucha0 评论0 收藏0
  • Linux crontab 访问PHP URL完成定时任务

    摘要:而我本人需要完成的任务是定时访问一个文件链接去生成,所以访问就不能用去完成,而是要用。本站的这篇下执行定时任务命令详解写的非常详细,建议看一下。 crontab -e 新建/编辑一个任务crontab -l 列出所有任务 crontab 格式: 基本格式 :分钟 小时 日 月 星期 命令第1列表示分钟1~59 每分钟用或者 /1表示第2列表示小时1~23(0表示0点...

    QiuyueZhong 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<