MySQL 完全备份 + 增量备份+完全恢复

简介

1·完全备份与增量备份的概念
2·使用 mysqldump 完全备份
3·使用 mysqldump 进行表结构备份
4·完全备份恢复的两种方法
5·使用 flush logs 进行增量备份
6·增量备份恢复
7·基于时间点与位子的恢复
8·MySQL 备份思路


完全备份与增量备份的概念

1·MySQL 完全备份:是对整个数据库的备份、数据库结构和文件结构的备份,保存的是备份完成时刻的数据库,它也是增量备份的基础。它的优点:备份与恢复操作简单,缺点是数据存在大量的重复,占用大量的备份空间,备份时间长。
2·MySQL 增量备份:是针对在上次完全备份或增量备份后被修改的文件才会备份。因为完全备份的 缺点会占用很多的资源,所以增量备份与完全备份这中结合就能解决这样的缺点。
3·MySQL 是没有提供直接的增量备份的办法,但是可以通过MySQL的二进制日志间接实现增量备份。二进制日志保存了所有更新或者可能更新数据库的操作,使用flush logs 可以使日志分割开来,这样就可以识别每次更新的操作会在另一个日志文件中。



实验前准备:

因为这里涉及到数据库的表,所以在这之前就创建好了一张表,如下图所示:




mysqldump 完全备份与恢复

1·针对一个库完全备份命令格式:
mysqldump -uroot -p123123 --databases kgc(库名) > /opt/kgc.sql(备份到什么地方)
2·模拟kgc这个库中的表丢失。
mysql> drop tabale school;




3·数据库中的表丢失,恢复表的命令格式:
mysql -uroot -p123123 < /opt/kgc.sql ---- (恢复kgc库中的表,重你备份的地方导入即可)
4·验证恢复备份:
mysql> show tables;
mysql> select * from school;




5·对数据库所有表进行备份
mysqldump -uroot -p123123 --all-databases > /opt/all.sql ----(对所有库备份加入选项 --all )


6·对库中的一张表的表结构进行备份,注意这里只是备份表结构
mysqldump -uroot -p123123 -d kgc(库名)school(表名) > /opt/desc.sql


MySQL 增量备份

1·增量备份是基于完全备份之后的所修改的数据进行备份,所以这里必须先做完全备份,在做增量备份。上面的实验已经做过了完全备份,现在可以直接做增量分了。
2·要进行MySQL增量备份需要开启二进制日志功能。需要在主配置文件【mysqld】项中加入:log-bin=mysql-bin 如下图:
[[email protected] ~]# vim /etc/my.cnf




3·重启MySQL服务、查看二进制日志文件
[[email protected] ~]# systemctl restart mysqld.service




4·模拟在表中添加数据,然后把只备份添加的数据。
mysql> insert into school (姓名,成绩) values (‘成龙‘,79);




5·模拟故障,因为人员误操作或其他因素,导致表被删除。
使用命令 mysqladmin -uroot -p123123 flush-logs 再次生成一份日志文件,这样接下来对MySQL的记录将会写在新的日志文件中
mysql> drop table school;
mysql> show tables;




6·数据恢复。恢复思路
(1)首先需要把完全备份恢复
(2)其次,需要知道我们之前在插入数据的时候的所有操作都会纪律在日志文件中。
(3)最后我们需要重日志文件中恢复之前插入的数据。
(4)这样就能完全恢复之前表中的数据。




7·验证数据是否恢复成功。




8·基于时间点与位置的恢复
列如:需要往数据库中插入两条数据,但是由于误操作,两条插入语句中间删除了一条数据,而这条数据是不应该被删除的,这个时候就需要恢复到误操作之前,跳过删除这一条数据这个命令,再恢复后面的正确操作。
(1)再次分割日志:
[[email protected] data]# mysqladmin -uroot -p123123 flush-logs
(2)模拟误操作,添加数据的过程中,误删除一条数据,因为大意没注意删除的数据还需要保留,再次继续写入数据




9·这时候发现表数据丢失,需要恢复表中被删除的数据。恢复思路:
(1)再次进行日志分割,是接下来的操作归于另一个二进制日志文件中
(2)查看需要恢复的二进制日志文件,找到需要恢复的时间点或位置点并且记录
(3)如果是基于时间点恢复则使用命令:
--stop-datetime(到这个错误操作的时间点停止)
--start-datetime (再到下一个正确的时间点开始)
(4)如果是基于位置的恢复则使用命令:
--stop-position ---(上一次可以正确执行的位子点)
--start-position ---(下一次可以正确执行的位子点)


10·使用以下命令查看二进制日志文件,查找正确与错的时间和位子点:
[[email protected] data]# mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000003
查找的内容如下图:




11·模拟故障数据库中的表丢失,开始恢复数据,恢复思路:
(1)首先完全备份恢复
(2)其次找到恢复的时间点或者位子点
(3)开始增量备份位子点的恢复(这里我选择位子点恢复)
[[email protected] data]# mysqlbinlog --no-defaults --stop-position=‘344‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -p123123 ---(恢复正确位子点)
[[email protected] data]# mysqlbinlog --no-defaults --start-position=‘835‘ /usr/local/mysql/data/mysql-bin.000003 | mysql -uroot -p123123 ---(下一次正确位子点)


