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
#其实最简单的操作,就是本地编辑器中找到换行格式,修改保存即可。