`
阅读更多
前几天网站数据库因为一个误操作导致数据全部丢失,更加悲剧的是由于疏忽只有几个月前的备份,而最近几个月网站内容增加了很多(出来混迟早是要还的啊!!!),万幸的是在配置服务器的时候打开了二进制日志。于是用了一天一夜从几十G的日志文件中恢复了数据。亡羊补牢,赶紧配置上了完全备份和增量备份。备份策略是:每周进行一次完全备份,每天一次增量备份。完全备份采用的是mysqldump,增量备份是基于二进制日志的。配置自动备份的过程中查了不少资料,感觉网上的都是重复的资料,解释也不是很清楚,下面把查到的资料和自己的一些理解记录下来,方便自己做个记录也给需要的提供点方便。
数据库:mysql 5.1.54
数据库引擎:MyISAM(下面的备份仅适用于MyISAM,而且已经在线上服务器运行有效,InnoDB有一点修改,请自行查找并测试)
操作系统:ubuntu10.04

完全备份:
        完全备份采用的命令:
mysqladmin -u XXX -pXXX flush-tables
mysqldump -u XXX -pXXX --master-data=2 --flush-logs --delete-master-logs --databases db1 db2 > backup.sql

其中需要注意的是-p后面紧接着的是密码(中间没有空格),这样就不用手动输入密码了。第一行是为备份做准备,目的是mysql执行flush-tables命令,将缓存中的数据写入到文件中。第二行是主要的备份命令。 --master-data=2的意思是在生成的备份文件开头加入此次备份截至到二进制日志的编号,为以后的增量备份做准备。此外需要注意的是使用--master-data[=#]参数时默认使用了参数--lock-all-tables on。而--lock-all-tables on参数的意思是通过试用一个全局读锁锁定整个mysql数据库,同时这个参数mysqldump的第二个参数--flush-logs也有影响。--flush-logs是新建二进制日志。在同时备份多个数据库时如果有多个数据库(如例子中的db1 db2)则新建多个二进制日志(新建日志数目与数据库个数相同),但是如果有参数--lock-all-tables on,则无论多少个数据库只新建一个二进制日志。--delete-master-logs删除除了新生成的二进制日志外所有的日志文件。因为随着网站运行日志文件会越来越大,需要删除以释放空间。至于-u,-p,-databases命令就不用解释了。
我写的数据库完整备份shell脚本
#!/bin/sh
#使用mysqldump备份数据库
#备份时间暂定为每周一次,写在crontab中
today=`date +"%Y_%m_%d_%H_%M_%S"`
#backupTimes是备份保留份数。
backupTimes=4
delete()
{
	i=0
	for fullBackFill in `ls -t full*`
	do
	  i=$((i+1))
	  if [ $backupTimes -lt $i ]
		then
		  rm $fullBackFill
	  fi
	done
}

backupbasedir=/home/ftp/backup/full/
cd $backupbasedir
today_bkdir=$backupbasedir"full"$today".sql"

mysqladmin -u XXX -pXXX flush-tables
#mysqldump参数:--master-data=2是为了在mysqldump导出的文件开头写上pos,供恢复用。另外该参数默认执行--lock-all-tables
#这次备份会删除以前的二进制日志
mysqldump -u XXX -pXXX --master-data=2 --flush-logs --delete-master-logs --databases db1 db2 > $today_bkdir
#删掉早于4次(这个数由backupTimes决定)的备份
delete


增量备份:
        增量备份使用的命令
mysqladmin -u XXX -pXXX flush-tables
mysqladmin -u XXX -pXXX flush-logs

命令作用已经在上面讲过,不再赘述。
增量备份shell脚本
#!/bin/sh

mysqladmin -u XXX -pXXX flush-tables
mysqladmin -u XXX -pXXX flush-logs
backupDir=/home/ftp/backup/incremental/
time=`date +%Y_%m_%d_%H_%M_%S`
timeFolder=$backupDir$time"/"
echo $timeFolder
if [ -e $timeFolder ]
  then
    echo
else
  mkdir -p $timeFolder
fi
i=0
for binfile in `ls -t /usr/local/mysql/var/mysql-bin.[0-9]*` 
do
  i=$((i + 1))
  if [ 1 -eq $i ]
  then
    echo "The new generated bin-log: "$binfile 
  else
  filename=$(basename $binfile)
#  echo $binfile
  mv $binfile  $timeFolder$filename
  fi
done


需要注意的是备份脚本由于环境变量,权限配置等等原因只适用于本服务器,贴出来是让给大家一个参考,也希望反馈些建议。请参考脚本结合各自环境使用。
这里只是简要介绍,如果想理解的更详细更深刻请查询mysql手册备份与恢复部分和mysqldump命令手册,上面有详细介绍,比网上千篇一律的介绍更详细更权威,博客里介绍的只是单机数据库备份,分布式备份在手册上也有详细介绍
2
0
分享到:
评论

相关推荐

    mysql数据库备份还原类.rar

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

    C# MySQL数据库备份还原

    C# MySQL数据库备份还原 C# MySQL数据库批量备份还原工具是使用C#语言开发的一个数据库备份还原工具,主要用于对MySQL数据库进行批量备份和还原操作。该工具使用了Process类来操作cmd.exe,调用mysqldump.exe来执行...

    Mysql数据库备份还原工具

    "Mysql数据库备份还原工具"就是这样一个实用程序,它简化了MySQL数据库的备份和恢复过程。 首先,让我们详细了解MySQL数据库备份的重要性。数据库备份是为了防止数据丢失,这可能由于硬件故障、软件错误、人为操作...

    MySQL数据库备份和恢复

    ### MySQL数据库备份与恢复:深度解析与实践指南 在当今数据驱动的世界中,数据库的稳定性和数据的安全性显得尤为重要。MySQL作为全球最流行的开源关系型数据库管理系统之一,其备份和恢复策略是确保数据安全和系统...

    易语言MYSQL数据库备份还原器

    《易语言MYSQL数据库备份还原器》是一款专为易语言编程环境设计的实用工具,它能够帮助用户方便地对MYSQL数据库进行备份与恢复操作。这款软件的核心功能包括数据库的备份和还原,以及目录复制,旨在提高数据库管理的...

    易语言MYSQL数据库备份还原器源码

    易语言MYSQL数据库备份还原器源码是一个基于易语言编程的工具,主要用于MySQL数据库的备份与恢复操作。易语言,作为一款中国本土开发的编程语言,以其简洁的语法和丰富的库函数,为初学者和专业开发者提供了便利。这...

    C#实现MySQL数据库的备份、还原和初始化

    本文将详细介绍如何使用C#来实现MySQL数据库的初始化、备份和还原功能。 首先,数据库的初始化通常指的是创建一个新的数据库。在C#中,你可以通过执行SQL语句来完成这一过程。在给出的代码示例中,`GetExecute`方法...

    mysql数据库备份还原实战操作步骤-mysqldump备份还原

    MySQL 数据库备份还原实战操作步骤 - mysqldump 备份还原 在本文中,我们将介绍 MySQL 数据库备份还原实战操作步骤,包括使用 mysqldump 工具进行备份和恢复数据库的详细指令。 一、备份数据库 mysqldump 是 ...

    C#实现备份、还原MySql数据库

    要备份MySQL数据库,我们需要执行SQL的`mysqldump`命令,这是一个用于创建数据库备份的实用程序。在C#中,我们可以通过`Process`类来调用这个命令行工具。 以下是一个简单的C#代码示例,展示如何执行`mysqldump`...

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

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

    mysql数据库备份还原

    一、MySQL数据库备份 MySQL数据库备份主要分为全量备份和增量备份。全量备份是指备份整个数据库,包括所有表结构和数据。增量备份则是在上一次全量备份基础上,只备份自上次备份以来发生改变的数据。 1. 使用...

    mysql数据库备份与还原图解.docx

    MySQL 数据库备份与还原图解 MySQL 数据库备份是指将 MySQL 数据库中的数据导出到文件中,以便在需要时将数据恢复到数据库中。反之,MySQL 数据库还原是指将备份的数据恢复到数据库中。下面将详细介绍 MySQL ...

    mysql数据库备份与还原

    ### MySQL数据库备份与还原知识点详解 #### 一、MySQL数据库备份的重要性 在现代数据库管理中,备份是一项至关重要的任务。它不仅可以帮助我们防止因意外事件(如硬件故障、人为错误或恶意攻击)而导致的数据丢失...

    简单的mysql数据库备份与还原

    首先,MySQL数据库备份主要是为了防止数据丢失或损坏。这可以通过多种方式进行,例如使用MySQL自带的`mysqldump`命令行工具,或者编写PHP脚本来实现自动化。`mysqldump`是一个强大的实用程序,能够将数据库结构和...

    MySQL数据库备份和还原

    一、MySQL数据库备份的重要性 1. 防止数据丢失:数据库中的信息通常是业务的核心,任何意外的数据丢失都可能导致严重的经济损失甚至企业运营中断。 2. 系统维护:定期备份可以在进行数据库更新、优化或迁移时提供...

    C#备份还原mysql数据库

    本篇文章将详细讲解如何使用C#来实现MySQL数据库的备份和还原功能。 首先,要进行MySQL数据库的备份,我们需要利用MySQL提供的命令行工具或者API接口。在C#中,我们可以使用`MySqlCommand`类执行SQL语句来完成这个...

    mysql数据库备份与还原图解

    ### MySQL数据库备份与还原详解 #### 一、MySQL数据库备份 在进行任何重要的数据库操作之前,备份是非常必要的步骤,它可以确保在数据丢失或损坏时能够迅速恢复数据。MySQL提供了多种备份方式,其中最常见的方法之...

    mysql数据库备份/还原的PB程序

    在这个“mysql数据库备份/还原的PB程序”中,我们将探讨如何使用PB实现MySQL数据库的备份和还原操作。 首先,要理解备份的必要性。数据库备份是为了防止数据丢失,这可能由硬件故障、软件错误、恶意攻击或意外删除...

Global site tag (gtag.js) - Google Analytics