下载安卓APP箭头
箭头给我发消息

客服QQ:3315713922

解密mysql数据库进行自动备份策略

作者:课课家教育     来源: http://www.kokojia.com点击数:640发布时间: 2016-03-15 09:00:21

标签: mysql自动备份数据库备份mysql备份方法

  MySQL数据库进行自动备份策略是怎样的呢?常用的数据库mysql是如何进行数据的自动备份呢?

解密mysql数据库进行自动备份策略_数据库备份_mysql备份方法_课课家

  目前流行几种备份方式:

  1、逻辑备份:使用mysql自带的mysqldump工具进行备份。备份成sql文件形式。

  优点:最大好处是能够与正在运行的mysql自动协同工作,

  在运行期间可以确保备份是当时的点,它会自动将对应操作的表锁定,不允许其他用户修改(只能访问)。可能会阻止修改操作。sql文件通用方便移植。

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

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

  --lock-all-tables

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

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

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

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

  必须保证表不被使用中。

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

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

  保证你的拷贝完整性的最好方法是:关闭服务器,拷贝文件,然后重启服务器。

  或者是,要锁定对应的表(对前端用户造成访问问题)。

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

  mysqldump产生可移植到其他机器、甚至具有不同硬件结构的机器上的文本文件。直接拷贝文件不能够移植到其他机器上,除非要拷贝的表使用MyISAM存储格式。ISAM表只能在具有相同硬件结构的机器之间进行拷贝。例如,将文件从SPARC的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

  打开的文件中加入代码:005***脚本的路径/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

  echocreateFile:"$BackNewFile">>$LogFile

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

  #-ctime表示创建时间,这里表示删除创建时间为多少天之前的文件,也就是结果只保留多少天的数据

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

  echo-e"deletefiles:\\n">>$LogFile

  #循环删除匹配到的文件

  catdeleted.txt|whilereadLINE

  do

  rm-rf$LINE

  echo$LINE>>$LogFile

  done

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

赞(19)
踩(0)
分享到:
华为认证网络工程师 HCIE直播课视频教程