一、完全备份
1.1备份
1.进行备份
语法:**innobackupex --user=root --password=’ 数据库密码 ’ / 备份文件的存储位置 **
在备份之前我们先查看一下数据库里的文件
备份完成后到指定路径检查一下备份文件是否存在,是否备份成功
1.2恢复
1.停止数据库
语法:systemctl stop mysqld
2.我们模拟一下机器损坏,数据库数据丢失
语法:rm -rf /var/lib/mysql/*
rm -rf /var/log/mysqld.log
3.生成回滚日志 相当于恢复数据库的前期准备,先给系统查看一下要恢复的备份文件,指定备份点
语法:innobackupex --apply-log /xtrabackup/full/备份文件
4.正式恢复
语法:innobackupex --copy-back /备份文件以及存放位置
5.登录查看验证
首先我们必须修改一下数据库目录的权限为MySQL 然后重启一下数据库
语法:chown -R mysql.mysql /var/lib/mysql
这就是完整备份的所有过程
二、增量/差异备份
增量备份 特点:因每次仅备份自上一次备份(注意是上一次,不是第一次)以来有变化的文件,所 以备份体积小,备份速度快,但是恢复的时候,需要按备份时间顺序,逐个备份版本进行恢复,恢复时间长。
差异备份 特点:占用空间比增量备份大,比完整备份小,恢复时仅需要恢复第一个完整版本和最后 一次的差异版本(包含所有的差异),恢复速度介于完整备份和增量备份之间。
2.1增量备份
1.首先必须进行一次完整备份,步骤不在重复
记住增量备份时间
2. 开始第一次增量备份
这里我们更新一下时间,方便实验
更新时间后对数据库中数据进行更改
接下里正式开始备份
语法:innobackupex --user=root --password=‘数据库密码’ --incremental 备份文件存储位置 --incremental-basedir=基于的上次备份文件位置
查看一下备份文件存储位置,备份成功
接下来的第二次和第三次增量备份方法相同。只不过是第三次备份是基于第二次的备份文件,第四次基于第三次的备份文件。
注意:
差异备份方法和增量备份方法步骤一样
语法同样是innobackupex --user=root --password=‘数据库密码’ --incremental 备份文件存储位置 --incremental-basedir=基于的备份文件位置
只不过是基于的备份文件不同而已 ,差异备份永远是基于某一次备份文件进行备份的
2.2恢复
1.停止数据库
systemctl stop mysqld
清理数据库 rm -rf /var/lib/mysql/*
2.回滚合并
语法:innobackupex --apply-log --redo-only 第一次备份文件位置
第一次就是完整备份,现在就可以直接恢复到完整备份 语法:innobackupex --copy-back /备份文件以及存放位置 和完整备份恢复步骤一样。**
- 单次增量备份恢复:
现在第一次增量备份进行恢复
也是要先回滚合并,只不过需要以第一次为基础,先给第一次进行一次回滚,然后再加上第二次一起进行一次回滚
语法: innobackupex --apply-log --redo-only 第一次备份文件路径 --incremental-dir=第二次备份文件位置(也即第一次增量备份文件位置) - 多次增量备份恢复
如果想要同时恢复多次的增量备份,只需要在回滚时加入多次的备份文件进行回滚即可
如下图 同时进行多次回滚合并:
3.进行恢复
- 单次增量备份文件恢复:
innobackupex --copy-back /备份文件以及存放位置 == 这里无论是恢复第几次增量备份,都要写第一次完整备份文件;回滚时加入的哪一次回滚,那么在这里恢复时就会恢复哪一次的备份文件。== - 同时恢复多次增量备份文件
如果想要同时恢复多次的增量备份,只需要在回滚时加入多次回滚,恢复时仍然是只恢复第一次完整备份。
如下图 :
然后 赋予权限 语法 : chown -R mysql.mysql /var/lib/mysql
启动数据库 :systemctl start mysqld
我们看到三次备份的增量数据都恢复了。
以上实验增量备份与差异备份步骤基本一样,只不过回滚时只需要单次回滚即可,恢复时也是只恢复第一次完整备份文件。
三、mysqldump备份与二进制日志备份
3.1简述
mysqldump是mysql用于转存储数据库的客户端程序。它主要产生一系列的SQL语句,可以封装到文件,该文件包含有所有重建您的数据库所需要的SQL命令如CREATE DATABASE,CREATE TABLE,INSERT等等。可以用来实现轻量级的快速迁移或恢复数据库。是mysql数据库实现逻辑备份的一种方式。
MySQL 中很少提及日志的备份,但日志备份也是非常重要,可以恢复到指定时间点。日志备份可以使用自带的工具 mysqlbinlog 进行备份,mysqlbinlog 也是解析 binlog 的工具。
3.2备份
1.执行备份
在此之前我们准备一个库
接下来进行备份
语法:mysqldump -p’密码’ \ --all-databases --single-transaction \ --master-data=2 \ --flush-logs \ > /路径/date +%F-%H
-mysql-all.sql
2.备份完成后我们再在数据库里改变数据,为二进制日志做准备
3.3恢复
备份后会产生备份文件以及日志,我们把产生的日志也保存一下,因为二进制日志备份需要用到
二进制日志存放在我们的/var/lib/mysql/ 下
2.接下来模拟数据库数据丢失
systemctl stop mysqld
rm -rf /var/lib/mysql/*
再次登录发现,已经无法登陆了
3.重启数据库
systemctl start mysqld
找密码
grep ‘password’ /var/log/mysqld.log
修改密码:
mysqladmin -uroot -p’系统给的密码’ password '设置的新密码’
4.恢复数据库
语法: mysql -p’修改后的新密码’ <备份文件存储路径/2016-12-08-04-mysql-all.sql (备份文件)
备份之前的数据库回来了。
那么在备份之后的数据就要靠二进制日志来恢复了
1.我们需要去到备份文件里查看二进制截取记录
vim /backup/备份文件
通过查看二进制日志文件进行恢复
2.恢复
语法:
mysqlbinlog 备份文件中的二进制记录 --start-position=154 | mysql -p’数据库密码’ 注意后续有多少日志,要跟多少日志名字。
查看数据库:
通过二进制日志文件恢复了备份之后到丢失点的数据。