`
shinepaopao
  • 浏览: 145295 次
社区版块
存档分类
最新评论

MYSQL自动备份策略的选择

阅读更多

目前流行几种备份方式:

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

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


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

--lock-all-tables


2、物理备份:直接拷贝mysql的数据目录。缺点,你不能去操作正在运行的mysql服务器(在拷贝的过程中有用户通过应用程序访问更新数据,这样就无法备份当时的数据)
可能无法移植到其他机器上去。
直接拷贝只适用于myisam类型的表。这种类型的表是与机器独立的。但实际情况是,你设计数据库的时候不可能全部使用myisam类型表。你也不可能:因为myisam类型表与机器独立,方便移植,于是就选择这种表,这并不是选择它的理由。

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


必须保证表不被使用中。
如果服务器在你则正在拷贝一个表时改变它,拷贝就失去意义。
如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。

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

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


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

 


3、双机热备份。

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

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

 

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

 

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

物理备份,恢复快,当然最好是存储在一个机器上。我现在是用物理备份还是逻辑备份为好呢?
考虑到以后会迁移平台。为了保证通用性。恢复速度1分钟左右的差距我是可以容忍的。所以我为了跨平台,我更加愿意使用逻辑备份。存储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

4
4
分享到:
评论
3 楼 netkiller.github.com 2013-09-09  
另外采用快照备份效率更高
2 楼 netkiller.github.com 2013-09-09  
参考一下这个脚本,在删除文件方面做得比你用的deleted.txt 要好

https://gist.github.com/netkiller/6420375
1 楼 rox 2013-09-08  
分析得很详细,谢谢分享了!

相关推荐

    Linux系统部署Mysql自动备份策略操作步骤(20200618).txt

    描述Linux系统部署Mysql自动备份操作详细步骤 描述Linux系统部署Mysql自动备份操作详细步骤 描述Linux系统部署Mysql自动备份操作详细步骤

    mysql数据库备份策略

    针对MyISAM表的备份策略选择取决于数据库的大小、数据变更频率以及业务对数据一致性和完整性要求等因素。直接拷贝数据库文件虽然操作简单,但在实际应用中并不推荐;`mysqlhotcopy`适用于小型数据库的完全备份;而`...

    mysql自动备份工具

    MySQL自动备份工具是一种高效、便捷的解决方案,用于定期保护和保存MySQL数据库中的数据。它允许用户设置特定的备份时间,确保在系统运行过程中不会丢失重要信息。这些备份通常以.sql格式存储,这是一种文本文件格式...

    Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份).zip

    "Windows下MySql自动备份脚本(有备份日志,且可以删除历史备份)"的资源提供了一个解决方案,它是一个批处理脚本(MysqlAutoBackup.bat),能够自动化执行MySQL的备份过程,同时生成备份日志并清理历史备份。...

    mysql自动实现备份脚本

    2. **MySQL自动备份的重要性** - 数据安全:定期备份能防止因硬件故障、软件错误或恶意攻击导致的数据丢失。 - 恢复速度:如果出现问题,可以快速恢复到某个时间点的状态,减少业务中断时间。 - 符合法规:某些...

    mysql自动备份.zip

    为了创建自动备份策略,你需要考虑以下几点: 1. **备份频率**:根据业务需求,你可以选择每天、每周或每月备份一次。高频交易的数据库可能需要更频繁的备份。 2. **备份类型**:全量备份会备份所有数据,而增量...

    mysql 自动备份数据库脚本

    4. **备份策略**:自动备份不仅需要考虑何时执行,还应考虑备份的频率(如每日、每周或每月一次)、保留多少个历史备份、全量备份与增量备份的结合等。全量备份是完整数据库的拷贝,而增量备份仅备份自上次备份以来...

    linux下 MYSQL 自动备份工具

    在Linux环境中,MySQL数据库的自动备份是系统管理中不可或缺的一部分,尤其对于那些依赖大量数据运行的企业来说更是...通过编写和配置适当的shell脚本,如`backup.sh`,可以定制适合任何业务需求的MySQL自动备份策略。

    Mysql自动备份(Windows)

    本篇文章将围绕“Mysql自动备份(Windows)”这一主题,详细介绍如何在Windows环境下设置MySQL数据库的自动备份。 首先,我们需要了解备份的基本类型。在MySQL中,常见的备份方式有两种:逻辑备份和物理备份。逻辑...

    mysql实现自动备份

    本篇文章将详细介绍如何在Windows操作系统下利用MySQL实现数据库的自动备份。 首先,理解MySQL的备份方式。常见的MySQL备份方法有两种:全备和增量备。全备是指完整备份整个数据库,包括所有数据和结构;增量备则是...

    MySQL自动备份

    ### MySQL自动备份与清理策略详解 #### 一、Shell脚本+Cron实现MySQL数据库自动备份及清理 在现代企业环境中,数据库的安全性至关重要。对于基于MySQL的企业而言,定期备份数据库不仅可以确保数据的安全,还能在...

    mysql自动备份shell脚本

    MySQL自动备份是保护网站数据安全的关键措施,尤其是在服务器上运行着关键业务的环境中。手动备份虽然可靠,但耗时且容易遗漏,而通过编写shell脚本实现自动化备份则能极大地提高效率,确保数据的安全性。以下是一些...

    mysql自动化备份方案

    - **撰写MySQL自动备份脚本**:通过编写bash脚本实现MySQL数据库的自动化备份。脚本中定义了数据库名称、用户名、密码等关键参数,并指定了备份文件的保存路径。使用`mysqldump`命令进行热备份,即在不中断数据库...

    mysql自动备份还原小程序

    MySQL自动备份还原小程序是一款实用工具,它简化了数据库管理和维护中的关键步骤——数据备份与恢复。这个程序的主要目的是为了提供一种高效、便捷的方式来确保数据库的安全,防止数据丢失,并在需要时能够快速恢复...

    实现MySQL自动备份的方法

    ### 实现MySQL自动备份的方法 在IT行业中,数据的安全性和完整性是非常重要的,特别是在数据库管理方面。MySQL作为一种广泛使用的开源关系型数据库系统,在企业级应用中非常常见。为了确保数据的安全,定期进行...

    linux mysql自动备份工具

    通过以上步骤,你就成功地在Linux环境中配置了一个简单的MySQL自动备份系统。这个系统可以根据需求进行扩展,例如添加对多个数据库的备份、使用加密存储备份、进行增量或差异备份等。对于大型或高可用性环境,可能...

    MySQL 备份和恢复策略

    本文将探讨两种常用的 MySQL 备份策略:直接拷贝数据库文件和使用 `mysqlhotcopy` 工具。 首先,直接拷贝数据库文件是一种简单但不推荐的方法,因为它无法实现增量备份,即只备份自上次备份以来发生更改的数据。...

    Linux平台Mysql自动备份脚本

    ### Linux平台Mysql自动备份脚本详解 #### 一、引言 在信息化时代,数据安全至关重要。数据库作为存储业务核心数据的关键组件,其稳定性和可靠性直接影响到整个系统的可用性。MySQL作为全球广泛使用的开源关系型...

    mysql使用SQLyog自动备份视频教程.rar

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而SQLyog是一款功能强大的MySQL...所以,如果你正在寻找一个高效、易用的方式来管理MySQL的备份,那么这个“mysql使用SQLyog自动备份视频教程”无疑是你的理想选择。

Global site tag (gtag.js) - Google Analytics