目录
- 完全备份和增量备份
- 1、需要开启log-bin日志
- 2、增量和全备脚本
- 3、计划任务
- 模拟数据丢失
- 1、新增数据
- 2、数据备份
- 3、删除数据
- 4、数据的恢复
完全备份和增量备份
一般都三种备份种类:完全备份、差异备份、增量备份。
完全备份:
备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。(在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。
差异备份:
差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。(差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。
增量备份:
增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。(增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。)
完全备份和差异备份
在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较少的时间,但还原数据使用较少的时间。
完全备份和增量备份
在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较少的时间,但还原数据使用较多的时间。
逻辑备份(全备+差备、全备+增备)
Mysqldump 100G 1~2小时
Xtrabackup 500G,1T 还原100G数据需要时间20分钟~30分钟左右
架构备份:主从复制
物理备份(直接使用的复制命令)
从企业的角度看全量和增量:
1)对于中小公司,全量一般每天一次,在业务量低估时执行全备并锁表;
2)对于单台数据库如何实现增量。利用rsync(配合定时任务频率高点,或者inotify主从复制)把所有binlog备份到远程服务器。但是尽量还是要做主从复制!
3)对于大公司,有可能会做周备,其他时间都是增量;
4)一主多从,会有一个从库做备份,延迟同步;
需要mysql的mysqldump全量备份场合:
迁移或升级数据库;
增加从库的时候;
由于硬件或异常情况导致的主库或从库宕机,主从可互相切换,无需备份;但是由于人为操作导致主库误删,主从都会执行,此时需要备份;
做跨机房灾备,需要全量备份到异地。
需要mysql的增量恢复场合:
人为操作导致主库误删(如drop),主从都会执行,此时需要增量备份;
只有一个主库的情况下需要增量恢复。
mysqldump 变量说明
--all-databases针对所有数据库进行备份
--databases databasename 针对单个数据库进行备份
--flush-logs为结束当前日志,生成新日志文件;
--master-data 选项的作用就是将二进制的信息写入到输出文件中,在这里是写入到备份的sql文件中
用于日后恢复时参考,例如输出的备份SQL文件中含有:
CHANGE MASTER TO MASTER_LOG_FILE=’MySQL-bin.000002′, MASTER_LOG_POS=106;
1、需要开启log-bin日志
[root@localhost ~]# yum -y install mariadb mariadb-server -----安装mysql服务
[root@localhost ~]# systemctl start mariadb -----启动mysql服务
[root@localhost ~]# systemctl restart mariadb
2、增量和全备脚本
vim mysql_dump.sh -----编辑脚本
#!/bin/bash
#version 1
MYSQL_BACKUP=`date +%Y%m%d`
MYSQL_LOG_BIN=`ls /var/lib/mysql/mysql-bin.[0-9]* |head -n 1|sort -rg|head -n 1`
num=$1
if [ ! -d /opt/$MYSQL_BACKUP ]; then
mkdir -p /opt/$MYSQL_BACKUP
fi
#全备
#--all-databases针对所有数据库进行备份
#--databases databasename 针对单个数据库进行备份
#--flush-logs为结束当前日志,生成新日志文件;
#--master-data 选项的作用就是将二进制的信息写入到输出文件中,在这里是写入到备份的sql文件中
mysql_all(){
mysqldump -uroot --flush-logs --master-data --all-databases > /opt/$MYSQL_BACKUP/${MYSQL_BACKUP}.sql
}
#增备
mysql_increment(){
mysqldump -uroot --flush-logs
cp $MYSQL_LOG_BIN /opt/$MYSQL_BACKUP
}
case $num in
1)
mysql_all
;;
2)
mysql_increment
;;
*)
exit
esac
3、计划任务
[root@localhost ~]# crontab -e -----编写计划任务
0 2 * * 1 sh mysql_dump.sh 1 >> /tmp/test.log -----每周一2点执行全备
0 2 * * 2-7 sh mysql_dump.sh 2 >> /tmp/increment.log -----每周二到周日2点执行增备
[root@localhost ~]# crontab -l -----查看计划任务
0 2 * * 1 sh mysql_dump.sh 1 >> /tmp/test.log
0 2 * * 2-7 sh mysql_dump.sh 2 >> /tmp/increment.log
模拟数据丢失
1、新增数据
2、数据备份
3、删除数据
4、数据的恢复