之前只有零散的手动备份的数据库文件,通过查资料有了一个自动备份的思路,这里记录一下。
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
打开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
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脚本远程传输的目标文件夹对应
Forfiles /p D:\data /s /d -7 /m *.* /c "cmd /c del /q /f @path"
9.windows绑定bat作为定时任务。
任务计划程序-创建任务
这样一来,windows物理机每天凌晨3点30删除七天前,保留最近7天的.sql文件
10.总结。
第一次在掘金上写文章,是记录也是分享,向大佬们学习。