mysql备份与恢复-innobackupex

系统环境

主机名   IP

node1    192.168.231.130

node2    192.168.231.131


MariaDB版本

# mysql --version
mysql  Ver 15.1 Distrib 5.5.60-MariaDB, for Linux (x86_64) using readline 5.1

为什么要备份

灾难恢复:硬件故障、软件故障、自然灾害、黑客攻击、误操作

测试:
要注意的要点:
能容忍最多丢失多少数据
恢复数据需要在多长事件内完成
需要恢复那些数据
(1)做还原测试,用于测试备份的可用性
(2)做还原演练

备份时需要考虑的因素:
    持锁多久
    备份过程的时长
    备份负载
    恢复过程的时长

备份什么?
    数据
    二进制日志、InnoDB事务日志
    代码(存储过程、存储函数、触发器、事件调度器)
    服务器的配置文件

设计备份方案:
数据集:完全+增量
备份手段:物理,逻辑

备份工具:
mysqldump:逻辑备份工具,适用所有存储引擎,温备;完全备份、部分备份;对INnoDB存储引擎支持热备
cp,tar等复制归档工具:物理备份工具,使用所有存储引擎;冷备:完全备份,部分备份
lvm2的快照:几乎热备;仅适用于MyISAM存储引擎
mysqlhotcopy:几乎冷备;仅使用于MyISAM存储引擎

备份工具的选择:
    mysqldump+复制binlog:
    mysqldump:完全备份:
                      复制binlog中指定时间范围的event:增量备份
    lvm2快照+复制binlog:
    lvm2快照:使用cp或tar等做物理备份;完全备份
                      复制binlog中指定时间范围的event:增量备份
    xtrabackup:
                     支持对InnoDB做热备(物理备份)的工具
                     完全备份、增量备份

备份类型

完全备份,部分备份,增量备份,差异备份

完全备份:整个数据集
部分备份:只备份数据子集
增量备份:仅备份最近一次完全备份或增量备份(如果存在增量)以来变化的数据
差异备份:仅备份最近一次完全备份以来变化的数据

热备份、温备份、冷备份

    热备:读写操作均可执行
    温备:读操作可执行;但写操作不执行
    冷备:读写操作均不可进行
    MyISAM:温备,不能热备
    InnoDB:热备

物理备份、逻辑备份
 

    物理备份:直接复制数据文件进行备份
    逻辑备份:从数据库中“导出”数据另存而进行备份
    逻辑备份:与存储引擎无关

 

innobackupex 的备份与恢复

命令介绍

--user,--password:mysql的用户名和密码
innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/

--no-timestamp:带上参数就不会生成一个时间戳文件夹,默认生成时间戳文件
innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/ --no-timestamp
innobackupex --user=user --password=passwd --no-timestamp ./2016/09-29/`date +%H-%M`.dbname

--defaults-file:指定mysql的配置文件,不带该参数也行
nnobackupex --defaults-file=/tmp/other-my.cnf --user=DBUSER --password=DBUSERPASS /
path/to/BACKUP-DIR/

--apply-log:应用日志到数据库文件,进行恢复前准备工作
innobackupex --apply-log /path/to/BACKUP-DIR

--use-memory:增加备份速度,如果有多的RAM可以增加内存来处理速度,默认100M 
innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR

--incremental:进行增量备份,后边跟备份目录;--incremental-basedir:基于上一次备份目录
innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1

--redo-only:指定该参数,不进行回滚操作
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1

--copy-back:恢复数据文件到数据库的datadir目录
innobackupex --copy-back BASE-DIR

注意:innobackupex命令执行后出现“completed OK!”,方为正确。

全量备份

创建备份后,数据尚未准备好还原。可能有要撤消的未提交事务或要重播日志中的事务。
 全量备份:把node1节点的数据备份,在node2节点进行还原(要清除node2中my.cnf中datadir目录中的数据)

