接到任务:在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 [email protected] -t [email protected] -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 [email protected] -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软件。
定时任务脚本:
让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中加一句即可。