linux mysql 自动备份与恢复数据

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)收工。

Tagged: , ,

Comments are closed.