mysql增量备份

有运维或运维开发方面的需求,可以联系博主QQ 452336092或Email:admin#centos.bz(收费)

文章目录
[隐藏]

小量的数据库我们可以每天进行完整备份,因为这也用不了多少时间,但当数据库很大时,我们就不太可能每天进行一次完整备份了,而且改成每周一次完整备份,每天一次增量备份类似这样的备份策略。增量备份的原理就是使用了mysql的二进制日志,所以我们必须启用二进制日志功能。

一、增量备份

1、比如我们在星期天下午11点做一次完整备份:

  1. mysqldump --single-transaction --flush-logs --master-data=2 --all-databases > fullbackup_sunday_11_PM.sql

在sql文件中我们会看到两行:
— Position to start replication or point-in-time recovery from
— CHANGE MASTER TO MASTER_LOG_FILE=’bin-log.000002′, MASTER_LOG_POS=107;
第二行包含了我们需要的信息,是指备份后所有的更改将会保存到bin-log.000002二进制文件中。
2、然后在星期一下午11点我们来做一次增量备份:

  1. mysqladmin flush-logs

这时将会产生一个新的二进制日志文件bin-log.000003,bin-log.000002则保存了自星期天下午11点到现在的所有更改,我们只需要把这个文件备份到安全的地方就行了。然后星期二我们又做增量备份,还是执行同样的命令,这时我们保存bin-log.000003文件。

二、恢复备份

比如星期三中午12点出现了故障,这时需要恢复,我们首先导入星期天的完整备份:

  1. mysql < fullbackup_sunday_3_AM.sql

接着我们导入星期一和星期二的增量备份:

  1. mysqlbinlog bin-log.000002 bin-log.000003 | mysql

这时我们已经恢复了所有备份数据,我们还可以找到bin-log.000004,进一步恢复最新的数据。

转载请保留原文链接:Linux运维日志 » mysql增量备份

打赏

如果此文对你有所帮助,请随意打赏鼓励作者^_^

评论 12

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. magento您好,请问这种办法适合所有的数据库类型吗?比如innodb? bin-log保存数据结构吗?回复
    • 朱 茂海支持innodb,bin-log是保存数据的更改,比如insert update。回复
      • lcy那delete呢?回复
        • 朱 茂海一样会记录回复
  2. colincheng我想请教一下 我现在在两个地方布置了两个数据库A和B 数据库中的表结构都相同。现在我需要做两个数据库的同步。从A数据库通过上面的增量方式导出后,在B数据库中做导入工作。但是在这段时间里B数据库也可能做增删改的操作,那么导入过程会不会出现主键id重复的错误回复
    • 朱 茂海对这个没什么经验,试下吧回复
  3. linmysqldump 前最好 锁表一下 FLUSH TABLES WITH READ LOCK 结束后 unlock tables回复
  4. 知道就是你我使用 “mysqldump –lock-all-tables -flush-logs –master-data=2 -u xinhe -p hrm > backup_hrm_1_PM.sql ”或 “mysqldump –single-transaction -flush-logs –master-data=2 -u xinhe -p hrm > backup_hrm_1_PM.sql ” 执行后提示 “Got error: 1049: Unknown database '–lock-all-tables' when selecting the database ” 或 “ Got error: 1049: Unknown database '–single-transaction' when selecting the database”,数据库明明是存在的的,麻烦指点一下,谢谢!回复
    • 朱 茂海@知道就是你 –single-transaction前面是两个短存折号的,确认下是不是。回复
      • 知道就是你@朱 茂海 谢谢 ,两个短折号也不对“ mysqldump -–lock-all-tables -flush-logs –master-data=2 -u xinhe -p hrm > backup_hrm_1_PM.sql” ,提示 “ mysqldump: unknown option '-'” ,我的数据库服务器是“5.1.61-0ubuntu0.10.10.1-log”,不知道这个有没有影响 ?回复
      • 知道就是你@朱 茂海 使用“mysqldump –-single-transaction -flush-logs –master-data=2 -u xinhe -p hrm > backup_hrm_1_PM.sql” 提示 “mysqldump: Got error: 1049: Unknown database '–-single-transaction' when selecting the database”回复
  5. teddylu在sql文件中我们会看到两行: -- Position to start replication or point-in-time recovery from -- CHANGE MASTER TO MASTER_LOG_FILE='bin-log.000002', MASTER_LOG_POS=107;----------------- 这些内容在我的备份文件中没有发现,我备份的: [root@nagios-server mysql-backup]# cat aaa.sql -- MySQL dump 10.11 -- -- Host: localhost Database: aaa -- ------------------------------------------------------ -- Server version 5.0.95-log /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8 */; /*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */; /*!40103 SET TIME_ZONE='+00:00' */; /*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */; /*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; /*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; /*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; -- -- Table structure for table `name` -- DROP TABLE IF EXISTS `name`; /*!40101 SET @saved_cs_client = @@character_set_client */; /*!40101 SET character_set_client = utf8 */; CREATE TABLE `name` ( `id` int(3) NOT NULL auto_increment, `xm` char(8) default NULL, `xb` char(2) default NULL, `csny` date default NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=latin1; /*!40101 SET character_set_client = @saved_cs_client */; -- -- Dumping data for table `name` -- LOCK TABLES `name` WRITE; /*!40000 ALTER TABLE `name` DISABLE KEYS */; INSERT INTO `name` VALUES (1,'nash','M','1955-09-02'),(2,'oneal','M','1975-09-02'),(3,'kobe','M','1977-09-02'); /*!40000 ALTER TABLE `name` ENABLE KEYS */; UNLOCK TABLES; /*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */; /*!40101 SET SQL_MODE=@OLD_SQL_MODE */; /*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; /*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; /*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; -- Dump completed on 2014-07-24 3:47:38回复