MySQL 备份和恢复策略(一)

news/2024/7/6 23:27:43

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。本文主要对MyISAM表做备份恢复。

 

备份策略一:直接拷贝数据库文件(不推荐)

备份策略二:使用mysqlhotcopy备份数据库(完全备份,适合小型数据库备份)

备份策略三:使用mysqldump备份数据库(完全+增量备份,适合中型数据库备份)

备份策略四:使用主从复制机制(replication)(实现数据库实时备份)

 

脚本下载地址:点击下载脚本

 

 

备份策略一、直接拷贝数据库文件

直接拷贝数据文件最为直接、快速、方便,缺点是基本上不能实现增量备份。为了保证数据的一致性,需要在备份文件前,执行以下 SQL 语句:

FLUSH TABLES WITH READ LOCK;

也就是把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。

 

备份策略二、使用mysqlhotcopy备份数据库

mysqlhotcopy 是一个 PERL 程序,最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径,但它只能运行在数据库文件(包括数据表定义文件、数据文件、索引文件)所在的机器上,并且mysqlhotcopy 只能用于备份 MyISAM表。

本备份策略适合于小型数据库的备份,数据量不大,可以采用mysqlhotcopy程序每天进行一次完全备份。

备份策略布置:

(1)、安装DBD-mysql perl模块,支持mysqlhotcopy脚本连接到MySQL数据库。

shell> tar -xzvf  DBD-mysql-4.005.tar.gz

shell> cd DBD-mysql-4.005

shell> unset LANG

shell> perl Makefile.PL -mysql_config=/usr/local/mysql/bin/mysql_config -testuser=root -testpassword=UserPWD

shell> make

shell> make test

shell> make install

(2)、设置crontab任务,每天执行备份脚本

shell> crontab -e

0 3 * * * /root/MySQLBackup/mysqlbackup.sh >/dev/null 2>&1

每天凌晨3:00执行备份脚本。

 

mysqlbackup.sh注释:

#!/bin/sh

# Name:mysqlbackup.sh

# PS:MySQL DataBase Backup,Use mysqlhotcopy script.

# Write by:i.Stone

# Last Modify:2007-11-15

#

# 定义变量,请根据具体情况修改

# 定义脚本所在目录

scriptsDir=`pwd`

# 数据库的数据目录

dataDir=/usr/local/mysql/data/

# 数据备份目录

tmpBackupDir=/tmp/tmpbackup/

backupDir=/tmp/mysqlbackup/

# 用来备份数据库的用户名和密码

mysqlUser=root

mysqlPWD=111111

# 定义eMail地址

eMail=alter@somode.com


# 如果临时备份目录存在,清空它,如果不存在则创建它

