方案一:mysqldump+binlog: ( 推荐)
完全备份,通过备份二进制日志实现增量备份
方案二: xtrabackup:
对InnoDB:热备,支持完全备份和增量备份
对MyISAM:温备,只支持完全备份
方案三: lvm2快照+binlog:
几乎热备,物理备份
具体操作如下:
mysqldump+binlog
命令的语法格式
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2DB3...]:备份一个或多个库
mysqldump [OPTIONS] --all-databases [OPTIONS]:备份所有库
其他选项
-x, --lock-all-tables:锁定所有表
-l, --lock-tables:锁定备份的表
--single-transaction:启动一个大的单一事务实现备份
-C, --compress:压缩传输
-E, --events:备份指定库的事件调度器
-R, --routines:备份存储过程和存储函数
--triggers:备份触发器
--master-data={0|1|2}
0:不记录
1:记录CHANGE MASTER TO语句;此语句未被注释
2:记录为注释语句
-F,--flush-logs:锁定表之后执行flushlogs命令 (刷新日志)
详细过程:
5.向表里插入数据:
查看一下
6.进行增量备份,备份二进制日志:mysqlbinlog --start-position=315 --stop-position=639 /var/lib/mysql/bin- log.000003 > /backup/binlog-`date +%F_%T`.sql
查看:ls /backup/
继续插入数据,在没备份的情况下删除数据库,模拟误操作
7.数据恢复,由于最后我们没有备份就删除了数据库,所以我们首先需要保护最后的二进制日志,
8.将最后操作的二进制日志备份 :mysqlbinlog --start-position=639 --stop-position=835 /var/lib/mysql/bin-log.000003 > /backup/binlog-`date +%F_%T`.sql
9.导入之前的备份:
10.查看数据库及数据:
xtrabackup
Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,是一款开源能够对innodb和xtradb数据库进行热备的工具。
特点:
(1)备份过程快速、可靠
(2)备份过程不会打断正在执行的事务
(3)能够基于压缩等功能节约磁盘空间和流量
(4)自动实现备份检验
(5)还原速度快
安装
[root@MariaDB ~]# yum installpercona-xtrabackup-2.2.3-4982.el6.x86_64.rpm -y
创建最小权限备份用户 : grant reload,lock tables,replicationclient on *.* to 'fulanqi'@'localhost' identified by '123';
完全备份
[root@MariaDB ~]# innobackupex --user=fulanqi --password=123 /backup/
须知(这一步可以不做):备份的这库可以直接当数据库用:
修改一下权限,就可以启动了:
试一下需要改回来哦
增量备份
每个InnoDB的页面都会包含一个存储信息,每当相关的数据发生改变,相关
的页面的存储就会自动增长。这正是InnoDB表可以进行增量备份的基础,即
innobackupex通过备份上次完全备份之后发生改变的页面来实现
innobackupex命令会在备份目录中创建一个新的以时间命名的目录以存放所
有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其
–incremental-basedir应该指向上一次的增量备份所在的目录
注:增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份
添加数据
增量备份
[root@MariaDB ~]# innobackupex --user=fulanqi --password=123 --incremental /backup/--incremental-basedir=/backup/2017-11-21_10-52-43
数据恢复准备
一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中
可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此
,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交
的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态
“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。
(2)基于所有的备份将未提交的事务进行“回滚”。
误操作:不小心把/var/lib/mysql/下的某数据库删了
数据恢复准备
执行操作:
# innobackupex --apply-log --redo-only BASE-DIR
接着执行(增量):
# innobackupex --apply-log --redo-only BASE-DIR--incrementaldir=INCREMENTAL-DIR-1
恢复阶段,还原数据
[root@MariaDB ~]# innobackupex --copy-back /backup/2017-11-21_10-52-43/
修改权限:[root@MariaDB ~]# cd /var/lib/mysql chownmysql.mysql . -R
[root@MariaDB ~]# systemctl restart mariadb
lvm2快照+binlog
mysql引擎,架构
俩引擎:Innodb支持事物锁机安表,MyISAM不支持事物,锁机按行
引擎作用把表中数据按照特点写进硬盘中,每个引擎的特点不同
上面的扫描方法不行的话换成::echo '- - -' > /sys/class/scsi_host/host0/scan
查看一下:fdisk -l
改成逻辑卷并保存
如果不小心把bak里面所有东西删了,则snap下的所有东西也都没了,可以用刚刚打包的文件恢复:
恢复:
可能会出现错误,比如某个日志文件,删了就行
查看二进制文件tail
ok 数据库备份方案完成,欧耶!!