在linux下自动备份数据库,并且发送邮件。

来源:互联网 发布:googlenet 网络结构 编辑:程序博客网 时间:2024/05/17 03:46

接到任务:在cenos6.x系统中每天定时备份mysql数据库和Oracle数据库

解决时间1天:

步骤:

MySQL定期备份是一项重要的工作,但人工操作太繁琐,也难避免有所疏漏,使用下面的方法即可让系统定期备份数据。

◆1、创建备份文件夹


------------------------------------
[root@localhost cd /home/
[root@localhost dbbackup]# mkdir mysql
[root@localhost dbbackup]# mkdir oracle
[root@localhost dbbackup]# cd mysql/
------------------------------------



◆2、编写运行脚本

#vi autobackup

写入以下内容:

filename=`date +%Y%m%d` (ESC下面的字符) 按照时间存名字

mysql_bin_dir/mysqldump --opt dataname -u user -ppassword | gzip > /www/mysqlbackup/name$filename.sql.gz


最终内容:

filename=`date +%Y%m%d`

在上句话的后面也可以继续写其他变量,但是在下面如有发送附件的情况下,用绝对路径没事,但是变量的话就会出现找不到附件的错误提示。

解决办法,只需要在每一行加上;即可

例如


filedate=`date +%Y_%m_%d`;
mailtitle=`date +%Y.%m.%d`;
filebaiduname="cn.baidu.bot_"$filedate".log";
filegooglename="cn.google.bot_"$filedate".log";

/home/backup_apache_log/sendEmail -v -f service@joytrav.com -t backup@joytrav.com -s smtp.exmail.qq.com:25 -u cn_site_apache_log-$mailtitle -a /home/app_deployment/apache/logs/$filebaiduname /home/app_deployment/apache/logs/$filegooglename -m cn_apache_log_$filedate -xu XXX@XXX.com -xp "XXXXXX;"





/usr/local/mysql/bin/mysqldump --opt joytravel -uroot -ppassword | gzip > /home/dbbackup/mysql/xxx/xxx$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 6 * * * root /www/autobackup

每天6点运行脚本,也可以修改6为其他指定时间。

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




自动发邮件:

首先用了所谓的 系统自带的mail 和 mutt 

不是不能传附件,就是报错。

第三种方法完美解决:

方法如下:

下载sendEmail-v1.56.tar软件。

Linux最简单发送邮件的方法

一般使用本机的mail命令, 这就需要开启本机的smtp服务. 假如网络里面有一个邮件服务器(一般公司都有的), 则可以直接使用这台现有的邮件服务器, 不用开启本机的smtp服务, 只需要使用第三方软件sendEmail. 其官方地址:http://caspian.dotconf.net/menu/Software/SendEmail/

首先要在邮件服务器上新建一个账户用来做发邮件的账户, 可以利用一现有的, 假如为dba@godmail.com, SMTP邮件服务器地址为mail.godmail.com, SMTP验证的用户名密码(如果该邮件服务不需要SMTP验证则无需本用户名密码)为god/iamgod

1. 安装sendMail

# cd /u01/software/nagios
# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz
# tar -zxvf sendEmail-v1.56.tar.gz && cd sendEmail-v1.56
# cp sendEmail /usr/local/bin
# chmod 0755 /usr/local/bin/sendEmail


2. 发送邮件测试

# sendEmail -h                (查看sendMail帮助)

# sendEmail -f dba@godmail.com -t god@godmail.com -s mail.godmail.com -u "nagios测试" -m "nagios test 测试"

各参数含义如下:
-f 表示发送者的邮箱, 可随意设置
-t 表示接收者的邮箱
-s 表示SMTP服务器的域名或者IP
-u 表示邮件的主题
-m 表示邮件的内容
-xu 表示SMTP验证的用户名, 如果SMTP服务器需要验证的话就加上该参数, 一般发给外网用户则需要
-xp 表示SMTP验证的密码, 如果SMTP服务器需要验证的话就加上该参数, 一般发给外网用户则需要
-a FILE [FILE ...]      file attachment(s)
-cc ADDRESS [ADDR ...]   cc  email address(es)
-bcc ADDRESS [ADDR ...]   bcc email address(es)

4. 发送邮件高级用法

如果不带-m参数的话,就会提示你自行输入, 输入完成后使用CTRL-D来结束. 如果还要发送给外网邮件用户, 则还需设置SMTP验证:
# sendEmail -f dba@godmail.com -t god@godmail.com -bcc god@gmail.com -s mail.godmail.com -u "nagios测试" -m "nagios test 测试" -xu god -xp "iamgod"

也可以将一个文件的内容作为邮件的正文发出:
# sendEmail -f dba@godmail.com -t god@godmail.com -s mail.godmail.com -u "nagios测试" -o message-file=/var/log/messages

或者将一个文件的内容作为附件发出:
# sendEmail -f dba@godmail.com -t god@godmail.com -s mail.godmail.com -u "nagios测试" -m "pls see the attachement" -a /var/log/messages


定时任务脚本:

让crontab来完成定期执行的任务

编辑crontab:

#vi /etc/crontab

在最后一行中加入:

01 6 * * * root /www/autobackup

每天6点运行脚本,也可以修改6为其他指定时间。

重启crontab

#/etc/rc.d/init.d/crond restart

最后完成了mysql的备份和发邮件的工作。


Oracle与nysql的类似:

在autobackup的文件中追加一条:
/home/app/oracle/product/11.2.0/db_1/bin/expdp system/password DUMPFILE=schemas_20130623.dmp DIRECTORY=DATA_PUMP_DIR SCHEMAS=, ,  parallel=2 version=11.2.0.1.0

SCHEMAS=, ,  逗号之间写的是要导出哪些用户,/home/app/oracle/product/11.2.0/db_1/bin/expdp 是expdp的绝对路径需要在Oracle中找到即可。

也可以写到环境变量中,直接用也可以。

这样的方式备份完后   登录到Oracle  用这句话:先用这句话查找dmp文件需要放到的目录
select DIRECTORY_PATH  from dba_directories where DIRECTORY_NAME='DATA_PUMP_DIR';

来查找刚才备份文件的路径。执行后可以看到已经完成备份。发邮件与mysql类似,也只需在autosendmail中加一句即可。