linux环境下定时备份数据库并上传到另一台linux服务器和windows主机
1、配置服务器SSH
(1)数据库服务器,执行命令后敲回车
[root@localhost /]# ssh-keygen -t rsa
(2)数据库服务器安装openssh
[root@localhost /]# yum install -y sshpass
(3)存储备份的服务器,执行命令后敲回车
[root@localhost /]# ssh-keygen -t rsa
(4)存储备份的服务器安装openssh
[root@localhost /]# yum install -y sshpass
(5)存储备份的windows安装openssh
设置——应用——可选功能——添加——搜openssh——安装openssh客户端
2、编写数据库备份脚本
在数据库服务器创建一个备份脚本文件,例如 backup_mysql.sh,并将以下代码复制到文件中,数据库信息和文件保存路径由自己设置:
#!/bin/bash
# 设置 MySQL 登录信息
MYSQL_USER="your_mysql_username"
MYSQL_PASSWORD="your_mysql_password"
MYSQL_DATABASE="your_database_name"
BACKUP_DIR="/path/to/backup/directory"
DATE=$(date +%Y-%m-%d)
TIME=$(date +%H-%M-%S)
# 创建备份目录和文件名
mkdir -p $BACKUP_DIR/$DATE
FILENAME=$BACKUP_DIR/$DATE/$MYSQL_DATABASE-$TIME.sql.gz
# 使用 mysqldump 命令备份数据库
mysqldump --user=$MYSQL_USER --password=$MYSQL_PASSWORD --databases $MYSQL_DATABASE | gzip > $FILENAME
# 输出备份完成信息到txt文件中
echo "备份成功 on $(date +%Y-%m-%d %H:%M:%S) for database $MYSQL_DATABASE to $FILENAME." >> $BACKUP_DIR/BackupLog.txt
echo "===开始传输 $BACKUP_DIR/$DATE/$MYSQL_DATABASE-$TIME.sql.gz ===" >> $BACKUP_DIR/BackupLog.txt
# -p 密码 root@YourIPAddr为主机名和ip :/opt是传输到目标的路径
sshpass -p 123456 scp -v -o StrictHostKeyChecking=no $BACKUP_DIR/$DATE/$MYSQL_DATABASE-$TIME.sql.gz root@YourIPAddr:/opt
sshpass -p 12345 scp -v -o StrictHostKeyChecking=no $BACKUP_DIR/$DATE/$MYSQL_DATABASE-$TIME.sql.gz ggc@YourIPAddr:/d:/data/
echo "===传输完成===" >> $BACKUP_DIR/BackupLog.txt
# 删除超过14天的备份文件
find $BACKUP_DIR/* -mtime +14 -exec rm {} \;
3、为脚本添加可执行权限,设置定时执行
Chmod +x backup_mysql.sh
将脚本文件添加到crontab中,定时执行备份任务,时间表达式为分钟(0~59) 小时(0~23) 日(1~31) 月(1~12) 周(0~6)
Crontab -e
0 2 * * * /path/to/backup_mysql.sh >/dev/null 2>&1
保存并退出编辑器。现在,脚本将在规定时间点执行,并输出备份计划信息到txt。
上面的shell脚本做了以下事情:
1.获取当前日期和时间。
2.使用 mkdir 命令创建备份目录和文件名。
3.使用 mysqldump 命令备份数据库,并将结果压缩成 gzip 格式。
4.输出备份完成信息。
5.传输备份到服务器
6.使用 find 命令查找超过14天的备份文件,并将其删除。
版权声明:本文为mu_ye_my原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。