MY数据库备份策略之MySQL

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_42018518/article/details/88886694

目录

一、备份策略结构树形图

二、当前备份系统支持备份方式

三、备份脚本

四、目录介绍

五、备份状态监控提醒

六、数据库备份脚本

七、涉及备份信息数据库

八、innobackupex的介绍


一、备份策略结构树形图

  1  (备份存储机器,需部署)xx.xx.5.16:/home/backup_mysql_wufei/

  2 ├── backup

  3 │   ├── mysql_xxxx_bim_3220

  4 │   │   ├── full_2018-06-12_21-34-31_2

  5 │   │   └── full_2018-06-13_13-10-45_3

  6 │   └── mysql_xxxx_im_3215

  7 │       └── full_2018-06-13_11-49-48_3

  8 ├── bin

  9 │   ├── xxxx_xtrabackup_wf.sh

 10 │   └── mysql_template_backup.sh

 11 ├── binlogs

 12 │   ├── mysql_xxxx_bim_3220

 13 │   └── mysql_xxxx_im_3215

 14 ├── conf

 15 │   ├── xxxx_mysql_backup_wf.conf

 16 │   └── higo_mysql_template_wf.conf

 17 ├── log

 18 │   ├── db_backup_3215_180613_114948.log

 19 │   ├── db_backup_3220_180612_213431.log

 20 │   ├── db_backup_3220_180613_131045.log

 21 │   ├── full_2018-06-12_21-34-31_2_higo_bim_3220.log

 22 │   ├── full_2018-06-13_11-49-48_3_higo_im_3215.log

 23 │   └── full_2018-06-13_13-10-45_3_higo_bim_3220.log

 24 └── var

 25     ├── mysql_xxxx_bim_3220.err

 26     ├── mysql_xxxx_bim_3220.index

 27     ├── mysql_xxxx_im_3215.err

 28     ├── mysql_xxxx_im_3215.index

 29     ├── mysql_xxxx_backup.err

 30     └── mysql_xxxx_backup.index

  

 1  (备份调度机器,需部署)xx.xx.1.49:/home/wufei/

 2 ├── backup_controll

 3 │   ├── backup_controll_wf.sh

 4 │   └── log

 5 │       ├── xxxx_bim_3220.log

 6 │       └── xxxx_im_3215.log

 7 └── percona-xtrabackup-2.4.7-Linux-x86_64.tar.gz

  1  (备份执行机器,均为自动化生成)xx.xx.0.70:/data/percona-xtrabackup/

  2 ├── backup_mysql_wufei

  3 │   ├── backup

  4 │   │   └── mysql_xxxx_bim_3220

  5 │   │       └── full_2018-06-13_13-10-45_3

  6 │   ├── bin

  7 │   │   └── mysql_template_backup.sh

  8 │   ├── conf

  9 │   │   └── higo_mysql_template_wf.conf

 10 │   ├── log

 11 │   │   └── full_2018-06-13_13-10-45_3_3220.log

 12 │   └── var

 13 │       ├── mysql_xxxx_bim_3220.err

 14 │       ├── mysql_xxxx_bim_3220.index

 15 │       ├── mysql_xxxx_bim_3220.index_2018-06-11

 16 │       └── mysql_xxxx_bim_3220.index_2018-06-12

 17 └── xtrabackup

 18     ├── bin

 19     │   ├── innobackupex -> xtrabackup

 20     │   ├── xbcloud

 21     │   ├── xbcloud_osenv

 22     │   ├── xbcrypt

 23     │   ├── xbstream

 24     │   └── xtrabackup

 25     ├── man

 26     └── percona-xtrabackup-2.4-test

二、当前备份系统支持备份方式

2.1 全量备份

2.2 增量备份

2.3 克隆从库

2.4 其它(可定制,扩展性强)

三、备份脚本

3.1 调度脚本

    path:xx.xx.1.49  /home/wufei/backup_controll/backup_controll_wf.sh

    逻辑:通过计划任务定时执行对应库的备份任务(没有必要采用supervise做守护进程每秒扫描一次db,因为supervise是监控进程状态,异常退出时能自动重启,像我们现在使用的DBProxy就需要,但是数据库备份每个库每天只需备份一次,即便备份时异常终止也不是supervise能够解决的)执行计划如下:

 # crontab -l

# WUFEI的xxxx_bim备份定时任务
10 1 * * * /bin/bash /home/wufei/backup_controll/backup_controll_wf.sh xxxx_bim
# WUFEI的xxxx_im备份定时任务
10 2 * * * /bin/bash /home/wufei/backup_controll/backup_controll_wf.sh xxxx_im

    调度日志:xx.xx.1.49:/home/wufei/backup_controll/log/[db_name]_[port].log

