将一台服务器上的MySQL中指定的数据库每天3点自动转储为 .sql文件,并同步到另一台服务器
脚本位置: /root/mysql_backup_script.sh
统一备份位置: /home/mysqlbackup/
1. 配置服务器SSH
文件同步需要使两台服务器之间建立 SSH 连接,避免半夜同步时还要爬起来输入密码
ssh-keygen -t rsa
运行后一直回车,会在 /root/.ssh 目录下生成两个文件,.ssh 文件夹是隐藏文件夹,需要手动输入地址查看
进入后将 id_rsa.pub 中的内容全部复制
来到目标服务器,同样进入 /root/.ssh 文件夹,将刚刚复制的内容粘贴到 authorized_keys 文件中,保存即可
( 如果没有该文件则新建,该文件中可以有多个key,多个key换行区分 )
2. 编写shell脚本
在 /root 目录下创建 mysql_backup_script.sh
#备份保存路径
BACKUP=/home/mysqlbackup
#当前时间
DATETIME=`date +%Y-%m-%d`
#DATETIME=`date +%Y-%m-%d-%H:%M:%S`
#将要备份的数据库
DATABASE=phlix
#本机地址
LOCAL=1.1.1.1
#目标服务器地址
TARGET=2.2.2.2
#如果文件夹不存在则创建
if [ ! -d $BACKUP ];
then
mkdir -p $BACKUP;
fi
echo "---> $DATETIME 备份开始" >> $BACKUP/log.txt
echo "本地备份路径: $BACKUP/$DATABASE-$DATETIME.sql" >> $BACKUP/log.txt
mysqldump -h $LOCAL -P3307 -uroot -proot123! -q -R --single-transaction $DATABASE > $BACKUP/$DATABASE-$DATETIME.sql
echo "本地备份成功,传输至目标服务器 $TARGET:$BACKUP" >> $BACKUP/log.txt
scp $BACKUP/$DATABASE-$DATETIME.sql root@$TARGET:$BACKUP/
#删除7天前备份的数据,自行更改
find $BACKUP -mtime +7 -name "*.sql" -exec rm -rf {} ;
echo -e "文件传输成功\n" >> $BACKUP/log.txt
#运行脚本,执行成功即可
/bin/bash /root/mysql_backup_script.sh
如果MySQL的端口不是默认的 3306,使用 -P端口号(大写P)指定端口,避免出现无法连接MySQL服务器的错误
2.1. $'\r': command not found
因为Windows和Linux的文件格式不同,如果是Windows编辑上传到Linux中并带有空行时会出现此错误
执行完下列操作后再重新执行脚本文件
vim 脚本文件.sh
:set ff=unix
:wq
2.2. mysqldump: command not found
找不到 mysqldump 命令,是因为没有 mysqldump 的软链
# 查找mysql的安装路径
find / -name mysql -print
#设置软链接
ln -fs /usr/local/mysql/mysql8.0/bin/mysql /usr/bin
ln -fs /usr/local/mysql/mysql8.0/bin/mysqldump /usr/bin
再次执行脚本测试
3. 添加定时任务
cron是Linux下的定时执行工具
service crond start //启动服务
service crond stop //关闭服务
service crond restart //重启服务
service crond reload //重新载入配置
service crond status //查看服务状态
输入 service crond status 查看cron服务状态,如果未启动输入 service crond start 启动
输入 crontab -e,在打开的编辑器中输入以下内容
0 3 * * * /bin/bash /root/mysql_backup_script.sh
每天的 3 点钟执行脚本文件 mysql_backup_script.sh 进行数据库备份
输入 service crond reload 重新载入配置
输入 service crond restart 重新启动服务
3.1.在目标服务器添加定时任务
防止服务器的 MySQL备份文件夹过大,定时删除 .sql 文件
输入 service crond status 查看cron服务状态,如果未启动输入 service crond start 启动
启动后输入 crontab -e,在打开的编辑器中输入以下内容
0 4 * * * find /home/mysqlbackup/ -mtime +7 -name "*.sql" -exec rm -rf {} ;
每天的 4 点钟删除七天前的 .sql 备份文件