if [[ -e $tmpBackupDir ]]; then

  rm -rf $tmpBackupDir/*

else

  mkdir $tmpBackupDir

fi

# 如果备份目录不存在则创建它

if [[ ! -e $backupDir ]];then

  mkdir $backupDir

fi
# 清空MySQLBackup.log

if [[ -s MySQLBackup.log ]]; then

  cat /dev/null >MySQLBackup.log

fi
# 得到数据库备份列表,在此可以过滤不想备份的数据库

for databases in `find $dataDir -type d | \

  sed -e “s/\/usr\/local\/mysql\/data\///” | \

  sed -e “s/test//”`; do
  if [[ $databases == "" ]]; then

    continue

  else

# 备份数据库

    /usr/local/mysql/bin/mysqlhotcopy –user=$mysqlUser –password=$mysqlPWD -q “$databases” $tmpBackupDir

    dateTime=`date “+%Y.%m.%d %H:%M:%S”`

    echo “$dateTime Database:$databases backup success!” >>MySQLBackup.log

  fi

done
# 压缩备份文件

date=`date -I`

cd $tmpBackupDir

tar czf $backupDir/mysql-$date.tar.gz ./
# 发送邮件通知

if [[ -s MySQLBackup.log ]]; then

  cat MySQLBackup.log | mail -s “MySQL Backup” $eMail

fi
# 使用smbclientmv.sh脚本上传数据库备份到备份服务器

# $scriptsDir/smbclientmv.sh

smbclientmv.sh注释

#!/bin/sh

# Name:smbclientmv.sh

# PS:Move the data to Backup Server.

# Write by:i.Stone

# Last Modify:2007-11-15

#

# 定义变量

# 备份服务器名

BackupServer=”BackupServerName”

# 共享文件夹名

BackupShare=”ShareName”

# 备份服务器的访问用户名和密码

BackupUser=”SMBUser”

BackupPW=”SMBPassword”

# 定义备份目录

BackupDir=/tmp/mysqlbackup

date=`date -I`
# Move the data to BackupServer

smbclient //$BackupServer/$BackupShare \

$BackupPW -d0 -W WORKGROUP -U $BackupUser \

-c “put $BackupDir/mysql-$date.tar.gz \

mysql-$date.tar.gz”
# Delete temp files

rm -f $BackupDir/mysql-$date.tar.gz

(3)、恢复数据库到备份时的状态
mysqlhotcopy 备份出来的是整个数据库目录,使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可,同时要注意权限的问题,如下例:
shell> cp -rf db_name /usr/local/mysql/data/
shell> chown -R mysql:mysql /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)
本套备份策略只能恢复数据库到最后一次备份时的状态,要想在崩溃时丢失的数据尽量少应该更频繁的进行备份,要想恢复数据到崩溃时的状态请使用主从复制机制(replication)。

 

本文转自:http://blog.thematice.com 作者:稀饭的国度

转载于:https://www.cnblogs.com/lvsong/archive/2010/07/30/1788895.html


http://www.niftyadmin.cn/n/3368217.html

相关文章

Petals ESB 简介

Petal ESB 是一个分布式的开源ESB解决方案,隶属于中间件开源国际联盟OW2。 Petal ESB 是建立在JAVA基础上的异构解决方案,做为一个企业服务总线ESB,适用于大型SOA架构。设计运行在多台分布式服务器之上并完全兼容主要工业标准包括&#xff1a…

VI 命令简介

1.打开一个文件 vi 文件路径 2.命令模式转换 输入模式 i 命令模式 esc 3.复制 和 粘贴 1)将光标移动到将要复制的行处,按yy进行复制当前行(按nyy复制n行),再移动到粘贴位置,按p进行粘贴。 2)将光标移到复制的首位置…

Petals ESB 安装部署

本文档主要有三个内容。 1)Petals-esb的安装使用。 2)Petals Webconsole的安装使用。 3)Petals各组件的安装。 Petals-esb的安装使用。 需要下载的软件 Download a JDK 6Download Apache TomCat Download Petals binaries : Petals ESB, Peta…

当git上只做文件大小写重命名的修改时,如何躲坑

一、 提交时 假设修改ABC.java为Abc.java。 1.1 如果使用git命令进行仅涉及大小写的重命名 1.1.1 设置git库为大小写敏感(不建议) $ git config core.ignorecase false用这种方法进行重命名,用git status就可以识别出修改了,但是不…

java properties

MySysProps.java /** * 获取所有系统属性值的java代码段 * url http://whb.iteye.com/blog/314496 * param args */ package com.javaeye.lindows.util;import java.util.Enumeration; import java.util.Properties;public class MySysProps {/*** 获取所有系统属性值的java代…

Sicily 1443. Printer Queue (队列)

题目&#xff1a;http://soj.me/1443 根据priority决定打印的顺序&#xff0c;若priority不是最高&#xff0c;则排在队列最后面 思路&#xff1a;基本队列操作 模拟法 #include <iostream> #include <cstdlib> #include <queue>using namespace std;int arr…

Hello Socket - 第一个Socket程序

1. 首先&#xff0c;要编写windows下socket程序&#xff0c;必须要加入Winsock支持 2. 服务端监听程序(Server.cpp) #include<winsock2.h> //包含头文件 #include<stdio.h> #include<windows.h> #pragma comment(lib,"WS2_32.li…

project crm / CallCenter

>>>docs.google.com/my project/s***** crm 关与Call center 与EAS系统的集成方法讨论&#xff01;一是&#xff1a;CallCenter开发商要开发多个界面&#xff0c;分别显示客户的一些需在EAS系统中存储的信息&#xff0c;EAS作接口开发二是&#xff1a;CallCenter和EAS…