shell备份数据库数据

#!/bin/bash

##备份数据存放目录
bak=/www/wwwroot/mysql

time=`date +"%Y-%m-%d-%H-%M-%S"`

num=30

##判断目录是否存在,不存在则创建
if [ ! -d $bak ]
then
    mkdir -p $bak
fi


##备份数据库到指定目录并命名
mysqldump -u root wordpress > $bak/wordpress-$time.sql


##获取最早数据备份的指令
del=`ls -lrt $bak/wordpress*.sql | awk '{print $9}' | head -1`

##获取备份数据的个数
count=`ls -lrt $bak/wordpress*.sql | awk '{print $9}' | wc -l`



##如果备份个数大于30,则删除最早的数据备份
if [ $count -gt $num ]
then
    rm -rf $del
fi
# 免密登录,root目录下创建.my.cnf文件,内容如下

[mysqldump]
user = ''
password = ''

chmod 600 ~/.my.cnf

优化后的代码

#!/bin/sh

bak="/var/www/html"

time=$(date +"%Y-%m-%d-%H-%M-%S")

num=10

if [ ! -d "$bak" ]; then
    mkdir -p "$bak"
fi

mysqldump --defaults-extra-file=/var/www/html/mysql.cnf testmysql > "$bak/testmysql-$time.sql" > /dev/null 2>&1

del=$(find "$bak" -name 'testmysql*.sql' -type f | sort | head -n 1)

count=$(find "$bak" -name 'testmysql*.sql' -type f | wc -l)

if [ "$count" -gt "$num" ]; then
    rm -f "$del"
fi
# mysql.cnf文件代码如下

[client]
user=''
password=''
# 创建定时任务
crontab -e

#内容如下
30 01 * * * /var/www/html/bakMysql.sh > /dev/null 2>&1 &

# /dev/null 是一个特殊的文件,写入到它的内容都会被丢弃;如果尝试从该文件读取内容,那么什么也读不到。
# 2>&1 & 表示将标准错误输出重定向到标准输出,并将进程放到后台运行。

特别注意,在上传文件到服务器时,因为系统的不同,可能会因为回车符报错,解决办法如下

sed -i 's/\r$//' test.sh
#或者
tr -d '\r' < test.sh > test.tmp && mv test.tmp test.sh
#或者
dos2unix test.sh  #需要安装dos2unix

#其实最简单的操作,就是本地编辑器中找到换行格式,修改保存即可。

,