mysql定时备份

来源:互联网 发布:学完c语言之后学java 编辑:程序博客网 时间:2024/06/05 04:14

引言

大项目中的数据库备份是必不可少的,否则一旦出现大问题就GG了,虽然本文是讲述利用PHP实现数据库定时备份,但是这并不是好的方案

想要定时备份数据库,最快捷安全的方法就是利用shell脚本了,功能强大操作方便,而且执行速度极快,不像PHP还需要被apache解析一把。。

当然,不管是用php定时备份,还是shell脚本定时备份,都离不开crontab这玩意,毕竟它才是真正的定时器,这里粗略的说一下crontab吧

crontab使用简介

crontab常用基础命令

  • crontab -e //编辑定时任务,默认以VI打开
  • crontab -l //列出当前的定时任务
  • crontab -r //删除定时任务

任务格式 :

 *    *    *    *    *       program                 分   时    日   月   星期       命令
  • 1
  • 2
  • 1
  • 2

crontab这里就不多说了,有兴趣的可以搜查相关的资料。

当然 ,还有MySQL数据库备份的命令

  • mysqldump -h host -u user_name -ppassword database_name > filename 备份全数据
  • mysqldump -h host -u user_name -ppassword database_name –no-data > filename 只备份表结构
  • mysqldump -h host -u user_name -ppassword database_name –no-create-info > filename 只备份数据

注:-ppassword中间是没有空格的

这里都是些简介,不够详细,但是足够使用了,接下来看代码:

相关代码

DB_config.php

<?php return array(    'db_host'  => '127.0.0.1', //主机地址    'db_name'  => 'root', //数据库名    'db_user'  => 'root', //username    'db_pwd'   => 'root', //password    'db_back_path' => '/home/db_back', //备份目录,建议使用绝对路径    'back_file_suffix' => 'aaa', //备份文件的后缀名    //type = 1  back all 备份数据和表结构    //type = 2  just back table structure 只备份表结构    //type = 3  just back table data  只备份表数据    'back_type' => 1) ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

DB_config.php

<?php class DB_back {    //这里是默认配置    private $db_config = array(        'db_host'  => '127.0.0.1',        'db_name'  => 'ftdtian',        'db_user' => 'root',        'db_pwd'  => '123',        'db_back_path' => '/home/db_back',        'back_file_suffix' => 'bak',        //type = 1  back all        //type = 2  just back table structure        //type = 3  just back table data        'back_type' => 3    );    //备份文件名    private $file_name;    //shell命令    private $back_shell;    public function __construct()    {        //无限制脚本时间        set_time_limit(0);        //设置时区        date_default_timezone_set('PRC');        //merge配置文件        $this->db_config = array_merge($this->db_config,require "DB_config.php");         $this->set_config();    }    //配置config    private function set_config()    {           //当前时间        $date_format = date("Y-m-d-H:i:s",time());        $common_shell = "mysqldump  -h %s -u %s -p%s %s ";        //默认备份文件名(备份表结构和数据)        $file_format = $date_format.'_all.'.$this->db_config['back_file_suffix'];         //默认备份全部的shell        $this->back_shell = $common_shell.' > %s';        switch ($this->db_config['back_type']) {            case '1':                break;            case '2':                //只备份表结构                $file_format = $date_format.'_table_structure.'.$this->db_config['back_file_suffix'];                 $this->back_shell = $common_shell.' --no-data > %s';                break;                //只备份表数据            case '3':                $file_format = $date_format.'_table_data.'.$this->db_config['back_file_suffix'];                 $this->back_shell = $common_shell.' --no-create-info > %s';            default:                break;        }        $this->db_config['db_back_path'] = $this->db_config['db_back_path'].DIRECTORY_SEPARATOR.date("Y-m-d",time());        //创建文件夹        $this->make_dir($this->db_config['db_back_path']);        //构建文件全路径        $this->file_name = $this->db_config['db_back_path'].DIRECTORY_SEPARATOR.$file_format;    }    //创建文件夹    private function make_dir($path , $mode = 0755, $recursive = true)    {        if(!is_dir($path))        {                   mkdir($path,$mode,$recursive);                chmod($path,$mode);              }        return true;    }    //开始备份    public function start_back()    {        //字符串格式名生成shell命令        $shell = sprintf($this->back_shell,$this->db_config['db_host'],$this->db_config['db_user'],$this->db_config['db_pwd'],$this->db_config['db_name'],$this->file_name);        try        {               //执行shell            shell_exec($shell);        }catch (Exception $e)        {            echo $e->getMessage();        }    }}$obj = new DB_back();$obj->start_back(); ?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100

将这两个PHP文件放到同一目录中,我们假设放在/var/www/html/back/下

crontab -e//每天凌晨两点半执行备份30 2 * * * /usr/bin/php  /var/www/html/back/DB_back.php
  • 1
  • 2
  • 3
  • 4
  • 1
  • 2
  • 3
  • 4

整个流程就是这样,如果需要修改相对应的配置,请直接修改DB_config.php配置文件

备注:

  • 在使用php的mkdir时,需要确定当前目录的父目录是否具有相应的写权限,如果没有,请先进入终端进行chmod父目录,否则不会顺利创建目录

代码写的并不好,如有Bug或者建议,感谢指正

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 两岁宝宝出虚汗怎么办 两岁宝宝出水痘怎么办 两岁宝宝爱看手机怎么办 两岁宝宝太好动怎么办 五岁宝宝不会数数怎么办 四岁宝宝算数不好怎么办 两个月宝宝体内有火怎么办 两个月宝宝有火怎么办 2岁宝宝起眼屎怎么办 一周岁的宝宝皮肤过敏怎么办 两岁宝宝脾气倔不听话怎么办 22个月宝宝打人怎么办 两岁宝宝会打人怎么办 3岁哭闹倔强不止怎么办 我儿子二十三岁不爱说话怎么办 2岁宝宝不听话脾气大怎么办 2岁宝宝调皮不听话怎么办 2岁的宝宝不听话怎么办 2岁宝宝总是不听话怎么办 2岁宝宝淘气不听话怎么办 两岁宝宝不听大人的话怎么办? 来月经奶量减少怎么办 月经来了奶少怎么办 来例假奶水少了怎么办 两岁宝宝吐口水怎么办 3岁宝宝不愿自己吃饭怎么办 婆家的人很烦人怎么办 三十了还没结婚怎么办 两岁宝贝断奶粉怎么办 宝宝断了母乳不吃奶粉怎么办 一岁宝宝不爱吃辅食怎么办 断奶后宝宝抗拒奶瓶怎么办 两岁宝宝断奶后不喝奶粉怎么办 两岁宝宝断奶不吃奶粉怎么办 宝宝断奶妈妈涨奶怎么办 三岁宝宝智商低怎么办 宝宝断奶晚上哭的厉害怎么办 2岁宝宝半夜喝奶粉怎么办 两岁宝宝不爱吃饭怎么办 快两岁的宝宝不爱吃饭怎么办 宝宝断奶后不愿意喝奶粉怎么办