如:xx.xx.1.49:/home/wufei/backup_controll/log/higo_bim_3220.log

日志格式;{backup_db:xxxx_bim;port:3220;type:full;start_datetime:2018-06-13 13:10:43;end_datetime:2018-06-13 13:11:10;info:backup end}

    注意:由于脚本中需要远程ssh,目前公司门神没有在服务器上登记密钥,所以需要把中心机和各个存储的key分发到每台机器上(双向免key:存储和数据库机器),还有记得测试rsync命令,远程俩服务器间第一次使用rsync时需要输入yes.

流程:1)初始化环境;检测是否安装xtrabackup,是否存在备份相关目录等

             2)创建生成备份私有配置文件;防止参数冲突

            3)发起备份;备份数据

            4)发送备份到远程

            5)清理过老的备份和日志等

3.2 默认配置文件

        path:xx.xx.5.16:/home/backup_mysql_wufei/conf/xxxx_mysql_backup_wf.conf

        逻辑:存放所以备份所需的公共参数,一般为默认值(通用值),[xx.xx.1.49 3303 wf_dbbackup db_backup_policy]存放了每个需要备份的MySQL实例的私有参数,备份脚本读取配置文件中的所有变量,设置为全局变量

3.3 备份脚本函数

        path:xx.xx.5.16:/home/backup_mysql_wufei/bin/xxxx_xtrabackup_wf.sh

        逻辑:1)检查innobackupex工具是否安装,建立相关目录、生成相关文件等

                   2)获取公共参数(xxxx_mysql_backup_wf.conf文件中)和私有参数(db_backup_policy表中)生成该MySQL实例备份私有配置文件xxxx_mysql_template_wf.conf,通过rsync同步到备份实例机器的备份配置目录conf下(每次都会覆盖)

                   3)通过rsync远程同名备份脚本模板并执行备份,然后在同步各种备份文件及信息并定期清理

3.4 备份脚本模板

        path:xx.xx.5.16:/home/backup_mysql_wufei/bin/mysql_template_backup.sh

                  (同步到MySQL机器后)/data/percona-xtrabackup/backup_mysql_wufei/bin/mysql_template_backup.sh

        逻辑:1)远程执行备份函数,读取私有配置文件higo_mysql_template_wf.conf中所以变量设置为全局变量完成备份

                   2)支持仅全量备份、增量备份和克隆从库3中方式

                   3)支持打包、发送备份到远程、清理备份及日志等功能

四、目录介绍

        4.1 backup_mysql_wufei/bin:存放备份脚本

        4.2 backup_mysql_wufei/backup:存放数据库备份

        4.3 backup_mysql_wufei/conf:存放配置文件

        4.4 backup_mysql_wufei/log:存放日志文件

            4.4.1 db_backup_[port]_[port]_[datetime].log为脚本执行过程信息日志

            4.4.2 full_[datetime]_[db_name]_[port].log为innobackupex工具备份过程信息日志

        4.5 backup_mysql_wufei/var:存放备份是否成功的索引信息

            4.5.1 mysql_[db_name]_[port].index为备份成功后索引文件(format:{week_day:1,dir:full/incr_2018-06-12_14-58-56_7,type:full/incr})

            4.5.2 mysql_[db_name]_[port].err为错误日志文件,根据此文件知道备份是否成功(format:{week_day:1,dir:full/incr_2017-06-12_14-58-56_7,type:full/incr,date:2017-06-14})

        4.6 backup_mysql_wufei/binlogs:存放binlog日志备份

五、备份状态监控提醒

六、数据库备份脚本

七、涉及备份信息数据库

xx.xx.1.49 3303 wf_dbbackup

相关表01:db_backup_policy