总结

1·MySQL 中使用mysqldump 工具备份,它生成的是sql的脚本文件
2·恢复数据使用mysql
3·备份可以针对整库、一些库或表、表结构进行备份。
4·增量备份需要使用分割日志的方式备份
5·增量恢复需要根据日志文件的先后,做个执行
6·使用基于时间和位子的方式恢复,可以更精确的恢复数据
7·大企业应该每周做一次全备,每天做一次增量备份;中小企业应该每天进行一次全备
8·可以结合周期性计划任务进行备份,定时备份。时间主要放在业务需求量较小的时间段。

原文地址:http://blog.51cto.com/13746824/2170577

时间: 2024-10-18 02:44:19

MySQL 完全备份 + 增量备份+完全恢复的相关文章

MySQL数据库备份:完全备份+增量备份

MySQL数据库备份:完全备份+增量备份 ************************************************************************************** 计划任务: crontab -e  -u root 00 6  * * 1  /shell/mysqlbak.sh &> /dev/null 00 23  * * 2-7  /shell/mysqladd.sh &> /dev/null **************

mysql 利用binlog增量备份,还原实例

mysql 利用binlog增量备份,还原实例 张映 发表于 2010-09-29 分类目录: mysql 一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/mysql/mysql-bin.log,如果是这样的话log-bin

MySQL 备份和恢复(三)Xtrabackup实现热备:完全备份+增量备份

Percona XtraBackup is the world's only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits: Backups that complete quickly and

MySQL 利用binlog增量备份+还原实例

一,什么是增量备份 增量备份,就是将新增加的数据进行备份.假如你一个数据库,有10G的数据,每天会增加10M的数据,数据库每天都要备份一次,这么多数据是不是都要备份呢?还是只要备份增加的数据呢,很显然,我只要备份增加的数据.这样减少服务器的负担. 二,启用binlog vi my.cnf log-bin=/var/lib/mysql/mysql-bin.log,如果是这样的话log-bin=mysql-bin.log默认在datadir目录下面 [[email protected] mysql]

mysql全备份 + 增量备份

mysql全备份 + 增量备份 配置文件: 管理mysql配置文件,打开binlog日志 对于mysql数据库: log_bin = /var/log/mysql/mysql_bin.log server-id = 1(必须有,否则重启fail) 对于mariadb数据库: log_bin = /var/log/mysql/mysql-bin.log 修改配置文件后需要重启mysql服务: service mysql restart | /etc/init.d/mysql restart 可登陆

完全备份+增量备份完成即时点还原

完全备份+增量备份完成及时点还原 首先是一些感念 备份类型: 热备份,温备份,冷备份 热备份;读写不受影响: 温备份:仅可以执行读操作: 冷备份:离线备份,读,写操作均终止: 物理备份和逻辑备份 物理备份:复制数据文件 逻辑备份:将数据导出至文本文件中. 完全备份,增量备份和差异备份: 完全备份:备份全部数据 增量备份:仅备份上次完全备份或者增量备份以后变化的数据: 差异备份:仅备份上次完全备份以来变化的数据: 备份策略:每周完全+每日增量 完全备份;mysqldump 增量备份;备份二进制日志

linux mysql 物理备份-增量备份

大家好,我是霸王卸甲,今天给大家带来的是数据库中的物理备份,物理备份又包括增量备份和差异备份,今天要讲的是增量备份!!!!!!! 物理备份 + binlog 准备工作:PERCONA XtraBakuo它是开源免费的支持MySQL 数据库热备份的软件,它能对InnoDB和XtraDB存储引擎的数据库非阻塞地备份.它不暂停服务创建Innodb热备份:为mysql做增量备份:在mysql服务器之间做在线表迁移:使创建replication更加容易:备份mysql而不增加服务器的负载.percona是

mysql全库备份/增量备份脚本

http://hongge.blog.51cto.com/ 生产环境中Mysql数据库的备份是周期性重复的操作,所以通常是要编写脚本实现,通过crond计划任务周期性执行备份脚本 mysqldump备份方案: 周日凌晨1点全库备份 周一到周六凌晨每隔4个小时增量备份一次 设置crontab任务,每天执行备份脚本 # crontab –e #每个星期日凌晨1:00执行完全备份脚本 0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1 #周一

Mysql脚本实现增量备份

因为线上数据库有点大,磁盘又没有做个RAID,而且服务器紧缺.本来想用xtrabackup去做增量备份的,但是各种错误,我已经对它失去信心了,遂,自己写一个脚本去实现. 脚本分两部分,一部分是Full backup,这没什么好介绍的,就是全备嘛.另外一部分是Incremental backup,增量备份方面是以天为最少单位去执行的,每一天增量的内容都独立一个sql文件,当然也可以修改一下,追加到同一个文件去,但是我觉得还是分开比较好一点. 脚本刚写出来,简单测试过没问题,有兴趣的同学可以帮忙测试