mysql备份一般有两种,一种是mysqlhotcopy,另一种是直接使用mysqldump。两种都是在线执行LOCK TABLES 以及 UNLOCK TABLES,简单说就是热备份,在锁定数据库的情况下进行备份,这样不会让数据出现紊乱。在这里讨论第二种。
1.linux的自动备份就得用到sh脚本。以下是脚本内容:
#vi backupmydb.sh
#2014-10-13 joker
#!/bin/bash
#2014-10-13 joker
user=222
passwd="2222"
databak_dir=/usr/backup #备份的目录
DATE=`date +%Y%m%d`
logFile=$databak_dir/logs/mysql$DATE.log
database=mydb
eMailFile=$databak_dir/email.txt
echo " " > $eMailFile
echo "---------------------------------" >> $eMailFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
dumpFile=$databak_dir/$database$(date +"%Y%m%d" --date="-1 day").sql
GZDumpFile=$database$(date +"%Y%m%d" --date="-1 day").tar.gz
options="-u$user -p$passwd --opt $database"
mysqldump $options > $dumpFile #导出数据文件
if [[ $? == 0 ]]; then
cd $databak_dir
tar cvzf $GZDumpFile $dumpFile >> $eMailFile 2>&1
# scp -r $GZDumpFile 地址:/xxx #传送备份文件到另一台计算机,需要做好ssh信任
# rm -f $dumpFile #删除备份的文件
else
echo "DataBase Backup Fail!" >> $emailFile
fi
echo "--------------------------------------------------------" >> $logFile
cat $eMailFile >> $logFile
<!---华丽丽分割线-----!>
2.保存退出以后给予权限:chmod X backupmydb.sh
3.添加定时任务 使用linux自带的crond。
#vi /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed
30 04 * * * root /usr/backup/backupmydb.sh
最后一行就是你要添加的定时任务。其中前面30 04表示每天4:30分执行一次此任务,后面的则是sh脚本的绝对地址。
4.重启crond:service crond restart
5.数据恢复。
mysql -u用户名 -p 数据库名 < 数据库名.sql
然后输入数据库密码就OK了。
6.如果是tar格式的则是:
1).tar -xzvf mydb.tar
2).创建新的数据库
3).拷贝数据库到mysql目录下:cp * /var/lib/mysql/mydb/
4).权限设置
将拷贝过去的文件的属主改为mysql:mysql,权限改为700
chown mysql:mysql /var/lib/mysql/mydb/*
chmod 700 /var/lib/mysql/mydb/*
5)收工。
已有 0 人发表留言,猛击->> 这里<<-参与讨论
ITeye推荐