mysql全量备份和增量备份区别 迷南。 2023-09-25 10:59 93阅读 0赞 ### 如何将linux中mysql备份恢复 ### 一般是即时备份。做主从。或者是每天增量备份。 本文是在linux下,mysql4.1.14版本下测试的,经过适当修改可能适合mysql4.0,5.0及其其他版本. 本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份策略或者需要修改相关参数. 每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬照抄,可能会造成不必要的损失. 希望你明白这个脚本要干什么工作! 每7天备份一次所有数据,每天备份binlog,也就是增量备份. (如果数据少,每天备份一次完整数据即可,可能没必要做增量备份) 作者对shell脚本不太熟悉,所以很多地方写的很笨:) 开启binlog 在mysql4.1版本中,默认只有错误日志,没有其他日志.可以通过修改配置打开binlog.方法很多,其中一个是在/etc/my.cnf中的mysqld部分加入: \[mysqld\] log-bin 这个日志的主要作用是增量备份或者复制(可能还有其他用途). 如果想增量备份,必须打开这个日志. 对于数据库操作频繁的mysql,这个日志会变得很大,而且可能会有多个. 在数据库中flush-logs,或者使用mysqladmin,mysqldump调用flush-logs后并且使用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的). 所以如果从来不备份,开启日志可能没有必要. 完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的数据. 完整备份脚本 如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运行,如果数据量比较小,那么一天备份一次也无所谓了. \#!/bin/sh BakDir=/backup/mysql LogFile=/backup/mysql/mysqlbak.log DATE=\`date+%Y%m%d\` echo"">>$LogFile echo"">>$LogFile echo"-------------------------------------------">>$LogFile echo$(date+"%y-%m-%d%H:%M:%S")>>$LogFile echo"--------------------------">>$LogFile cd$BakDir DumpFile=$DATE.sql GZDumpFile=$DATE.sql.tgz mysqldump--quick--all-databases--flush-logs \--delete-master-logs--lock-all-tables >$DumpFile echo"DumpDone">>$LogFile tarczvf$GZDumpFile$DumpFile>>$LogFile2>&1 echo"\[$GZDumpFile\]BackupSuccess!">>$LogFile rm-f$DumpFile \#deletepreviousdailybackupfiles:采用增量备份的文件,如果完整备份后,则删除增量备份的文件. cd$BakDir/daily rm-f\* cd$BakDir echo"BackupDone!" echo"pleaseCheck$BakDirDirectory!" echo"copyittoyourlocaldiskorftptosomewhere!!!" ls-al$BakDir 上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放在/backup/mysql/daily目录下. 注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天前的备份文件:需要用户增加相关脚本,或者手动操作. 增量备份的数据量比较小,但是要在完整备份的基础上操作,用户可以在时间和成本上权衡,选择最有利于自己的方式. 增量备份使用binlog,脚本如下: \#!/bin/sh \#mysqlbinlogbackupscript /usr/bin/mysqladminflush-logs DATADIR=/var/lib/mysql BAKDIR=/backup/mysql/daily \#\#\#如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器名,mysql缺省也是取机器名 HOSTNAME=\`uname-n\` cd$DATADIR FILELIST=\`cat$HOSTNAME-bin.index\` \#\#计算行数,也就是文件数 COUNTER=0 forfilein$FILELIST COUNTER=\`expr$COUNTER+1\` NextNum=0 forfilein$FILELIST base=\`basename$file\` NextNum=\`expr$NextNum+1\` if\[$NextNum-eq$COUNTER\] echo"skiplastest" dest=$BAKDIR/$base if(test-e$dest) echo"skipexist$base" echo"copying$base" cp$base$BAKDIR echo"backupmysqlbinlogok" 增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后一个. 因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果已经备份过,就不用备份了. 注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生成. 脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和mysqldump都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home目录)创建一个.my.cnf文件,内容如下 \[mysqladmin\] password=password user=root \[mysqldump\] user=root password=password 注:设置本文件只有root可读.(chmod600.my.cnf) 此文件说明程序使用mysql的root用户备份数据,密码是对应的设置.这样就不需要在脚本里写用户名和密码了. 为了让备份程序自动运行,我们需要把它加入crontab. 有2种方法,一种是把脚本根据自己的选择放入到/etc/cron.daily,/etc/cron.weekly这么目录里. 一种是使用crontab-e放入到root用户的计划任务里,例如完整备份每周日凌晨3点运行,日常备份每周一-周六凌晨3点运行. ![mysql全量备份和增量备份区别\_mysql增量备份和差异备份][mysql_mysql] ### 如何实现Mysql数据库的差异性备份和增量备份? ### Ø首先,我们需要开启MySQL服务器的二进制日志功能,其实现方法有很多种,最常用的是在MySQL的配置文件的mysqld项中加入log-bin=\[filepath\]项;也可以使用mysqld–log-bin=\[filepath\]重新启动MySQL服务器。 Ø其次,使用mysqldump对数据库进行完全备份,它可以实现对数据据的联机,非阻塞的热备份,不会影响其他进程对数据库的读写操作。(参考指令:mysqldump-uroot--password=123--single-transaction--flush-logs--master-data=2--all-databases--delete-master-logs>d:/mysql5.0/full\_%date:~0,10%\_1500\_PM.sql) Ø第三,使用flushlogs指令刷新创建新的二进制日志。可以通过mysqladminflushlogs或者flushlogs语句实现。最方便有效的方法是将它做成批处理文件,然后让操作系统定期执行。 Ø使用mysql Ø使用mysqlbinloglogs-bin.\[0-9\]\*|mysql进行增量备份的恢复。一般的,假设我们周日下午三点进行了完全备份并生成备份文件full\_backup\_20100415\_3\_PM.sql,周一周二中午一点进行了两次增量备份,分别生成增量备份文件inc\_backup\_1\_PM.0007和inc\_backup\_1\_PM.0008,周三上午10:00数据库发生崩溃,需要进行数据库恢复,此时正在记录的二进制日志为inc\_backup\_1\_PM.0009,我们还需要恢复其中记录的操作。具体的恢复操作为: mysql mysqlbinloginc\_backup\_1\_PM.0007inc\_backup\_1\_PM.0008inc\_backup\_1\_PM.0009 u具体应用(结合T8项目) 根据上述分析,我们在T8项目使用MySQL增量备份,也需要三个步骤: Ø首选修改MySQL启动配置文件my.cnf,在其中的mysqld项中增加log-bin选项,重新启动MySQL服务器以开启二进制日志功能,在生成文件/usr/data/mysql/t8server-bin.index和t8server-bin..000001。如图所示: Ø编写完全备份可执行文件脚本: Ø编写增量备份可执行文件脚本: Ø执行full\_backup\_20100417\_1\_pm,生成/usr/data/mysql/full\_backup\_20100417\_1\_pm.sql文件。 Ø执行inc\_backup\_1\_pm,生成/usr/data/mysql/t8server-bin..000002。 其中full\_backup\_20100417\_1\_pm.sql和t8server-bin..000002分别是完全备份和增量备份文件。 要进行备份文件的恢复,只需执行命令: MySQL提供了很方便的完全+增量备份实现方法,我们只需调用系统内置的方法或者作出一些细微的配置就可以对MySQL数据库进行备份和恢复。对于MyISAM数据库和InnoDB数据库,都可以通过mysqldump实现数据库的完全逻辑备份,通过启动二进制日志(binarylogs),可以记录一个时间段内对数据库的所有可能更新的操作,从而通过flushlogs创建新的日志而实现增量备份。 ### 什么是差异备份 增量备份 ### 备份种类的介绍及组合备份方案 完全备份 备份全部选中的文件夹,并不依赖文件的存档属性来确定备份那些文件。 ( 在备份过程中,任何现有的标记都被清除,每个文件都被标记为已备份,换言之,清除存档属性)。 差异备份 差异备份是针对完全备份:备份上一次的完全备份后发生变化的所有文件。 (差异备份过程中,只备份有标记的那些选中的文件和文件夹。它不清除标记,既:备份后不标记为已备份文件,换言之,不清除存档属性)。 增量备份 增量备份是针对于上一次备份(无论是哪种备份):备份上一次备份后,所有发生变化的文件。 (增量备份过程中,只备份有标记的选中的文件和文件夹,它清除标记,既:备份后标记文件,换言之,清除存档属性。) 不同备份类型组合的示例 完全备份和差异备份 在星期一进行完全备份,在星期二至星期五进行差异备份。如果在星期五数据被破坏了,则你只需要还原星期一完全的备份和星期四的差异备份。这种策略备份数据需要较多的时间,但还原数据使用较少的时间。 完全备份和增量备份 在星期一进行完全备份,在星期二至星期五进行增量备份。如果在星期五数据被破坏了,则你需要还原星期一正常的备份和从星期二至星期五的所有增量备份。这种策略备份数据需要较多的时间,但还原数据使用较少的时间。增量备份 ![mysql全量备份和增量备份区别\_mysql增量备份和差异备份\_02][mysql_mysql_02] ### 什么叫“数据库的增量备份”?谢谢 ### 比如说 数据库里面已有数据是集合A,然后今天因为一些业务又发生了一些数据,假设为B,那么做备份的时候,只是针对增加了的这一部分进行备份,即copy B而不是 copy (A+B)。 大型企业中涉及业务的数据库基本上都是采用这种方法每天将发生的业务数据进行备份,而不需要从数据库初始备份到现在,即速度上会快很多!数据库备份 按照备份数据库的大小数据库备份有四种类型,分别应用于不同的场合,下面简要介绍一下。 1、完全备份 这是大多数人常用的方式,它可以备份整个数据库,包含用户表、系统表、索引、视图和存储过程等所有数据库对象。但它需要花费更多的时间和空间,所以,一般推荐一周做一次完全备份。 2、事务日志备份 事务日志是一个单独的文件,它记录数据库的改变,备份的时候只需要复制自上次备份以来对数据库所做的改变,所以只需要很少的时间。为了使数据库具有鲁棒性,推荐每小时甚至更频繁的备份事务日志。 3、差异备份 也叫增量备份。它是只备份数据库一部分的另一种方法,它不使用事务日志,相反,它使用整个数据库的一种新映象。它比最初的完全备份小,因为它只包含自上次完全备份以来所改变的数据库。它的优点是存储和恢复速度快。推荐每天做一次差异备份。 4、文件备份 数据库可以由硬盘上的许多文件构成。如果这个数据库非常大,并且一个晚上也不能将它备份完,那么可以使用文件备份每晚备份数据库的一部分。由于一般情况下数据库不会大到必须使用多个文件存储,所以这种备份不是很常用。 按照数据库的状态可分为三种: 1.冷备份,此时数据库处于关闭状态,能够较好的保证数据库的完整性。 2.热备份,数据库正处于运行状态,这种方法依赖于数据库的日志文件进行备份。 3.逻辑备份,使用软件从数据库中提取数据并将结果写到一个文件上。 [mysql_mysql]: https://img2.baidu.com/it/u=1400729109,3009566414&fm=26&fmt=auto [mysql_mysql_02]: https://img2.baidu.com/it/u=151470836,1910591495&fm=26&fmt=auto
还没有评论,来说两句吧...