接到任务:在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中加一句即可。