数据库文件异地备份(摸索版)

349 阅读3分钟

之前只有零散的手动备份的数据库文件,通过查资料有了一个自动备份的思路,这里记录一下。

1.手动备份。缺点:重复操作,费时费力

这里以postgresql数据库为例

1. 远程登录数据库服务器,直接执行

/usr/pgsql-9.6/bin/
./pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)   >/data/dum.sql

2. 将生成的.sql文件拷贝到任意一台物理机

2.自动备份

这里主要介绍自动备份数据库

首先要确保数据库服务器能ping通你备份数据库文件的设备

这里备份数据库文件的设备为一台windows7的物理机

1. 安装OpenSSH。

在windows7物理机下载OpenSSH-Win64.zip

注意:最好不要安装在C:\Users\your_userName\ 下面,不然会出现一些问题,建议直接解压到到C盘下C:\OpenSSH,并将该路径添加至环境变量Path。

2. 打开cmd,切换至C:\OpenSSH

set-executionpolicy remotesigned
cd C:\OpenSSH
以下安装命令需要在执行第一条命令后才能执行,不然会报错
 .\install-sshd.ps1

3. 安装完毕,开启ssh服务。(也可以使用net start sshd 启动)

Start-Service sshd

4. 开启免密登录

在centos7数据库服务器上生成公钥 (怎么生成就不赘述,很常见

cd ~/.ssh

image.png

打开id_rsa.pub文件,复制公钥文件内容,到服务端C:\Users\your_userName.ssh下创建文件authorized_keys(没有文件后缀),粘贴公钥,保存退出。

服务端切换到C:\ProgramData\ssh\下(首次启动sshd后会生成该文件夹),打开sshd_config文件,

修改文件(以下是重点):

取消以下3条的注释
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
PasswordAuthentication no

注释以下2条
#Match Group administrators
#       AuthorizedKeysFile __PROGRAMDATA__/ssh/administrators_authorized_keys

其余不做修改,基本都是已注释不启用。

重启服务:Restart-Service sshd

5. 测试远程登录

在centos7数据库服务器上,执行命令ssh windows_User_Name@windows_IP_Adress,如果无需密码能直接登录就OK了(首次登陆可能会提示是否加入known_hosts,输入yes)。

6. 编写shell脚本

通过以上操作,我们数据库所在的centos7服务器,已经可以ssh免密登录到windows物理机,编写一个shell脚本名为Data-backup.sh,导出数据库文件并远程传输。

cd /data/DataBackUp

image.png

shell脚本如下:

nowtime=$(date "+%Y%m%d")

echo "开始执行 PostgreSql 数据库test的备份!" >> /data/DataBackUp/log$nowtime.log

echo "backuping -------------------" >> /data/DataBackUp/log$nowtime.log

echo "时间:" $nowtime >> /data/DataBackUp/log$nowtime.log

cd /data

mkdir "$nowtime"sync

cd /usr/pgsql-9.6/bin/

./pg_dump -h localhost -U postgres(用户名) 数据库名(缺省时同用户名)

>/data/"$nowtime"sync/"$nowtime"test.sql

echo "数据库test备份结束!" >> /data/DataBackUp/log$nowtime.log

echo "开始异地备份" >> /data/DataBackUp/log$nowtime.log

cd /data/"$nowtime"sync/

scp "$nowtime"test.sql windows_User_Name@windows_IP_Adress:/d:/data/

echo "异地备份结束!" >> /data/DataBackUp/log$nowtime.log

echo "删除已经备份的数据库文件" >> /data/DataBackUp/log$nowtime.log

cd /data

rm -r "$nowtime"sync

echo "删除已经备份的数据库文件结束!" >> /data/DataBackUp/log$nowtime.log

exit;

7. 将shell脚本加入centos7定时任务

在centos7数据库服务器上执行crontab -e

写入0 3 * * * /data/DataBackUp/Data-backup.sh并保存(!wq)

这样每天凌晨三点,都会执行shell脚本从centos7数据库服务器远程传输sql文件到windows物理机

8. 在windows物理机编写.bat文件,内容如下

.bat文件的作用是删除指定文件夹下,7天前文件

这里的文件夹名和上面shell脚本远程传输的目标文件夹对应

image.png

Forfiles /p D:\data /s /d -7 /m *.* /c "cmd /c del /q /f @path"

9.windows绑定bat作为定时任务

任务计划程序-创建任务

image.png

这样一来,windows物理机每天凌晨3点30删除七天前,保留最近7天的.sql文件

10.总结

第一次在掘金上写文章,是记录也是分享,向大佬们学习。