Chinaunix首页 | 论坛 | 博客
  • 博客访问: 175809
  • 博文数量: 159
  • 博客积分: 7007
  • 博客等级: 准将
  • 技术积分: 1750
  • 用 户 组: 普通用户
  • 注册时间: 2008-06-17 15:05
文章分类

全部博文(159)

文章存档

2010年(39)

2009年(106)

2008年(14)

我的朋友

分类: LINUX

2009-06-05 10:03:06

mysql的备份和恢复

自动备份

1.打包data方式的备份


[root@tomcat mysqlbackup]# more backup


#!/bin/bash


#This is a ShellScript For Auto DB Backup


#Powered by aspbiz


#2004-09



#Setting

#设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式

#默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy

#默认情况下,用root(密码nihao)登录mysql数据库,备份至/home/mysqlbackup/mysql.xxxxx.tgz


DBName=mysql
DBUser=root
DBPasswd=nihao
BackupPath=/home/mysqlbackup/mysql
LogFile=/root/db.log
DBPath=/var/lib/mysql/
#BackupMethod=mysqldump


#BackupMethod=mysqlhotcopy


#BackupMethod=tar


#Setting End




NewFile="$BackupPath"$(date +%y%m%d).tar.gz
DumpFile="$BackupPath"$(date +%y%m%d)
OldFile="$BackupPath"$(date +%y%m%d --date='5 days ago').tgz

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


if [ -f $OldFile ]
then
   rm -f $OldFile >> $LogFile 2>&1
   echo "[$OldFile]Delete Old File Success!" >> $LogFile
else
   echo "[$OldFile]No Old Backup File!" >> $LogFile
fi

if [ -f $NewFile ]
then
   echo "[$NewFile]The Backup File is exists,Can't Backup!" >> $LogFile
else
   case $BackupMethod in
   mysqldump)
      if [ -z $DBPasswd ]
      then
         mysqldump -u $DBUser --opt $DBName > $DumpFile
      else
         mysqldump -u $DBUser -p$DBPasswd --opt $DBName > $DumpFile
      fi
      tar czvf $NewFile $DumpFile >> $LogFile 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile
      rm -rf $DumpFile
   ;;
   mysqlhotcopy)
      rm -rf $DumpFile
      mkdir $DumpFile
      if [ -z $DBPasswd ]
      then
         mysqlhotcopy -u $DBUser $DBName $DumpFile >> $LogFile 2>&1
      else
         mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >>$LogFile 2>&1
      fi
      tar czvf $NewFile $DumpFile >> $LogFile 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile
      rm -rf $DumpFile
    ;;
   *)
      /etc/init.d/mysqld stop >/dev/null 2>&1
      tar czvf $NewFile $DBPath$DBName >> $LogFile 2>&1
      /etc/init.d/mysqld start >/dev/null 2>&1
      echo "[$NewFile]Backup Success!" >> $LogFile

   esac
fi

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



加入crontab使其自动运行

[root@tomcat mysqlbackup]# crontab -e

00 04 * * *    /home/mysqlbackup/backup
[root@tomcat mysqlbackup]# ls

backup mysql.090605.tar.gz

2.mysqldump方式的备份


[root@tomcat mysqlbackup]# more backup.sh

#!/bin/sh

# File: /home/mysqlbackup/backup.sh

# Database info

DB_NAME="mysql"
DB_USER="root"
DB_PASS="nihao"

# Others vars

BIN_DIR="/usr/bin"
BCK_DIR="/home/mysqlbackup"
DATE=`date +%Y%m%d`

# TODO

#$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/db_$DATE.gz

$BIN_DIR/mysqldump -u $DB_USER -p$DB_PASS $DB_NAME | gzip > $BCK_DIR/mysql.$DATE.sql.gz


加入crontab使其自动运行


[root@tomcat mysqlbackup]# crontab -e


00 05 * * * sh /home/mysqlbackup/backup.sh
[root@tomcat mysqlbackup]# ls

backup.sh mysql.20090605.sql.gz




mysqldump
备份整个数据库
mysqldump -u root -ppassword databasename >data.sql
备份整个数据库,加上日期
mysqldump -u root -ppassword mysql | gzip > mysql.$(date +%Y%m%d).sql.gz
--opt选项
这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用--skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。


mysqldump --opt -u root -ppassword mysql | gzip > mysql.$(date +%Y%m%d).sql.gz
备份某个或多个表
mysqldump -u root -ppassword databasename table1name table2name >data.sql
只备份数据结构
mysqldump -u root -ppassword databasename --no-data >data.sql
恢复
mysql -u root -ppassword --database=databasename <data.sql

阅读(360) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~