Linux中MySQL定时备份

144 阅读2分钟

将一台服务器上的MySQL中指定的数据库每天3点自动转储为 .sql文件,并同步到另一台服务器

脚本位置: /root/mysql_backup_script.sh

统一备份位置: /home/mysqlbackup/

1. 配置服务器SSH

文件同步需要使两台服务器之间建立 SSH 连接,避免半夜同步时还要爬起来输入密码

ssh-keygen -t rsa

运行后一直回车,会在 /root/.ssh 目录下生成两个文件,.ssh 文件夹是隐藏文件夹,需要手动输入地址查看

image-20230905091811287.png

image-20230905092417981.png 进入后将 id_rsa.pub 中的内容全部复制

来到目标服务器,同样进入 /root/.ssh 文件夹,将刚刚复制的内容粘贴到 authorized_keys 文件中,保存即可

image-20230904171902307.png ( 如果没有该文件则新建,该文件中可以有多个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;
fiecho "---> $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

image-20230905100939861.png

#设置软链接
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 启动

image-20230904172829990.png

输入 crontab -e,在打开的编辑器中输入以下内容

0 3 * * * /bin/bash /root/mysql_backup_script.sh

image-20230912140203967.png 每天的 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 备份文件