mysql备份有几种_几种MySQL备份常用方法整理

总结下几种常用的mysql备份方法:

一、直接拷贝数据库文件

首先把内存中的数据都刷新到磁盘中,同时锁定数据表,以保证拷贝过程中不会有新的数据写入:

代码如下

mysql>FLUSH TABLES WITH READ LOCK;

使用tar或cp等命令备份数据库文件,这里使用tar:

tar zcvf /backup/mysql_$(date "+%Y%m%d").tar.gz /var/lib/mysql

c、备份完后解锁数据表

mysql> unlock tables;这种方法备份出来的数据恢复也很简单,直接拷贝回原来的数据库目录下即可。需要注意,对于 Innodb 类型表来说,还需要备份其日志文件,即 ib_logfile* 文件。因为当 Innodb 表损坏时,就可以依靠这些日志文件来恢复。

二、 使用mysqlhotcopy备份

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

mysqlhotcopy 只能用于备份 MyISAM。

例:

把数据库test备份到/backup目录下:

代码如下

/usr/local/mysql/bin/mysqlhotcopy -uroot -pxxx test /backup

mysqlhotcopy在执行前将会锁定数据库,执行完毕后将自动释放锁定

还原:

mysqlhotcopy 备份出来的是整个数据库目录,还原时直接拷贝覆盖就行了,注意权限问题

代码如下

cp -rf /backup/test /var/lib/mysql/

注意,想要使用 mysqlhotcopy,必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限,并且还必须要能够有读取 datadir/db_name 目录的权限。

mysqldump 是SQL级别的备份机制,它将数据表导成 SQL 脚本文件,可以方便的在不同的mysql版本间进行恢复或升级,这也是最常用的备份方法。

例:

使用mysqldump备份:

代码如下

/usr/local/mysql/bin/mysqldump -uroot -pxxx --opt test >/backup/test.sql

还原:

/usr/local/mysql/bin/mysqldump -uroot -pxxx test

四、使用主从复制机制(replication)(实现数据库实时备份)推荐

五、mysql自动备份脚本,使用mysqldump工具

代码如下

#!/bin/bash

#caishzh 20120509

BAKDIR="/backup/mysql"     #mysql备份目录

MAIL="xxx@xxx.com"          #邮箱地址

USER="root"                         #mysql用户名

PASSWD="jjj"                         #mysql密码

DB="test"                              #数据库名

DATE=$(date "+%Y%m%d")     #日期

[ -d "$BAKDIR" ] || mkdir -p "$BAKDIR"     #如果备份目录不存在则创建

mysqldump -opt -u$USER -p$PASSWD $DB |gzip > $BKDIR/$DB_$DATA.gz     #备份并使用gzip打包

if [ $? -eq 0 ];then

#echo "$DB mysql backup" |mutt $MAIL -a $BKDIR/$DB_$DATA.sql -s "$DB mysql backup"

ls -lh $BAKDIR/*.gz>$BAKDIR/messages.txt

mutt  $MAIL -a $BKDIR/$DB_$DATA.gz -s "$DATE:$DB mysql backup" < $BAKDIR/messages.txt

else

echo "$DATE mysql backup failed"|mail  -s "$DATE msyql bacup failed"  $MAIL

fi

六,此方法只可用于windows主机

假想环境:

MySQL 安装位置:C:/MySQL

数据库名称为:bbs

数据库备份目的地:d:/db_bak/

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

新建db_bak.bat,写入以下代码

代码如下

net stop mysql

xcopy c:/mysql/data/bbs/*.* d:/db_bak/bbs/%date:~0,3%/ /y

net start mysql

或者

net stop mysql

xcopy D:/Mysql/data D:/Mysql/BAK/BAK-%date:~0,10%  /S/E/I

net start mysql

然后使用Windows的“计划任务”定时执行该批处理脚本即可。(例如:每天凌晨3点执行back_db.bat)

保存一周的数据,用%date:~0,3%,保存每天的数据,用%date:~4,10%

代码如下

xcopy c:/. d:/aaa /s/e

XCOPY source [destination] [/A | /M] [/D[:date]] [/P]

[/C] [/I] [/Q] [/F] [/L] [/

[/K] [/N] [/O] [/X] [/Y] [/

[/EXCLUDE:file1[+file2][+fi

七,linux增量备份

代码如下

#!/bin/sh

#+++++++++++++mysqlback++++++++++++

#a mysql incremental backup script.

#by flute

#++++++++++++++++++++++++++++++++++

BAK_DIR="."

while getopts :u:p:d:c OPTION

do

case ${OPTION} in

u)

DB_USER=${OPTARG}

;;

p)

PASSWD=${OPTARG}

;;

d)

DB_NAME=${OPTARG}

;;

b)

BAK_DIR=${OPTARG}

;;

c)

INIT="true"

;;

/?)

echo "Usage: mysqlback.sh [OPTIONS]"

echo "-u        user for login"

echo "-p        Password to use when connecting to server"

echo "-d        which database to backup"

echo "-b        backup database files to directory,default is current directory"

echo "-c        must be usage for first backup,is complete backup"

exit 1

;;

esac

done

MYSQL_BIN=/usr/local/mysql/bin

DATADIR=`${MYSQL_BIN}/mysql -u ${DB_USER} -p${PASSWD} -e "show variables like 'datadir'" | sed -n '2p' | awk '{print $NF}'`

upfile ()    #上传文件

{

_FNAME=$1

_TNAME=`echo ${_FNAME}|sed 's//.sql//g'`

_TNAME="${_TNAME}.tgz"

tar -czf ${_TNAME} ${_FNAME}

if [ $? = 0 ]

then

scp ${_TNAME} 192.168.1.10:/usr/local/mysql/bak

if [ $? = 0 ]

then

echo "upfile success."

else

logger -f ~/mysqlbak.log -t MYSQLBAK 'upload file ${_TNAME} failed'

ssh 192.168.1.10 "logger -f ~/mysqlbak.log -t MYSQLBAK 'upload file ${_TNAME} failed'"

fi

else

echo "tar file failed."

fi

}

bak_file ()    #获取备份文件名

{

_DB_NAME=$1

_BAK_DIR=$2

_BDATE=`date "+%Y-%m-%d"`

_BAKFILE="${_BAK_DIR}/_${_DB_NAME}_${_BDATE}.sql"

if [ ! -f ${_BAKFILE} ]

then

echo ${_BAKFILE}

return 0

else

ID=1

while [ 1 ]

do

_BAKFILE="${_BAK_DIR}/_${_DB_NAME}_${_BDATE}_${ID}.sql"

if [ ! -f ${_BAKFILE} ]

then

echo ${_BAKFILE}

return 0

fi

ID=`expr $ID + 1`

done

fi

}

八,windows增量备份

代码如下

mkdir %BAKPATH%\data

%MYSQLPATH%\bin\mysqldump -u%USERNAME% -p%PASSWORD% --single-transaction --default-

character-set=utf8 --flush-logs --master-data=2 --delete-master-logs spirit_beast > %

BAKPATH%\data\spirit_beast%date:~0,10%.sql

%MYSQLPATH%\bin\mysqldump -u%USERNAME% -p%PASSWORD% --single-transaction --default-

character-set=utf8 --flush-logs --master-data=2 --delete-master-logs quartz_event > %

BAKPATH%\data\quartz_event%date:~0,10%.sql

rar a -ag %BAKPATH%\full\ %BAKPATH%\data\*.sql

rmdir /s /q %BAKPATH%\data\

@echo  %date% %time% full bakup finish >> C:/mysqlbakup.log

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值