linux mysql数据库定时备份
大概思路:
1、新建备份文件夹,比如:mkdir /home/dbBackup
2、新建shell脚本文件,如:touch databaseName.sh
3、给文件可执行权限:chmod u+x bkDatabaseName.sh
4、编写shell脚本命令,如下(已验证通过):
#!/bin/bash
#保存备份个数
number=3
#备份保存路径
backup_dir=/home/db_backup/bocms
#日期
dd=`date +%Y%m%d`
#备份工具
tool=/usr/bin/mysqldump
#用户名
username=root
#密码
password=123456
#将要备份的数据库
database_name=test
#备份数据库
$tool -u $username -p$password $database_name | gzip > $backup_dir/$database_name-$dd.sql.gz
#拷贝到10服务器
scp $backup_dir/$database_name-$dd.sql.gz root@192.168.2.10:/home/dbbackup/cms
#写创建备份日志
echo "create $backup_dir/$database_name-$dd.sql.gz" >> $backup_dir/log.txt
#找出需要删除的备份
#delfile=`ls -l -crt $backup_dir/$database_name-*.sql.gz | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于$number
count=`ls -l -crt $backup_dir/$database_name-*.sql.gz | awk '{print $9 }' | wc -l`
if [ $count -gt $number ]
then
rm $delfile #删除最早生成的备份,只保留number数量的备份
#写删除文件日志
echo "delete $delfile" >> $backup_dir/log.txt
fi
5、添加计划任务(用linux自带crontab):
(1)确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
# crontab
-bash: crontab: command not found
(2) 添加计划任务
执行命令:
crontab -e
这时就像使用vi编辑器一样,可以对计划任务进行编辑。
输入以下内容并保存:
0 */3 * * * /home/backup/bkDatabaseName.sh
具体是什么意思呢?
意思是每一分钟执行一次shell脚本“/home/backup/bkDatabaseName.sh”。
其中 ,crontab表达式:
m h dom mon dow command
m:分钟,0-59
h:小时,0-23
dom:日期,1-31
mon:月份,1-12
dow:星期,0-6,0为星期天
command:命令
6、查看任务是否执行:
systemctl status cron 或者查看shell 脚本定义的log.text文件
备注:
由于scp命令远程备份需要用到免密方式,用以下方式达成:
1、远程备份免密登录方式:
在A上运行命令:
# ssh-keygen -t rsa (连续三次回车,即在本地生成了公钥和私钥,不设置密码)
# ssh root@192.168.60.110 "mkdir .ssh; chmod 0700 .ssh" (需要输入密码)
# scp ~/.ssh/id_rsa.pub root@192.168.60.110:.ssh/id_rsa.pub (需要输入密码)
在B上的命令:
# touch /root/.ssh/authorized_keys2 (如果已经存在这个文件, 跳过这条)
# cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys2 (将id_rsa.pub的内容追加到 authorized_keys2 中)
回到A机器:
# ssh root@192.168.60.110 (不需要密码, 登录成功)
如果能保护好自己的私钥, 这种方法相对在shell上输入密码, 要安全一些
到此数据库备份已完成,有问题请留言,一起学习讨论,谢谢!