一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

linux中shell脚本导出备份mysql数据库

时间:2016-04-26 编辑:简简单单 来源:一聚教程网

最近公司有个需求需要从mysql数据库中查询状态为60的数据并导出。

实例代码如下

#!/bin/bash
 
dir="/cache1" ##要存到导出数据的目录名
open="open" ##导出数据的文件名称
open_dir="${open}.$(date +%Y%m%d)" ##导出数据的文件名称,按日期区分
db="/opt/trustedm/mysql/current/bin/mysql -uroot -pmv_XQ_mv" ##数据库连接语句
$db -Dmed_001  -e "select receiverEmail from edmLetterArchive WHERE status = 70 or status = 65;" >> $dir/open.txt##查询出数据并导出
cat $dir/open.txt| awk  '{print $1}' | sort |uniq >> $dir/$open_dir ##对导出的文件进行排序和去重
rm $dir/open.txt -rf

实例代码进行升级

1.创建脚本

      该Shell脚本可以自动备份数据库。只要复制粘贴本脚本到文本编辑器中,输入数据库用户名、密码以及数据库名即可。这里我们备份数据库使用的是mysqldump 命令。后面会对每行脚本命令进行说明。
(1)在你想要放置备份文件的目录下创建两个目录“backup”和“oldbackup”,这里使用的是根目录

#mkdir /backup
#mkdir /oldbackup
(2)创建并编辑文件“backup.sh”

#!bin/bash
cd /backup
echo “You are In Backup Directory”
mv backup* /oldbackup
echo “Old Databases are Moved to oldbackup folder”
Now=$(date +”%d-%m-%Y--%H:%M:%S”)
File=backup-$Now.sql
mysqldump –u user-name  –p ‘password’ database-name > $File
echo “Your Database Backup Successfully Completed”
(3)设置 backup.sh 脚本文件的可执行许可

# chmod +x /backup/backup.sh
(4)脚本执行

#./backup.sh
      脚本运行结束后会得到以下输出:

root@Server1:/download#./backup.sh
You areinDownload Directory
Old Backup DatabaseisMoved to oldbackup folder
database backup successful completed
root@Server1:/download#
      注:首次执行该脚本会有一个“no such file”的提示信息,这是由于旧备份文件还不存在。只要再次执行该脚本就没有问题了,这个问题已经不存在了。

2.脚本说明

      在第8行命令中,在mysqldump命令后要输入自己的数据库用户名、密码及数据库名。
      执行该脚本,首先会进入 /backup 目录(要与自己创建的目录保持一致),然后该脚本会把原有的旧数据库备份移动到 /oldbackup 文件夹中,接着根据系统的日期及时间生成一个文件名,在最后 mysqldump 命令会生成一个“.sql”格式的数据库备份文件。

3.使用cron制定备份计划

      使用Cron可以定时执行该脚本,备份会自动完成。使用 crontab 命令编辑cron 执行的计划任务。

#crontab –e
      在编辑器中输入一下代码,保存退出即可:

013* * * * /backup/backup.sh

例子,下面这个更专业

思路

获取mysql服务器所有数据库名称,过滤掉不需要备份的数据库
通过mysqldump来for循环导出所有的数据库的sql文件
用zip加密压缩所有的sql文件
定期进行数据清理工作

shell代码

数据库导出代码
[html] view plain copy print?
#!/bin/bash 
 
#1.数据库信息定义 
mysql_host="192.168.1.1" 
mysql_user="root" 
mysql_passwd="root" 
 
#sql备份目录 
root_dir="/backup" 
back_dir="/backup/databases" 
data_dir="databases" 
store_dir="database" 
if [ ! -d $back_dir ]; then 
    mkdir -p $back_dir 
fi 
 
#备份的数据库数组 
db_arr=$(echo "show databases;" | mysql -u$mysql_user -p$mysql_passwd -h$mysql_host) 
#不需要备份的单例数据库 
nodeldb="test1" 
 
#当前日期 
date=$(date -d '+0 days' +%Y%m%d) 
 
#zip打包密码 
zippasswd="passwd" 
zipname="lczh_"$date".zip" 
 
 
#2.进入到备份目录 
cd $back_dir 
 
 
#3.循环备份 
for dbname in ${db_arr} 
do 
    if [ $dbname != $nodeldb ]; then 
        sqlfile=$dbname-$date".sql" 
        mysqldump -u$mysql_user -p$mysql_passwd -h$mysql_host $dbname >$sqlfile 
    fi 
done 
 
 
#4.tar打包所有的sql文件 
tar -zcPpf $root_dir/$store_dir/$zipname --directory /  $root_dir/$data_dir 
#打包成功后删除sql文件 
if [ $? = 0 ]; then 
    rm -r $data_dir 
fi 


数据定期清理脚本

作用
定期清理14天前的备份文件

shell代码
[html] view plain copy print?
#!/bin/bash -  
 
#1.参数配置 
 
#mysql文件备份目录 
backup_dir1="/backup/test1/" 
backup_dir2="/backup/test2/" 
backdir_arr=($backup_dir1 $backup_dir2) 
 
#过期文件的时间 
keep_time=14 
 
#当前所在星期,crontab在奇数的星期7执行 
week=$(date +%W) 
flag=`expr $week % 2` 
 
 
 
#2.清理过期文件,只在奇数星期7执行 
if [ $flag -eq 1 ]; then 
    for dir in ${backdir_arr[*]} 
    do 
        if [ -d $dir ]; then 
            #查找14天之外的文件数据 
            clean_arr=`find $dir -type f -mtime +$keep_time -exec ls {} \;` 
            for cleanfile in ${clean_arr} 
            do 
                rm $cleanfile 
            done 
        fi 
    done 
fi 

crontab配置
[html] view plain copy print?
0 5 * * 7  执行清理脚本

热门栏目