备份node1数据库数据,在node2恢复
[root@node1 ~]# mysql
MariaDB [mydb]> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | wang     |
|  2 | zhangsan |
|  3 | li       |
|  4 | dsf      |
|  5 | wangsan  |
+----+----------+
#在node1上创建backups以备用数据
[root@node1 ~]# mkdir /backups
[root@node1 ~]# innobackupex --user=root /backups
[root@node1 ~]# scp -r /backups/2019-03-02_19-58-51 root@192.168.231.131:/root
[root@node2 ~]# mkdir /backups
[root@node2 ~]# mv 2019-03-02_19-58-51 /backups
[root@node2 ~]# innobackupex --apply-log /backups/2019-03-02_19-58-51
[root@node2 ~]# systemctl stop mariadb.service
[root@node2 ~]# innobackupex --copy-back /backups/2019-03-02_19-58-51
#数据库目录在datadir=/mydata/mysql,切换到目录,修改文件属主,属组为mysql,否则mariadb启动会失败
[root@node2 mysql]# chown -R mysql.mysql ./*
[root@node2 ~]# systemctl restart mariadb.service 
[root@node2 mysql]# mysql
MariaDB [mydb]> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | wang     |
|  2 | zhangsan |
|  3 | li       |
|  4 | dsf      |
|  5 | wangsan  |
+----+----------+

增量备份

增量备份在上一次全量备份的基础上进行备份

[root@node1 ~]# mysql
MariaDB [mydb]> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | wang     |
|  2 | zhangsan |
|  3 | li       |
|  4 | dsf      |
|  5 | wangsan  |
+----+----------+

#先全量备份
[root@node1 ~]# innobackupex --user=root /backups
[root@node1 2019-03-02_20-49-08]# pwd
/backups/2019-03-02_20-49-08
[root@node1 2019-03-02_20-49-08]# cat xtrabackup_checkpoints
backup_type = full-backuped    #全量备份
from_lsn = 0
to_lsn = 1607977
last_lsn = 1607977
compact = 0
recover_binlog_info = 0
[root@node1 ~]# mysql
MariaDB [mydb]> insert into student values(6,'xiaoming'),(7,'xiaoli');
MariaDB [mydb]> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | wang     |
|  2 | zhangsan |
|  3 | li       |
|  4 | dsf      |
|  5 | wangsan  |
|  6 | xiaoming |
|  7 | xiaoli   |
+----+----------+
#基于/backups/2019-03-02_20-49-08做增量备份
[root@node1 ~]# innobackupex --incremental /backups/ --incremental-basedir=/backups/2019-03-02_20-49-08
[root@node1 ~]# cat /backups/2019-03-02_20-56-41/xtrabackup_checkpoints
backup_type = incremental
from_lsn = 1607977
to_lsn = 1609154
last_lsn = 1609154
compact = 0
recover_binlog_info = 0
#进行恢复前准备工作,将目录中的数据文件应用到数据文件中
[root@node1 ~]# innobackupex --apply-log --redo-only /backups/2019-03-02_20-49-08
#基于增量文件,进行恢复前准备工作,将目录中的数据文件应用到数据文件中
[root@node1 ~]# innobackupex --apply-log --redo-only /backups/2019-03-02_20-49-08 --incremental-dir=/backups/2019-03-02_20-56-41
[root@node1 2019-03-02_20-49-08]# cat xtrabackup_checkpoints
backup_type = log-applied
from_lsn = 0
to_lsn = 1609154
last_lsn = 1609154
compact = 0
recover_binlog_info = 0
[root@node1 ~]# systemctl stop mariadb.service
#把数据库的datadir目录中的数据删除,以便测试
[root@node1 ~]# rm -rf /mydata/mysql/*
#将数据拷贝回数据库目录
[root@node1 ~]# innobackupex --copy-back /backups/2019-03-02_20-49-08
[root@node1 mysql]# pwd
/mydata/mysql
#修改属主、属组为mysql
[root@node1 mysql]# chown -R mysql.mysql ./*
[root@node1 ~]# systemctl start mariadb
#恢复成功
[root@node1 ~]# mysql
MariaDB [mydb]> select * from student;
+----+----------+
| id | name     |
+----+----------+
|  1 | wang     |
|  2 | zhangsan |
|  3 | li       |
|  4 | dsf      |
|  5 | wangsan  |
|  6 | xiaoming |
|  7 | xiaoli   |
+----+----------+

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

real向往

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值