Ubuntu上MySQL的简单自动备份

Web Digest

还有众多网络文摘,仅供个人收藏和参考

Ubuntu上MySQL的简单自动备份

leave a comment »

MySQL可以支持Master,Slave之间的动态Replication。这里就不研究了。简单备份主要依靠mysqldump来实现。

1. 创建具有backup权限的帐号:

因为backup脚本会明码显示密码,所以权限越低越好,以下是进行backup所需的的最小权限(针对Mysql 5.x)

mysql> GRANT LOCK TABLES, SELECT, FILE, RELOAD, SUPER, SHOW VIEW,CREATE VIEW
> ON  *.*
> TO ‘dba_backup‘ @localhost
> IDENTIFIED BY ‘password123‘;
> flush privileges;
> quit

这样密码为password123的用户dba_backup就建好了。

2. 编辑数据库备份脚本

1) 建一个备份目录 mkdir /var/backup
2) 编辑 mysql_backup.sh

#!/bin/sh
# mysql_backup.sh: backup mysql databases and keep newest 5 days backup.
# —————————–
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
db_user=”dba_backup
db_passwd=”password123
db_host=”localhost”

#mysql>show databases; to obtain the databases name, list the name below
#for the db you wish to backup. e.g. databases=”db1 db2 db3″
databases=”db1″

# the directory for story your backup file.
backup_dir=”/var/backup”

# date format for backup file (dd-mm-yyyy)
time=”$(date +”%d-%m-%Y”)”
######………$(date +”%d-%m-%Y”)…date…..
# mysql, mysqldump and some other bin’s path
#MYSQL=”$(which mysql)”
#MYSQLDUMP=”$(which mysqldump)”
#MKDIR=”$(which mkdir)”
#RM=”$(which rm)”
#MV=”$(which mv)”
#GZIP=”$(which gzip)”
#########………………………………..

# if the directory for storing backup does not exist and not writeable, quit
test ! -w $backup_dir && echo “Error: $backup_dir is un-writeable.” && exit 0

# otherwise make the directory to store the newest backup
test ! -d “$backup_dir” && mkdir “$backup_dir”
#####………..$backup_dir………..
# get all databases

for db in $databases
do
mysqldump -u $db_user -h $db_host -p$db_passwd $db | gzip -9 > “$backup_dir/$time.$db.gz”
done

#delete the oldest backup 7 days ago
find $backup_dir -name “*.gz” -mtime +7 |xargs rm -rf
exit 0;

3) chmod +x ./mysql_backup.sh

3. 添加到Cron

crontab -e
加入
0 5 * * * /root/mysql_backup.sh
每天凌晨5点执行数据库备份

因为3点留给Drupal的Cron(以www-data身份运行), 4点留给logrotate(系统默认设置)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

积极投身于开源事业的发展与推广,希望能够贡献自己的一点微薄之力!
 
 
查看文章
 

[整理] 参考网友写的一个 MySQL 全备份 SHELL 脚本
2009年03月26日 星期四 20:55
已经在地测试过了,可以运行.其中稍作修改即可应用.

MySQL 备份和恢复策略

备份策略 使用mysqldump备份数据库

1. 创建备份目录

Shell> mkdir /tmp/mysqlbackup

2. 设置crontab任务,每天执行备份脚本

shell> crontab -e

#每个星期日凌晨3:00执行完全备份脚本

#minute hour    mday    month   wday    command

0            3 *           *               /root/MySQLBackup/mysqlFullBackup.sh>/dev/null 2>&1

Shell> mkdir /root/MySQLBackup

Shell> vi /root/MySQLBackup/mysqlFullBackup.sh

Shell> chmod 744 /rootMySQLBackup/mysqlFullBackup.sh

mysqlFullBackup.sh注释:

#!/bin/sh

# 这是是注释,建议在 FreeBSD 实际应用时删掉中文注释,以免产生乱码

绿色的内容请根据需要修改
# ALL

#备份所的库
# db user

数据库的用户,通常是有能执行 mysqldump 命令权限的用户
DBUser
=root

数据库密码
DBPass
=hy0kl

# db host

取得当前主机的主机名
DBHost
=`hostname -s`

# make sure you already created the backup directory

使用前请确认已经创建了备份目录
BackupPath
=/tmp/mysqlbackup

# the path of mysqld

# mysql 的安装目录,寻找 bin 目录下的 mysqldump 命令
DBbinPath
=/usr/local/bin/mysqldump

# error record log file

错误报告文件
ErrorLog
=${BackupPath}/error.txt

执行备份

if ${DBbinPath} -u${DBUser} -p${DBPass} --opt --default-character-set=utf8 --extended-insert=false --triggers -R --hex-blob --all-databases --flush-logs --delete-master-logs --delete-master-logs > ${BackupPath}"/"${DBHost}"-"`date "+%Y-%m-%d"`".sql" ;
then
     
删除六天前旧的备份文件
     find $
{BackupPath}"/" -mtime +-exec rm {} \;
else
     
生成错误报告,如果备份失败
     echo 
"-------------------" >> ${ErrorLog}
     echo `date 
"+%Y-%m-%d"` >> ${ErrorLog}
     echo 
"-------------------\n" >> ${ErrorLog}

     exit
fi


类别:Freebsd |   |  添加到搜藏 |  分享到i贴吧 | 浏览( 361) |  评论 (2)
 
 
相关文章:
linux下利用shell脚本定时备份my... 监控mysql占cpu负载并发送日志记...
shell脚本备份mysql并自动ftp到... mysql自动备份脚本shell
自动备份Mysql数据库的shell脚本 Linux自动备份MySQL数据库并上传...
监控mysql占cpu资源并自动重启的... mysql单数据库备份并ftp的shell...
写了一个简单的shell脚本监控mys... 用shell脚本限制mysql数据库的大...
更多>>

 
最近读者:
yjg021 bluedarkangel guoli0813 lien5 xcrypt Ab_zero 水色皇朝 yzhkpli

 
网友评论:
1 2009年03月27日 星期五 09:58 | 回复
http://www.bsdlover.cn/html/14/n-14.html
crontab不执行的解决办法crontab不 执行,一般都是因为路径的问题,把里面的命令全改成完整路径即可。不过我遇到过一次比较奇怪的问题,路径没有问题,在别的机器上能执行的,可是在这个机器 上死活不执行,后来发现是cron停掉了,可能是因为频繁的修改cron吧, /usr/sbin/cron stop; /usr/sbin/cron start;以后就ok了。

 
2 2010年11月04日 星期四 20:53 | 回复
写得不错,来顶一个!

 
发表评论:
姓 名: mlzboy
内 容:
插入表情
验证码:  请点击后输入四位验证码,字母不区分大小写
      

     


©2010 Baidu

你可能感兴趣的:(mysql,linux,脚本,ubuntu,FreeBSD)