`
tw5566
  • 浏览: 459089 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

MYSQL自动备份策略的选择与实践(转)

阅读更多

目前流行几种备份方式:

1、逻辑备份:使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。
优点:最大好处是能够与正在运行的mysql自动协同工作,
在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。可能会阻止修改操作。sql文件通用方便移植。

缺点:备份的速度比较慢。如果是数据量很多的时候。就很耗时间。如果数据库服务器处在提供给用户服务状态,在这段长时间操作过程中,意味着要锁定表(一般是读锁定,只能读不能写入数据)。那么服务就会影响的。


备注:所谓的与mysql服务器能够自动协同工作,实际上是指加参数来控制mysql服务器,比如锁定所有表只能进行读,不能进行写操作。

--lock-all-tables


2、物理备份:直接拷贝mysql的数据目录。

直接拷贝只适用于myisam类型的表。这种类型的表是与机器独立的。但实际情况是,你设计数据库的时候不可能全部使用myisam类型表。你也不可能:因为myisam类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。

缺点:你不能去操作正在运行的mysql服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)可能无法移植到其他机器上去。


更多的情况是,你会根据业务特点(比如你需要支持事务机制就必须使用innodb),查询速度和服务性能来选择表类型的。


必须保证表不被使用中
如果服务器在你正在拷贝一个表时(某个用户在进行update、insert操作)改变它,拷贝的数据就失去了备份的意义(没法准确还原到当时的点)。


如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。

保证你的拷贝完整性的最好方法是:关闭服务器,拷贝文件,然后重启服务器。
或者是,要锁定对应的表(对前端用户造成访问问题)。

 

解释直接拷贝文件,为什么不具备可移植性?


mysqldump 产生可移植到其他机器、甚至具有不同硬件结构的机器上的文本文件。直接拷贝文件不能够移植到其他机器上,除非要拷贝的表使用MyISAM 存储格式。ISAM 表只能在具有相同硬件结构的机器之间进行拷贝。例如,将文件从S PARC 的Solaris 机器拷贝到Intel 的Solaris 机器(或者相反)是行不通的。由MySQL3.23 引进的MyISAM 表存储格式可以解决这个问题,因为该格式与机器独立。因此,如果以下两个条件都满足的话,直接拷贝文件可以移植到具有不同硬件结构的机器上:即另一台机器上也必须运行MySQL3.23 以上的版本,并且文件必须表示成MyISAM 表,而不是ISAM 表。

 


3、双机热备份。

mysql数据库没有增量备份的机制。当数据量太大的时候备份是一个很大的问题。还好mysql数据库提供了一种主从备份的机制(也就是双机热备)
优点:适合数据量大的时候。现在明白了。大的互联网公司对于mysql数据备份,都是采用热机备份。搭建多台数据库服务器,进行主从复制。

主从复制经常遇到的问题就是,如何保证数据不堵塞,不延迟。这个问题还是可以容忍的,有一些方案可以改善。毕竟有得有失的。这已经是很省心省力的方式了。

 

================================================

 

我目前应该使用什么样的备份策略的权衡:

物理备份,恢复快,当然最好是存储在一个机器上。我现在是用物理备份还是逻辑备份为好呢?
考虑到以后会迁移平台。为了保证通用性。恢复速度1分钟左右的差距我是可以容忍的(sql文件备份方式,恢复速度没有物理配备快,物理备份直接拷贝覆盖掉原来文件即可)。所以我为了跨平台,我更加愿意使用逻辑备份。存储sql文件形式。

双热机备份方式,目前硬件没有多个。技术人员有限,需要人力去维护,比较麻烦。所以排除在外。

 

 

方案:
1、总体策略:写个定时执行任务。定时在晚上或凌晨自动备份(考虑数据库服务器在运行中不能停机)
代码中做成备份成功后,把以前的删掉。避免很多数据占据磁盘。

2、考虑到初期数据量这么小。使用mysqldump进行备份吧。设置在凌晨几点(4-6点这个时候基本上没什么人访问)的时候自动备份。


3、使用逻辑备份方式:恢复速度1分钟左右的差距我是可以容忍的。所以我为了跨平台,我更加愿意使用逻辑备份。存储sql文件形式。

4、每天都进行备份。由于是在凌晨的时候mysqldump去锁定,访问数据库服务器。对服务器几乎没什么影响。所以每天都可以备份。每天都一个sql文件。那么将会很多文件。
所以,每次备份成功后。删除以前的文件。保留最近一个星期的备份sql文件。


备份工具的路径:/usr/bin/mysqldump
备份数据保存路径:/data/backdata/

 

5、备份脚本的编写

思路:

5.1 在shell脚本中调用mysqldump生成备份文件(这个工具可以生成sql文件到磁盘上去)

5.2 为了方便以后查找。每次备份的记录记录成日志形式。几点进行了备份操作,生成了什么文件名称。这样可以方便以后查阅哪天是否没有成功备份

删除的文件作为日志信息也记录下来。

5.3  让linux下的crontab进程调用脚本执行。

命令:crontab -e

打开的文件中加入代码:0 05 * * * 脚本的路径/mysqlback.sh

 

 

 

mysqlback.sh的内容:

 

# /bin/bash
DB_NAME="****"
DB_USER="****"
DB_PASS="****"
BIN_DIR="/usr/bin"
BACK_DIR="/data/backdata"
DATE="mysql-`date +'%Y%m%d-%H:%M:%S'`"
LogFile="$BACK_DIR"/dbbakup.log #日志记录保存的目录
BackNewFile=$DATE.sql

$BIN_DIR/mysqldump --opt --force -u$DB_USER  -p$DB_PASS $DB_NAME > $BACK_DIR/$DATE.sql


echo -----------------------"$(date +"%y-%m-%d %H:%M:%S")"----------------------- >> $LogFile 



echo  createFile:"$BackNewFile" >> $LogFile


#find "/data/backdata/" -cmin +1 -type f -name "*.sql" -print > deleted.txt

find "/data/backdata/" -ctime +7 -type f -name "*.sql" -print > deleted.txt

echo -e "delete files:\n" >> $LogFile 

#循环删除匹配到的文件
cat deleted.txt | while read LINE
do
    rm -rf $LINE
    echo $LINE>> $LogFile
done


echo "---------------------------------------------------------------" >> $LogFile

分享到:
评论

相关推荐

    Windows下MySql自动备份脚本>单数据库版本

    "Windows下MySql自动备份脚本>单数据库版本"是一个专门为MySQL设计的批处理脚本,用于实现定期自动备份单个数据库。下面我们将深入探讨这个脚本的工作原理、配置方法以及如何利用它来构建一个有效的数据库备份策略。...

    Mysql自动发备份恢复

    1. **MySQL自动备份** - **定时任务调度器**:在Linux环境下,可以使用`cron`定时任务来执行MySQL的备份脚本,按照设定的时间点自动进行全量或增量备份。 - **备份类型**:全量备份通常包含所有数据库或选定数据库...

    MySQL自动备份并清理多少天前的备份文件

    标题中的“MySQL自动备份并清理多少天前的备份文件”涉及到的是数据库管理中的一个重要实践,即如何定期备份MySQL数据,并且自动删除过期的备份,以保持存储空间的有效利用和数据的安全性。在这个过程中,有两个关键...

    mysql分卷备份与还原

    MySQL数据库在业务运行中扮演着至关重要的角色,因此定期备份是确保数据安全的重要步骤。"mysql分卷备份与还原"这个主题聚焦于如何高效、安全地...在实践中,应结合具体的业务需求和资源限制,选择最适合的备份策略。

    Mysql数据库备份还原工具

    虽然描述中没有提及这些特性,但理解这些概念有助于更好地管理和优化数据库备份策略。 总的来说,"Mysql数据库备份还原工具"是一个方便的解决方案,它降低了对MySQL数据库进行备份和还原的技术门槛。对于那些希望...

    基于xtrabackup的MySQL数据库备份及还原Shell脚本.zip

    了解这些基本概念后,你可以查看压缩包内的`基于xtrabackup的MySQL数据库备份及还原Shell脚本`,这个脚本将详细展示如何结合`xtrabackup`和Shell来自动化MySQL数据库的备份与还原流程。在实际使用时,你需要根据自己...

    mysql使用SQLyog自动备份视频教程 v1.0(swf)

    5. 保存并应用设置:确认所有设置无误后,保存备份策略,并启用自动备份功能。 附带的"chinaz.com.txt"和"Mysql远程备份.txt"可能包含额外的信息,如如何配置MySQL服务器以允许远程备份,或者是一些关于数据库远程...

    mysql备份脚本.rar

    根据业务的恢复点目标(RPO)和恢复时间目标(RTO),制定合适的备份策略。例如,对于高可用性要求的系统,可能需要更频繁的增量备份。 总之,MySQL备份脚本是管理和保护数据库的关键工具。理解和定制这些脚本,能够...

    MySQL中的故障转移:策略、实践与自动化

    本文将深入探讨MySQL中实现数据故障转移的策略、实践方法,并提供自动化的解决方案。 在MySQL中实现数据恢复的故障转移是一个复杂但必要的过程。通过配置主从复制、读写分离、故障检测和自动故障转移,可以确保在主...

    阿里MySQL备份恢复指南

    首先,阿里云提供了多种备份策略供用户选择,包括全量备份、增量备份和差异备份。全量备份是首次备份所有数据,而增量备份和差异备份则只记录自上次备份以来发生变化的数据,这在节省存储空间和缩短备份时间方面很有...

    mysql数据库备份还原类.rar

    本压缩包"mysql数据库备份还原类.rar"提供了两个PHP类文件,dbback.class.php和upfile.class.php,它们可能用于实现MySQL数据库的自动备份和恢复功能。 1. **数据库备份**: - 备份原理:通常,MySQL数据库的备份...

    mysql自动安装脚本,备份配置,慢日志配置,配置文件

    确保备份策略合理,比如定期执行(如每天或每周)和保留一定数量的历史备份,以便在需要时恢复。 `slow-query-3306.sh` 是关于慢查询日志配置的脚本。慢查询日志记录了执行时间超过特定阈值的SQL语句,这对于性能...

    python备份mysql数据库

    在IT行业中,数据库备份是确保数据安全性和可恢复性的重要环节。当谈到使用Python来备份MySQL数据库时...这样的备份策略对于任何依赖MySQL数据库的业务来说都是至关重要的,因为它能确保在遇到问题时能够快速恢复数据。

    Mysql转oracle工具

    在转换过程中,可能需要将MySQL的数据分布策略转换为Oracle的表空间或分区策略。 5. **索引和约束**: MySQL与Oracle的索引类型和约束定义(如主键、外键)也有所不同,转换时需要注意。 6. **存储过程和函数**:...

    自动备份数据库java源码

    总的来说,这个Java源码项目提供了一个基础的SQL Server数据库自动备份解决方案,使用者可以根据自己的需求进行扩展,例如增加对其他数据库的支持,优化备份策略,或者添加更复杂的安全性和监控功能。对于学习数据库...

    MySQL性能优化和高可用架构实践.pptx

    "MySQL性能优化和高可用架构实践" 本书《MySQL性能优化和高可用架构实践》是一本详细介绍MySQL性能优化和高可用架构实践的书籍,旨在帮助读者提升MySQL数据库的性能和可靠性。本书的内容涵盖了查询优化的基本原则和...

    pbootcms数据sqlite转mysql数据库

    5. **性能优化**:MySQL提供多种性能优化策略,包括存储引擎的选择(如InnoDB),索引设计,查询优化等。 6. **安全考虑**:在迁移过程中,确保遵循最佳实践,保护数据安全,比如设置强密码,限制数据库用户的访问...

    数据库自动备份压缩的实现策略与代码实践

    数据库自动备份压缩是确保数据安全性和存储优化的重要环节。通过使用数据库内置压缩功能、编写脚本自动化备份并压缩、使用第三方工具、配置...希望本文为您提供了实用的见解与技巧,助力您的数据库自动备份压缩工作。

    mysql语句转postgres的工具

    5. **备份与恢复计划**:在进行迁移之前,务必做好源数据库的备份,并了解如何在PostgreSQL中恢复数据。 综上所述,`MysqlToPostgresUtil`是一个实用的工具,它简化了MySQL到PostgreSQL的迁移过程,通过自动转换DDL...

Global site tag (gtag.js) - Google Analytics