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

最近公司有个需求需要从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  执行清理脚本

时间: 2024-10-18 02:04:36

linux中shell脚本导出备份mysql数据库的相关文章

mysqldump使用脚本自动备份mysql数据库

问题描述 mysqldump使用脚本自动备份mysql数据库 在linux服务器使用脚本自动数据库时,报如下错误,备份不成功,求问大神如何解决:Warning: Using a password on the command line interface can be insecure 以下是我的脚本:#!/bin/shDUMP=/usr/local/mysql/bin/mysqldumpOUT_DIR=/home/dbbak/todayOUT_HISTORY_DIR=/home/dbbak/o

应用-Linux中shell脚本问题

问题描述 Linux中shell脚本问题 ]我有shell脚本,放在/bin/目录下,内容如下: #!/bin/sh cd /usr /sbin/insmod s3c_ts.ko ./digitpic ./MSYH.TTF & 当我开发板上电以后我手动执行手动执行test.sh 我的digitpic应用程序能够正常启动 当我在/etc/init.d/rcS 文本里面最后添加exec test.sh 提示说这个触摸屏读取错误,也就是/sbin/insmod s3c_ts.ko这部分错误了,就只有触

使用Linux的Shell脚本定时处理MySQL超时_Mysql

最近一段时间,我刚刚进入一家新公司,并接手了这里的一个站点,由于这个站点的架构设计不太合理,导致MySQL的压力始终很大,经常出现超时的Locked进程,于是编写了一段Linux的Shell脚本来定时kill掉这些进程.脚本如下: 复制代码 代码如下: #!/bin/bash mysql_pwd="xxxxxx" #mysql的root密码 mysql_exec="/usr/local/mysql/bin/mysql"tmp_dir="/tmp"

linux中shell脚本实现下载完关机_linux shell

用mint 有一段时间了,下载基本用firefox,有时下载几个G的游戏.可是firefox没有找到下载完关机的选择.处于这个原因,写了这个. download_shutdown.sh #!/bin/bash # Created By: Demo <demo@demo.com> # Created Time: 2015-01-30 12:36:44 # Modified Time: 2015-01-30 12:54:21 dir=$1 while [ "1" ] do if

linux中shell脚本进行MySQL数据库定时备份

具体方法  代码如下 复制代码 #!/bin/bash #Shell Command For Backup MySQL Database Everyday Automatically By Crontab #Author : Carlos Wong #Date : 2010-08-24 #配置参数  代码如下 复制代码 USER=root #数据库用户名" >用户名 PASSWORD=××××× #数据库用户密码 DATABASE=TIENIUZAI    #数据库名称 WEBMASTER

Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份_oracle

说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务器 mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在

linux中如何安装和使用MySQL数据库

一.安装MySQL 1. 创建运行MySQL数据库的系统用户,组(如存在无需创建) [root@www ~]#useradd –M –s  /sbin/nologin  mysql    //不设工作目录,登陆shell为禁止 2. 解压并释放源码包,并切换至展开的源码包目录 [root@www ~]#tar zxvf mysql-5.0.56.tar.gz -C /usr/src/ [root@www ~]#cd /usr/src/mysql-5.0.56 3. 使用.configure编译配

linux中shell脚本监控网站80端口与网站是否正常

监控网站80端口 很多时候我们不知道网站80端口是否正常,当然我以前的shell监控网站状态(续)这篇文章也可以监控网站,这里只是给大家提供另外一个思路去监控网站. 脚本内容:  代码如下 复制代码 vi check-80.sh #!/bin/bash nmap -P0 -p80 -sS -vv blog.slogra.com|grep 80 |tail -n1>/tmp/nmap.txt check_80=`cat /tmp/nmap.txt|awk '{print $2}'` if [ &quo

linux中SHELL脚本中的数组用法

在Shell中(我这里是Bash),其实没有传统意义上的"数据类型",把任何变量中存的值都是作为字符组成的"字符串".当然,通过declare可以声明某个变量是整型.数组等类型.其中,数组就是本文要专门讲的了.在Bash中,仅支持一维数组,当然通过关联数组(associative array)的形式可以模拟多维数组. 1. 数组的声明 用 declare -a array 声明array是一个数组,用declare -A a_array 声明a_array是一个关联