企业级MySQL数据库备份⽅案:增量备份、全量备份、逻辑备份
⼀份好的备份⽅案⽆⾮包括以下⼏点:
为什么需要备份?
备份的⽅式有哪些?
某⼏种备份⽅式的区别在哪?
备份实战操作概述
恢复实战操作概述
其它备注信息
那么,此⽂将从以上⼏个⾓度,结合⼀些实际的实战经验,分步阐述⼀个完整的备份⽅案到底是怎么样构成的。需要学习更多Mysql数据库相关的知识,可以在:民⼯哥技术之路的后台回复「MySQL」即可获取⼀份最全的MySQL数据库学习指南。
为什么需要数据库备份?
很多⼈,⼀看这标题,肯定张⼝就会答,这不是废话么。不备份故障了怎么办?跑路吗?数据被沙雕开发(不许喷)误删了怎么办?背锅吗?
当然,⼤家都知道备份的重要性与必要性。
1、保证数据安全与完整
企业的数据安全应该来说是企业的命脉,⼀旦丢失或造成损坏,轻则损失客户与⾦钱,重则倒闭(已经有前例在)。
数据库怎么备份数据备份的⽬的:为了保证数据在被⼈为失误、操作不当、蓄意等情况下删除或损坏后,能及时、有效的进⾏恢复并不会很⼤程度上影响到业务运⾏。
2、为业务提供不间断服务
实际⽣产环境对数据库的要求,⾸先就是具备7×24×365不间断服务的能⼒,这也是⼀定要备份数据库的其中原因之⼀。
数据库的备份⽅式
常⽤的备份⽅式包括以下:
逻辑备份
物理备份
1、逻辑备份
逻辑备份其实就是利⽤MySQL数据库⾃带的mysqldump命令,或者使⽤第三⽅的⼯具,然后把数据库⾥的数据以SQL语句的⽅式导出成⽂件的形式。在需要恢复数据时,通过使⽤相关的命令(如:source )将备份⽂件⾥的SQL语句提取出来重新在数据库中执⾏⼀遍,从⽽达到恢复数据的⽬的。
实例如下:
mysqldump -A -B --single-transaction >/server/backup/mysql_$(date +%F).sql
⼀般备份时都会进⾏压缩处理,以节省磁盘空间,如下
mysqldump -A -B --single-transaction |gzip>/server/backup/mysql_$(date +%F).
恢复操作
cd /server/backup/
gzip -o mysql_$(date +%F).
mysql -uroot -pMyadmin -h mysqldb.mingongge
> source /server/backup/mysql_$(date +%F).sql
逻辑备份的优点与使⽤场景
优点:简单,易操作,⾃带⼯具⽅便、可靠。
使⽤场景:数据库数据量不⼤的情况可以使⽤,数据量⽐较⼤(超过20G左右)时备份速度⽐较慢,⼀定程度上还会影响数据库本⾝的性能。
2、物理备份
物理备份就是利⽤命令(如cp、tar、scp等)直接将数据库的存储数据⽂件复制⼀份或多份,分别存放在其它⽬录,以达到备份的效果。这种备份⽅式,由于在备份时数据库还会存在数据写⼊的情况,⼀定程度上会造成数据丢失的可能性。在进⾏数据恢复时,需要注意新安装的数据的⽬录路径、版本、配置等与原数据要保持⾼度⼀致,否则同样也会有问题。
所以,这种物理备份⽅式,常常需要在停机状态下进⾏,⼀般对实际⽣产中的数据库不太可取。因此,此⽅式⽐较适⽤于数据库物理迁移,这种场景下这种⽅式⽐较⾼效率。
物理备份的优点及使⽤场景
优点:速度快,效率⾼。
场景:可⽤于停机维护及数据库物理迁移场景中。
实际⽣产环境中,具体使⽤哪种⽅式,就需要看需求与应⽤场景所定。
全量与增量备份概述
在介绍完备份⽅式之后,再来介绍⼀下,增量与全量备份这两个概念。
什么是全量备份?
全量备份:就是将数据库中的所有数据,或者是某⼀个特定的库⾥的所有数据,⼀次全部备份下来。
备份数据库中所有数据
mysqldump -A -B --single-transaction |gzip>/server/backup/All_data_$(date +%F).
备份某个库的数据
mysqldump -A -B --single-transaction testDB1|gzip>/server/backup/testDB1_$(date +%F).
什么是增量备份?
增量备份:指的是上⼀次全量备份之后到下⼀次全量备份这前这段时间内数据库所更新或者是增加的数据,将其备份下来。
注:全量备份是⼀个⽂件,⽽增量备份则是MySQL的binlog⽇志⽂件。所以常说的增量备份就是备份binlog⽇志⽂件。
两者的区别在哪?
全量备份:需要的备份时间长⼀点,恢复时间会短⼀点,因为⽂件数少,维护⽅便。但是,全量备份的⽂件⼤,占⽤⼀定的磁盘空间,全理备份时会⼀定程序上影响数据库的性能(这也就是为什么在0:00点
备份的原因),也因⽂件⼤的原因,不便于服务器本地保存过多⽂件,重要业务的全量备份⽂件可能需要⼿⼯下载或迁移到服务器之外的存储空间中。
增量备份:备份简单,恢复时复杂⼀点,因为⽂件数量多,需将所有binlog⽂件解析成SQL语句,如下:
mysqlbinlog testDB1-bin.000001 testDB1-bin.000002>./bin.sql
然后,再通过恢复的⽅式进⾏恢复
mysql -uroot -pMyadmin -h mysqldb.mingongge
> source /server/backup/bin.sql
或者如下操作
cd /server/backup
mysql testDB1 <./bin.sql
备份与恢复实践操作
对于Mysql数据库的备份,⼀般采取脚本+定时任务进⾏⽇常备份。
常⽤执⾏策略是:
每天0:00执⾏⼀次全量备份
按业务需求执⾏增量备份
分享⼀个我在⼀个创业公司初期的⼀个备份⽅案实例
阿⾥云数据库服务器备份⽅案
⽅案⼀:
⽬前数据库是主从同步,从库开启binlog⽇志功能进⾏异地备份,就⽬前数据量⽽⾔,只需要在从库的基础上进⾏定时全量与增量备份数据库即可。
1、创建备份⽬录
mkdir /server/backup
2、备份数据库到指定⽬录
mysqldump --single-transaction -F -B phoenix_coupon_production|gzip >/server/backup/phoenix_$(date +%F).
mysqldump --single-transaction -F -B ywotx|gzip >/server/backup/ywotx_$(date+%F).
find /server/backup/-type f –name “*.”-mtime +7|xargs rm-f
将脚本写⼊定时任务,分时段进⾏打包备份
3、定时备份⼆进制⽂件
通过参数刷新binlog产⽣新的⽂件,通过脚本判断⽂件新旧,然后备份旧的⽇志⽂件
mysqladmin -uroot -pywotx!123 flush-logs #刷新⽇志,产⽣新的⽇志⽂件
最终将备份⽂件同步或定时⼿⼯下载到异地备份服务器异地存储备份⽂件,实现数据库备份⽂件双备份存储,防⽌服务器硬件故障。
⽅案⼆
后期数据量增⼤之后,数据库需要进⾏读写分离,实现主写,从读,主从同步的架构,备份还是按照原
来的备份⽅案进⾏,可采⽤分库分表进⾏数据备份,防⽌数据量⼤导致的恢复时间的问题,提升恢复效率。
1、创建备份⽬录
Mkdir /server/backup
2、备份数据到指定⽬录(分库分表)
#/bin/sh
#create by mingongge at 2017-06-01
BACKUPDIR=/server/backup
DATE=`date +%F`
USER=root
PASSWD=”123456”
CMD=”mysql –u$USER –p$PASSWD”
DUMPCMD=”mysqldump –u$USER –p$PASSWD --single-transaction -F”
for dbname in `${CMD} –e “show databases”|sed ‘1d’`
do
mkdir –p${BACKUPDIR}/${dbname}
for tablename in`${CMD} –D ${dbname} –e “show tables”|sed ‘1d’`
do
${DUMPCMD}--tables${dbname} ${tablename}|gzip > ${BACKUPDIR}/${dbname}/${tablename}_$(DATE).
done
done
find /server/backup/${dbname}-type f –name “*.”-mtime +7|xargs rm -f
3、定时备份⼆进制⽂件(增量)
备份⽅法同⽅案⼀
备份频率:
每天0:00进⾏⼀次数据库全备
每天03:00 9:00 15:00 21:00 增量备份⼀次
数据库的备份,每天⼀次全备,在全备时会更新binlog⽇志,重新⽣成新的⽇志⽂件,因此在下⼀次增量备份时再刷新binlog,再次产⽣新的⽇志⽂件,实现从全备之后对数据库的操作的增量备份,⼀旦发现数据问题,⽴即刷新binlog重新成新的⽇志⽂件,将原来的⽇志⽂件⼿⼯备份⼀份,然后出产⽣数据问题的点,从⽽利⽤⽇志⽂件进⾏恢复全备到产⽣数据问题点之间的数据,然后恢复从问题点到发现问题时间段之间的数据.
新增⼀台备份服务器,配置如下:
实例配置:2核/4G/40G + 200G⾼效云盘 经典⽹络 1M 295元/⽉
⽅案总结:
对于数据库服务器本地的备份⽂件基本上只保留⼀周时间内的数据,备份服务器按需求(⼀般保留⾄少30天的数据),保留30天的数据包括数据库全备⽂件与增量备份⽂件,后期可按实际⽣产需求进⾏修改,保留时间长短只会增加相应的服务器磁盘空间,增加⼀定的成本,其它⽆需改动,操作较为灵活、⽅便。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。