CREATE TABLE `db_backup_policy` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT ' 自增ID ',
  `port` mediumint(5) unsigned NOT NULL COMMENT '端口',
  `ip` int(10) unsigned NOT NULL COMMENT 'IP',
  `db` varchar(20) NOT NULL DEFAULT 'all' COMMENT '备份DB',
  `mode` enum('full','incr','clone') DEFAULT 'full',
  `data_socket` varchar(150) NOT NULL DEFAULT '/data/mysql-5.7.16/etc/mysql.sock' COMMENT '数据库socket文件',
  `dest_ip` int(10) unsigned NOT NULL COMMENT '保存地址IP ',
  `dest_dir` varchar(150) NOT NULL DEFAULT '/home/backup_mysql_wufei/backup' COMMENT '保存目录',
  `weekday` set('1','2','3','4','5','6','7') NOT NULL COMMENT '一周备份日期',
  `remain_days` tinyint(4) unsigned NOT NULL DEFAULT '30' COMMENT '保存天数',
  `full_backup_week_day` tinyint(2) unsigned NOT NULL DEFAULT '2' COMMENT '若是增量备份,全备在一周的第几天',
  `begintime` time NOT NULL COMMENT '备份开始时间',
  `inter` mediumint(9) NOT NULL DEFAULT '1' COMMENT '备份间隔',
  `inter_unit` enum('day','hour','minute') NOT NULL DEFAULT 'day' COMMENT '备份间隔单位',
  `zip_type` enum('untar','tar','zip') NOT NULL DEFAULT 'untar' COMMENT '备份文件是否压缩',
  `parallel` int(10) NOT NULL DEFAULT '1' COMMENT '该选项接收一个整数,xtarbackup子进程将用于同时备份文件的并发数',
  `throttle` int(10) NOT NULL DEFAULT '800' COMMENT '指定I/O操作的数量/秒。该参数只适用于备份阶段',
  `trans_speed` int(10) NOT NULL DEFAULT '0',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '策略修改日期',
  `memo` varchar(512) DEFAULT '' COMMENT '备注',
  `is_backup` int(1) NOT NULL DEFAULT '0' COMMENT '是否需要备份',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='备份策略表';
*************************** 1. row ***************************
                  id: 1
                port: 3220
                  ip: 169082950
                  db: xxxx_bim
                mode: full
         data_socket: /data/mysql5.7.16data/mysql3220/mysql.sock
             dest_ip: 169084176
            dest_dir: /home/backup_mysql_wufei/backup/mysql_xxxx_bim_3220
             weekday: 1,2,3,4,5,6,7
         remain_days: 6
full_backup_week_day: 1
           begintime: 01:10:00
               inter: 1
          inter_unit: day
            zip_type: untar
            parallel: 16
            throttle: 800
         trans_speed: 0
         update_time: 2018-06-08 12:46:46
                memo:
           is_backup: 0

相关表02:db_backup_info

