麦克斯仇
Think different
159
文章
36873
阅读
首页
INDEX
文章
ARTICLE
关于
ABOUT
Mysql云端备份与本地下载(全量备份版)
创建日期:
2020/08/02
修改日期:
2022/11/15
Linux
MySQL
> 该方案仅使用全量备份,未使用增量备份,适合数据量不大备份实时性不高的情况 涉及到的知识: 指令 | 说明 | 参考链接 ---|---|--- vim | 文件编辑 | 略 find | 查找文件 | [https://oracleblog.org/study-note/how-to-calculate-find-mtime/](https://oracleblog.org/study-note/how-to-calculate-find-mtime/) mysqldump | 数据库备份 | [mysqldump命令详解](https://maxqiu.com/article/detail/45) tar | 文件压缩 | [Linux 压缩与解压](https://maxqiu.com/article/detail/44) crontab | 定时任务 | [crontab定时任务](https://maxqiu.com/article/detail/22) scp | 远程文件传输 | [Linux scp远程文件传输](https://maxqiu.com/article/detail/43) expect | shell自动化交互执行 | [https://www.jellythink.com/archives/373](https://www.jellythink.com/archives/373) ### 云端服务器备份 #### 1. 编写备份脚本 在自定义位置编辑一个备份脚本文件(以`/root/`目录下为例) ```bash vim databaseBackup.sh ``` 脚本内容如下 ```bash #!/bin/bash # 云端保留7天 find /databasebackup/* -type f -mtime +5 -exec rm {} \; # 日期和时间 datetime=`date +%Y%m%d%H%M` # 备份 /usr/local/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -ppassword --single-transaction -F --skip-extended-insert -R -r /databasebackup/dbname${datetime}.sql -B dbname # 进入到备份目录 cd /databasebackup # 压缩sql文件 tar -zcf dbname${datetime}.tar.gz dbname${datetime}.sql # 删除sql,仅保留压缩后的文件 rm -rf dbname${datetime}.sql ``` 授予执行权限 ```bash chmod +x databaseBackup.sh ``` #### 2. 设置定时任务 编辑定时任务 ```bash crontab -e ``` 添加如下内容(以`每天1:30`备份为例) ```bash 30 1 * * * /root/databaseBackup.sh ``` ### 内网服务器下载 > 内网服务器下载是在等待云端备份完成后下载备份的文件, `scp`拷贝文件时需要输入服务器的密码,可以使用如下两种方式自动完成 #### 方案一:配置ssh免密登录 ##### 1. 配置ssh免密登录 参照:[Linux ssh免密登录](https://maxqiu.com/article/detail/42) ##### 2. 编写备份脚本 在自定义位置编辑一个备份脚本文件(以`/root/`目录下为例) ```bash vim databaseDownload.sh ``` 内容如下 ```bash #!/bin/bash # 获取当天日期 date=`date +%Y%m%d` # 执行scp远程拷贝(0130是服务端设置开始备份时间) scp -C -P 22 user@serverip:/databasebackup/dbname${date}0130.tar.gz /databasebackup/dbname${date}0130.tar.gz ``` 授予执行权限 ```bash chmod +x databaseDownload.sh ``` ##### 3. 设置定时任务 编辑定时任务 ```bash crontab -e ``` 内容如下(以`每天2:00`开始下载为例,下载的时间在服务端备份结束之后) ```bash 0 2 * * * /root/databaseDownload.sh ``` #### 方案二:expect自动输入密码 ##### 1. 安装expect ```bash yum install -y expect ``` ##### 2. 编写备份脚本 在自定义位置编辑一个备份脚本文件(以`/root/`下为例) ```bash vim databaseDownload.sh ``` 内容如下 ```bash #!/usr/bin/expect # 接收当天的日期参数 set date [lindex $argv 0] # 设置超时时间 set timeout -1 # 执行scp远程拷贝(0130是服务端设置开始备份时间) spawn scp -C -P 22 user@serverip:/databasebackup/dbname${date}0130.tar.gz /databasebackup/dbname${date}0130.tar.gz # 输入密码 expect { "(yes/no)?" { send "yes\n" expect "*assword:" { send "ssh_password\n"} } "*assword:" { send "ssh_password\n" } } expect eof ``` 授予执行权限 ```bash chmod +x databaseDownload.sh ``` ##### 3. 设置定时任务 编辑定时任务 ```bash crontab -e ``` 内容如下(以`每天2:00`开始下载为例,下载的时间在服务端备份结束之后) ```bash 0 2 * * * /root/databaseDownload.sh $(date +"\%Y\%m\%d") ```
6
全部评论