linux备份mysql数据库
2009-10-29 13:43
162 查看
MYSQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下
面的方法即可让系统定期备份数据。
1、创建备份文件夹
#cd /www
#makedir backup
2、编写运行脚本
#vi autobackup
写入以下内容:
filename=`date +%Y%m%d`
mysql_bin_dir/mysqldump –opt dataname-u user-ppassword| gzip
>/www/mysqlbackup/name$filename.gz
保存退出?
说明:
(1)mysql_bin_dir:mysql的bin路径
(2)dataname:数据库名;
(3)user:数据库用户名;
(4)password:用户密码;
(5)name:自定义备份文件前缀标识。
如上例,将自动备份mysql数据库,并以gzip压缩方式存储,文件名为
name20080101.gz的形式。
3、为脚本添加执行权限
#chmod +x autobackup
4、让crontab来完成定期执行的任务
这一步中,Redhat的方法会不一样,后面专门给出。
编辑crontab:
#vi /etc/crontab
在最后一行中加入:
01 5* * * root /www/autobackup
每天5点运行脚本,也可以修改5为其他指定时间。
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小
时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月
)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5、重启crontab
#/etc/rc.d/init.d/crond restart
完成
其实原理很简单,自己制作一个脚本,让Linux系统自动运行。我们还可以再扩展
一下,编辑一个自动备份网站文件的脚本,让Linux来完成,每天自动备份整个网站,
等等……
==========================================================================
MySQL :: Linux 下自动备份数据库的 shell 脚本
Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本
,结合 crontab,定时备份数据库。其实非常简单,主要就是使用 MySQL 自带的
mysqldump 命令。
脚本内容如下:
本地备份脚本
#!/bin/sh
# File: /home/mysql/backup.sh
# Database info
DB_NAME="test"
DB_USER="username"
DB_PASS="password"
# Others vars
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/mysql/backup"
DATE=`date +%F`
# TODO
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip >
$BCK_DIR/db_$DATE.gz
然后使用将此脚本加到 /etc/crontab 定时任务中:
01 5 * * 0 mysql /home/mysql/backup.sh
好了,每周日凌晨 5:01 系统就会自动运行 backup.sh 文件备份 MySQL 数据库了。
/home/www/inc/back
远程备份
首先你要到mysql的官网上下载mysql client 那是一个rpm包来的,之后就安装到你要
存放备份文件的那台服务器上
把上边最后一句话改成
mysqldump -h dbIp -u$DB_USER -p$DB_PASS $DB_NAME | gzip >
$BCK_DIR/db_$DATE.gz
其它不变,保存,run一下,ok
===========================
适合对象
本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql
4.0,5.0及其其他版本.
本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份
策略或者需要修改相关参数.
每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬
照抄,可能会造成不必要的损失.
希望你明白这个脚本要干什么工作
脚本描述
每7天备份一次所有数据,每天备份binlog,也就是增量备份
(如果数据少,每天备份一次完整数据即可,可能没必要做增量备份)
作者对shell脚本不太熟悉,所以很多地方写的很笨 :)
开启 bin log
在mysql 4.1版本中,默认只有错误日志,没有其他日志.可以通过修改配置打开bin
log.方法很多,其中一个是在/etc/my.cnf中的mysqld部分加入:
[mysqld]
log-bin
这个日志的主要作用是增量备份或者复制(可能还有其他用途).
如果想增量备份,必须打开这个日志.
对于数据库操作频繁的mysql,这个日志会变得很大,而且可能会有多个.
在数据库中flush-logs,或者使用mysqladmin,mysqldump调用flush-logs后并且使
用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的).
所以如果从来不备份,开启日志可能没有必要.
完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的
数据.
完整备份脚本
如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运
行,如果数据量比较小,那么一天备份一次也无所谓了.
下载假设我们的数据量比较大,备份脚本如下:(参考过网络上一个mysql备份脚本,
致谢 :))
#!/bin/sh
# mysql data backup script
# by scud http://www.jscud.com
# 2005-10-30
#
# use mysqldump --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqldump --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,
则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir
-----------------------------------------------------------------
上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放
在/backup/mysql/daily目录下.
注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天
前的备份文件:需要用户增加相关脚本,或者手动操作.
------------------------------------------------------------------------
增量备份的数据量比较小,但是要在完整备份的基础上操作,用户可以在时间和成
本上权衡,选择最有利于自己的方式.
增量备份使用bin log,脚本如下:
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器
名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"
--------------------------------------------------------------------------
增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,
然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后
一个.
因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果
已经备份过,就不用备份了.
注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生
成.
访问设置
脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和
mysqldump都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假
设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home
目录)创建一个.my.cnf文件,内容如下
[mysqladmin]
password =password
user= root
[mysqldump]
user=root
password=password
注:设置本文件只有root可读.(chmod 600 .my.cnf )
此文件说明程序使用mysql的root用户备份数据,密码是对应的设置.这样就不需要
在脚本里写用户名和密码了.
自动运行
为了让备份程序自动运行,我们需要把它加入crontab.
有2种方法,一种是把脚本根据自己的选择放入
到/etc/cron.daily,/etc/cron.weekly这么目录里.
一种是使用crontab -e放入到root用户的计划任务里,例如完整备份每周日凌晨3
点运行,日常备份每周一-周六凌晨3点运行.
具体使用,请参考crontab的帮助.
所为何在网上没有找到类似的脚本,只好学习shell语法,自己写了一个 :)
适合自己的,就是最好的!
面的方法即可让系统定期备份数据。
1、创建备份文件夹
#cd /www
#makedir backup
2、编写运行脚本
#vi autobackup
写入以下内容:
filename=`date +%Y%m%d`
mysql_bin_dir/mysqldump –opt dataname-u user-ppassword| gzip
>/www/mysqlbackup/name$filename.gz
保存退出?
说明:
(1)mysql_bin_dir:mysql的bin路径
(2)dataname:数据库名;
(3)user:数据库用户名;
(4)password:用户密码;
(5)name:自定义备份文件前缀标识。
如上例,将自动备份mysql数据库,并以gzip压缩方式存储,文件名为
name20080101.gz的形式。
3、为脚本添加执行权限
#chmod +x autobackup
4、让crontab来完成定期执行的任务
这一步中,Redhat的方法会不一样,后面专门给出。
编辑crontab:
#vi /etc/crontab
在最后一行中加入:
01 5* * * root /www/autobackup
每天5点运行脚本,也可以修改5为其他指定时间。
Redhat方法:
Redhat的crontab采用按时间调用4个目录(/etc/cron.hourly:每小
时;/etc/cron.daily:每天;/etc/cron.weekly:每周;/etc/cron.monthly:每月
)中脚本出来运行的方式。
Redhat中只需要将刚才编辑的脚本复制到相应的目录即可。
5、重启crontab
#/etc/rc.d/init.d/crond restart
完成
其实原理很简单,自己制作一个脚本,让Linux系统自动运行。我们还可以再扩展
一下,编辑一个自动备份网站文件的脚本,让Linux来完成,每天自动备份整个网站,
等等……
==========================================================================
MySQL :: Linux 下自动备份数据库的 shell 脚本
Linux 服务器上的程序每天都在更新 MySQL 数据库,于是就想起写一个 shell 脚本
,结合 crontab,定时备份数据库。其实非常简单,主要就是使用 MySQL 自带的
mysqldump 命令。
脚本内容如下:
本地备份脚本
#!/bin/sh
# File: /home/mysql/backup.sh
# Database info
DB_NAME="test"
DB_USER="username"
DB_PASS="password"
# Others vars
BIN_DIR="/usr/local/mysql/bin"
BCK_DIR="/home/mysql/backup"
DATE=`date +%F`
# TODO
$BIN_DIR/mysqldump --opt -u$DB_USER -p$DB_PASS $DB_NAME | gzip >
$BCK_DIR/db_$DATE.gz
然后使用将此脚本加到 /etc/crontab 定时任务中:
01 5 * * 0 mysql /home/mysql/backup.sh
好了,每周日凌晨 5:01 系统就会自动运行 backup.sh 文件备份 MySQL 数据库了。
/home/www/inc/back
远程备份
首先你要到mysql的官网上下载mysql client 那是一个rpm包来的,之后就安装到你要
存放备份文件的那台服务器上
把上边最后一句话改成
mysqldump -h dbIp -u$DB_USER -p$DB_PASS $DB_NAME | gzip >
$BCK_DIR/db_$DATE.gz
其它不变,保存,run一下,ok
===========================
适合对象
本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql
4.0,5.0及其其他版本.
本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采取这种备份
策略或者需要修改相关参数.
每个人的备份策略都可能不同,所以请根据实际情况修改,做到举一反三,不要照搬
照抄,可能会造成不必要的损失.
希望你明白这个脚本要干什么工作
脚本描述
每7天备份一次所有数据,每天备份binlog,也就是增量备份
(如果数据少,每天备份一次完整数据即可,可能没必要做增量备份)
作者对shell脚本不太熟悉,所以很多地方写的很笨 :)
开启 bin log
在mysql 4.1版本中,默认只有错误日志,没有其他日志.可以通过修改配置打开bin
log.方法很多,其中一个是在/etc/my.cnf中的mysqld部分加入:
[mysqld]
log-bin
这个日志的主要作用是增量备份或者复制(可能还有其他用途).
如果想增量备份,必须打开这个日志.
对于数据库操作频繁的mysql,这个日志会变得很大,而且可能会有多个.
在数据库中flush-logs,或者使用mysqladmin,mysqldump调用flush-logs后并且使
用参数delete-master-logs,这些日志文件会消失,并产生新的日志文件(开始是空的).
所以如果从来不备份,开启日志可能没有必要.
完整备份的同时可以调用flush-logs,增量备份之前flush-logs,以便备份最新的
数据.
完整备份脚本
如果数据库数据比较多,我们一般是几天或者一周备份一次数据,以免影响应用运
行,如果数据量比较小,那么一天备份一次也无所谓了.
下载假设我们的数据量比较大,备份脚本如下:(参考过网络上一个mysql备份脚本,
致谢 :))
#!/bin/sh
# mysql data backup script
# by scud http://www.jscud.com
# 2005-10-30
#
# use mysqldump --help,get more detail.
#
BakDir=/backup/mysql
LogFile=/backup/mysql/mysqlbak.log
DATE=`date +%Y%m%d`
echo " " >> $LogFile
echo " " >> $LogFile
echo "-------------------------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------------------" >> $LogFile
cd $BakDir
DumpFile=$DATE.sql
GZDumpFile=$DATE.sql.tgz
mysqldump --quick --all-databases --flush-logs
--delete-master-logs --lock-all-tables
> $DumpFile
echo "Dump Done" >> $LogFile
tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1
echo "[$GZDumpFile]Backup Success!" >> $LogFile
rm -f $DumpFile
#delete previous daily backup files:采用增量备份的文件,如果完整备份后,
则删除增量备份的文件.
cd $BakDir/daily
rm -f *
cd $BakDir
echo "Backup Done!"
echo "please Check $BakDir Directory!"
echo "copy it to your local disk or ftp to somewhere !!!"
ls -al $BakDir
-----------------------------------------------------------------
上面的脚本把mysql备份到本地的/backup/mysql目录,增量备份的文件放
在/backup/mysql/daily目录下.
注意:上面的脚本并没有把备份后的文件传送到其他远程计算机,也没有删除几天
前的备份文件:需要用户增加相关脚本,或者手动操作.
------------------------------------------------------------------------
增量备份的数据量比较小,但是要在完整备份的基础上操作,用户可以在时间和成
本上权衡,选择最有利于自己的方式.
增量备份使用bin log,脚本如下:
#!/bin/sh
#
# mysql binlog backup script
#
/usr/bin/mysqladmin flush-logs
DATADIR=/var/lib/mysql
BAKDIR=/backup/mysql/daily
###如果你做了特殊设置,请修改此处或者修改应用此变量的行:缺省取机器
名,mysql缺省也是取机器名
HOSTNAME=`uname -n`
cd $DATADIR
FILELIST=`cat $HOSTNAME-bin.index`
##计算行数,也就是文件数
COUNTER=0
for file in $FILELIST
do
COUNTER=`expr $COUNTER + 1 `
done
NextNum=0
for file in $FILELIST
do
base=`basename $file`
NextNum=`expr $NextNum + 1`
if [ $NextNum -eq $COUNTER ]
then
echo "skip lastest"
else
dest=$BAKDIR/$base
if(test -e $dest)
then
echo "skip exist $base"
else
echo "copying $base"
cp $base $BAKDIR
fi
fi
done
echo "backup mysql binlog ok"
--------------------------------------------------------------------------
增量备份脚本是备份前flush-logs,mysql会自动把内存中的日志放到文件里,
然后生成一个新的日志文件,所以我们只需要备份前面的几个即可,也就是不备份最后
一个.
因为从上次备份到本次备份也可能会有多个日志文件生成,所以要检测文件,如果
已经备份过,就不用备份了.
注:同样,用户也需要自己远程传送,不过不需要删除了,完整备份后程序会自动生
成.
访问设置
脚本写完了,为了能让脚本运行,还需要设置对应的用户名和密码,mysqladmin和
mysqldump都是需要用户名和密码的,当然可以写在脚本中,但是修改起来不太方便,假
设我们用系统的root用户来运行此脚本,那么我们需要在/root(也就是root用户的home
目录)创建一个.my.cnf文件,内容如下
[mysqladmin]
password =password
user= root
[mysqldump]
user=root
password=password
注:设置本文件只有root可读.(chmod 600 .my.cnf )
此文件说明程序使用mysql的root用户备份数据,密码是对应的设置.这样就不需要
在脚本里写用户名和密码了.
自动运行
为了让备份程序自动运行,我们需要把它加入crontab.
有2种方法,一种是把脚本根据自己的选择放入
到/etc/cron.daily,/etc/cron.weekly这么目录里.
一种是使用crontab -e放入到root用户的计划任务里,例如完整备份每周日凌晨3
点运行,日常备份每周一-周六凌晨3点运行.
具体使用,请参考crontab的帮助.
所为何在网上没有找到类似的脚本,只好学习shell语法,自己写了一个 :)
适合自己的,就是最好的!
相关文章推荐
- linux下如何备份还原mysql数据库
- Linux自动备份MySQL数据库的实用方法
- 一个Linux下Mysql数据库的备份脚本
- linux下拷贝MySql数据库文件备份数据库
- MySQL数据库备份(linux)
- linux下备份MYSQL数据库的方法
- 自动备份mysql数据库(兼容windows,linux)
- linux下使用crontab定时备份MYSQL数据库的方法
- Linux自动备份MySQL数据库的实用方法
- linux 关于MYSQL数据库命令(查看,备份等操作)
- Linux下自动备份Mysql数据库脚本(已测试)
- Linux下Mysql数据库备份和恢复全攻略
- Linux下Mysql数据库备份和恢复全攻略
- Linux下mysql数据库自动定时备份
- Linux下定时备份MySQL数据库的Shell脚本
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
- linux 自动定时备份程序和Mysql数据库
- Linux VPS/服务器上轻松导入、导出(恢复、备份)MySQL数据库
- Linux下Mysql数据库备份和恢复全攻略
- Linux下Mysql数据库备份和恢复