CREATE TABLE `db_backup_info` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ' 自增ID ',
  `policy_id` int(10) unsigned NOT NULL DEFAULT '0' COMMENT 'db_backup_policy表主键ID',
  `backup_date` date NOT NULL DEFAULT '1000-01-01' COMMENT ' 备份日期 ',
  `port` mediumint(9) NOT NULL COMMENT ' 端口 ',
  `ip` int(10) unsigned NOT NULL COMMENT 'IP',
  `db` varchar(100) NOT NULL DEFAULT 'all' COMMENT ' 备份DB ',
  `mode` enum('full','incr','clone') DEFAULT 'full',
  `dest_ip` int(10) unsigned NOT NULL COMMENT '保存地址IP ',
  `dest_dir` varchar(150) NOT NULL DEFAULT '/home/backup_mysql_wufei/backup' COMMENT '保存目录',
  `begintime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT ' 备份开始时间 ',
  `endtime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '备份结束时间 ',
  `backup_status` varchar(10) NOT NULL DEFAULT '' COMMENT '备份状态:failed/success',
  `memo` varchar(512) DEFAULT '' COMMENT ' 备注 ',
  PRIMARY KEY (`id`),
  KEY `idx_backupdate` (`backup_date`),
  KEY `idx_policy_id` (`policy_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='备份信息表';
*************************** 1. row ***************************
           id: 13
    policy_id: 1
  backup_date: 2018-09-12
         port: 3220
           ip: 169082950
           db: xxxx_bim
         mode: full
      dest_ip: 169084176
     dest_dir: /home/backup_mysql_wufei/backup/mysql_xxxx_bim_3220/full_2018-09-12_01-10-01_3
    begintime: 2018-09-12 01:10:00
      endtime: 2018-09-12 01:14:05
backup_status: success
         memo:

八、innobackupex的介绍

Xtrabackup是由percona开发的一个开源软件,是使用perl语言完成的脚本工具,能够非常快速地备份与恢复mysql数据库,且支持在线热备份(备份时不影响数据读写),此工具调用xtrabackup和tar4ibd工具,实现很多对性能要求并不高的任务和备份逻辑,可以说它是innodb热备工具ibbackup的一个开源替代品。

直接下载二进制包解压就可以了,不编译,不需要定制。

Xtrabackup中包含两个工具:

1)xtrabackup :只能用于热备份innodb,xtradb两种数据引擎表的工具,不能备份其他表。

2)innobackupex:是一个对xtrabackup封装的perl脚本,提供了用于myisam(会锁表)和innodb引擎,及混合使用引擎备份的能力。主要是为了方便同时备份InnoDB和MyISAM引擎的表,但在处理myisam时需要加一个读锁。并且加入了一些使用的选项。如slave-info可以记录备份恢 复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。

innobackupex比xtarbackup有更强的功能,它整合了xtrabackup和其他的一些功能,它不但可以全量备份/恢复,还可以基于时间的增量备份与恢复。innobackupex同时支持innodb,myisam。

Xtrabackup可以做什么

1)在线(热)备份整个库的InnoDB, XtraDB表

2)在xtrabackup的上一次整库备份基础上做增量备份(innodb only)

3)以流的形式产生备份,可以直接保存到远程机器上(本机硬盘空间不足时很有用)

MySQL数据库本身提供的工具并不支持真正的增量备份,二进制日志恢复是point-in-time(时间点)的恢复而不是增量备份。Xtrabackup工具支持对InnoDB存储引擎的增量备份,工作原理如下:

1)首先完成一个完全备份,并记录下此时检查点的LSN(Log Sequence Number)。

2)在进程增量备份时,比较表空间中每个页的LSN是否大于上次备份时的LSN,如果是,则备份该页,同时记录当前检查点的LSN。首先,在logfile中找到并记录最后一个checkpoint(“last checkpoint LSN”),然后开始从LSN的位置开始拷贝InnoDB的logfile到xtrabackup_logfile;接着,开始拷贝全部的数据文件.ibd;在拷贝全部数据文件结束之后,才停止拷贝logfile。因为logfile里面记录全部的数据修改情况,所以,即时在备份过程中数据文件被修改过了,恢复时仍然能够通过解析xtrabackup_logfile保持数据的一致。

innobackupex备份mysql数据的流程

innobackupex首先调用xtrabackup来备份innodb数据文件,当xtrabackup完成后,innobackupex就查看文件xtrabackup_suspended ;然后执行“FLUSH TABLES WITH READ LOCK”来备份其他的文件。

innobackupex恢复mysql数据的流程

innobackupex首先读取my.cnf,查看变量(datadir,innodb_data_home_dir,innodb_data_file_path,innodb_log_group_home_dir)对应的目录是存在,确定相关目录存在后,然后先copy myisam表和索引,然后在copy innodb的表、索引和日志。

下面详细说下innobackupex备份和恢复的工作原理:

(1)备份的工作原理

       如果在程序启动阶段未指定模式,innobackupex将会默认以备份模式启动。

       默认情况下,此脚本以--suspend-at-end选项启动xtrabackup,然后xtrabackup程序开始拷贝InnoDB数据文件。当xtrabackup程序执行结束,innobackupex将会发现xtrabackup创建了xtrabackup_suspended_2文件,然后执行FLUSH TABLES WITH READ LOCK,此语句对所有的数据库表加读锁。然后开始拷贝其他类型的文件。

       如果--ibbackup未指定,innobackupex将会自行尝试确定使用的xtrabackup的binary。其确定binary的逻辑如下:首先判断备份目录中xtrabackup_binary文件是否存在,如果存在,此脚本将会依据此文件确定使用的xtrabackup binary。否则,脚本将会尝试连接database server,通过server版本确定binary。如果连接无法建立,xtrabackup将会失败,需要自行指定binary文件。

       在binary被确定后,将会检查到数据库server的连接是否可以建立。其执行逻辑是:建立连接、执行query、关闭连接。若一切正常,xtrabackup将以子进程的方式启动。

       FLUSH TABLES WITH READ LOCK是为了备份MyISAM和其他非InnoDB类型的表,此语句在xtrabackup已经备份InnoDB数据和日志文件后执行。在这之后,将会备份 .frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, .par, and .opt 类型的文件。

       当所有上述文件备份完成后,innobackupex脚本将会恢复xtrabackup的执行,等待其备份上述逻辑执行过程中生成的事务日志文件。接下来,表被解锁,slave被启动,到server的连接被关闭。接下来,脚本会删掉xtrabackup_suspended_2文件,允许xtrabackup进程退出。

(2)恢复的工作原理

       为了恢复一个备份,innobackupex需要以--copy-back选项启动。

       innobackupex将会首先通过my.cnf文件读取如下变量:datadir, innodb_data_home_dir, innodb_data_file_path, innodb_log_group_home_dir,并确定这些目录存在。

       接下来,此脚本将会首先拷贝MyISAM表、索引文件、其他类型的文件(如:.frm, .MRG, .MYD, .MYI, .TRG, .TRN, .ARM, .ARZ, .CSM, .CSV, par and .opt files),接下来拷贝InnoDB表数据文件,最后拷贝日志文件。拷贝执行时将会保留文件属性,在使用备份文件启动MySQL前,可能需要更改文件的owener(如从拷贝文件的user更改到mysql用户)。

猜你喜欢

转载自blog.csdn.net/weixin_42018518/article/details/88886694