PostgreSQL/MySQL数据库备份脚本-01

PostgreSQL/MySQL数据库备份脚本-01
PostgreSQL/MySQL数据库备份脚本-02

PostgreSQL/MySQL数据库备份脚本-01


执行总线–全库备份.bat

@echo off

::::::::::::version:v3 20220507-0909 , 增加单表、视图查询出的数据备份,结果用notepad++来打开

::========通用配置========::
::时间格式化字符串-日期:20220510
set dateString=%date:~0,4%%date:~5,2%%date:~8,2%
::时间格式化字符串-时间:103266
set timeString=%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
::时间格式化字符串-日期+时间:20220510-103266,用于文件前缀
set BACKUPDATE=%dateString%-%timeString%
::备份bat文件所在目录
set dump_dir=%~dp0
::判断bat文件所在目录下有没有今天日期的文件夹,没有就创建
if not exist %dump_dir%%dateString% (
  mkdir %dump_dir%%dateString%
)

::========需要备份的表设置========::
::计划 需要备份的表清单,文件在当前目录下
set plan_tables=%dump_dir%/plan_tables.txt
::需要备份数据的多表/视图清单(通用视图),文件在当前目录下
set tables_data=%dump_dir%/tables_data.txt
::备份单表数据带where条件
set table_data-tpl_fd_message_t=%dump_dir%/table_data-tpl_fd_message_t.txt

::========不同场景调用的bat文件设置========::
::全库备份+表备份,调用到的bat文件名字
set bak_db_and_tables-bat=%dump_dir%bak_db_and_tables.bat
::多表备份,调用到的bat文件名字
set bak_tables-bat=%dump_dir%bak_tables.bat
::多表数据单独备份,一般是视图,调用到的bat文件名字
set bak_tables_data-bat=%dump_dir%bak_tables_data.bat

::========需要备份的环境========::

::计划-DEV-plan 参数配置
set projectname=颗粒化数据库备份_计划-DEV-plan
set DATABASE=cashplan_db_dev
set IP=7.213.4.17
set PORT=5432
set USER=plan
set PASSWORD=Hw13685@
call "%bak_db_and_tables-bat%" %projectname% %DATABASE% %IP% %PORT% %USER% %PASSWORD% %plan_tables%
call "%bak_tables_data-bat%" %projectname% %DATABASE% %IP% %PORT% %USER% %PASSWORD% %tables_data%

::JALOR公服-UAT-jalor_cs 参数配置
set projectname=JALOR公服-UAT-jalor_cs
set DATABASE=jalorcs_authority
set IP=7.210.155.38
set PORT=3306
set USER=jalor_cs
set PASSWORD=kWJq@NT2Tf!
::单表单独备份数据,带where条件
::单独备份数据的文件名
set file_name-tpl_fd_message_t=%dump_dir%%dateString%/%BACKUPDATE%-%projectname%-tpl_fd_message_t.sql
echo file_name-tpl_fd_message_t=%file_name-tpl_fd_message_t%
echo JALOR公服-SIT-jalor_cs pl_fd_message_t backup begin!
set condition="message_key like 'tmc%'"
mysqldump -h %IP% -u %USER% --password=%PASSWORD% --port=%PORT% --databases %DATABASE% --skip-extended-insert --tables tpl_fd_message_t --where="message_key REGEXP '^tmc.'"> "%file_name-tpl_fd_message_t%"
echo JALOR公服-SIT-jalor_cs pl_fd_message_t backup end!

echo on

bak_db_and_tables.bat

  • 整库备份和表备份。
@echo off&setlocal enabledelayedexpansion

::-----------概述:PostgreSQL数据库备份脚本
::-----------使用方向:数据库备份,先备份全库,再表(table)及数据备份。
::-----------适用范围:重建项目数据库

::===========数据库连接串配置开始===========::
set projectname=%1%
set DATABASE=%2%
set IP=%3%
set PORT=%4%
set USER=%5%
set PASSWORD=%6%
::===========数据库连接串配置结束===========::

::===========通用配置开始===========::
::时间格式化字符串-日期:20220510
set dateString=%date:~0,4%%date:~5,2%%date:~8,2%
::时间格式化字符串-时间:103266
set timeString=%time:~0,2%%time:~3,2%%time:~6,2%%time:~9,2%
::时间格式化字符串-日期+时间:20220510-103266,用于文件前缀
set BACKUPDATE=%dateString%-%timeString%
::备份bat文件所在目录
set dump_dir=%~dp0
::判断bat文件所在目录下有没有今天日期的文件夹,没有就创建
if not exist %dump_dir%%dateString% (
  mkdir %dump_dir%%dateString%
)
::===========通用配置结束===========::

::===========数据库全库备份开始===========::
::数据库全库备份-sql文件名
set db_dump_file_name=%dump_dir%%dateString%/%BACKUPDATE%-%projectname%.%DATABASE%.%USER%.sql
::数据库全库备份-日志文件名
set db_log_file_name=%dump_dir%%dateString%/%BACKUPDATE%-%projectname%.%DATABASE%.%USER%.log
::数据库全库备份-生成的压缩文件名
set db_rar_name=%dump_dir%%dateString%/%BACKUPDATE%-%projectname%.rar
::数据库全库备份-需要被压缩的文件名
set db_be_rar_name=%dump_dir%%dateString%/%BACKUPDATE%-%DATABASE%.%USER%.*
::当前日期获取参数,用于日志记录,2022-05-10 10:18:37.67
set current_date_string=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%
echo [%current_date_string%] - %projectname% 全库备份开始!
echo [%current_date_string%] - %projectname% 全库备份开始! >> "%db_log_file_name%"
::记录备份开始时间
set time_begin=%time%
::开始全库备份
D:\PostgreSQL\12\bin\pg_dump.exe "host=%IP% hostaddr=%IP% port=%PORT% user=%USER% password=%PASSWORD% dbname=%DATABASE%">"%db_dump_file_name%"
::记录备份结束时间
set time_end=%time%
::压缩备份文件生成rar文件,并删除源文件
::start winrar a -ep1 -df "%db_rar_name%" "%db_be_rar_name%"
::计算备份时长
set /a h1=%time_begin:~0,2%
set /a m1=1%time_begin:~3,2%-100
set /a s1=1%time_begin:~6,2%-100
set /a h2=%time_end:~0,2%
set /a m2=1%time_end:~3,2%-100
set /a s2=1%time_end:~6,2%-100
if %h2% LSS %h1% set /a h2=%h2%+24
set /a ts1=%h1%*3600+%m1%*60+%s1%
set /a ts2=%h2%*3600+%m2%*60+%s2%
set /a ts=%ts2%-%ts1%
set /a h=%ts%/3600
set /a m=(%ts%-%h%*3600)/60
set /a s=%ts%%%60
::重新获取当前时间,用于日志记录,2022-05-10 10:18:37.67
set current_date_string=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%
echo [%current_date_string%] - 生成的rar文件为:%db_rar_name%
echo [%current_date_string%] - 生成的rar文件为:%db_rar_name% >> "%db_log_file_name%"
echo [%current_date_string%] - %projectname% 全库备份完成!
echo [%current_date_string%] - %projectname% 全库备份完成! >> "%db_log_file_name%"
echo [%current_date_string%] - time taken: %h% 小时 %m% 分钟 %s% 秒.
echo [%current_date_string%] - time taken: %h% 小时 %m% 分钟 %s% 秒. >> "%db_log_file_name%"
::===========数据库全库备份结束===========::

::===========数据库单表备份开始===========::
::数据库单表备份-日志文件名
set db_all_log_file_name=%dump_dir%%dateString%/%BACKUPDATE%-%DATABASE%.%USER%-all.log
::重新获取当前时间,用于日志记录,2022-05-10 10:18:37.67
set current_date_string=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%
echo [%current_date_string%] - %projectname% 单表备份开始!
echo [%current_date_string%] - %projectname% 单表备份开始! >> "%db_all_log_file_name%"
::获取循环里面的数
set /a table_number_temp=0
for /f %%c in (%7%) do (
set /a table_number_temp+=1
set table_number=!table_number_temp!
set table_name=%%c
set file_name=%dump_dir%%dateString%/!date:~0,4!!date:~5,2!!date:~8,2!-!time:~0,2!!time:~3,2!!time:~6,2!!time:~9,2!-%DATABASE%.%USER%-!table_number!-!table_name!.sql
set current_date_string=!date:~0,4!-!date:~5,2!-!date:~8,2! !time:~0,2!:!time:~3,2!:!time:~6,2!.!time:~9,2!
echo [!current_date_string!] - 文件名:%dump_dir%%d%/!file_name!
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! Start Backup!
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! Start Backup! >> "%db_all_log_file_name%"
set time_begin=!time!
D:\PostgreSQL\12\bin\pg_dump.exe -t !table_name! "host=%IP% hostaddr=%IP% port=%PORT% user=%USER% password=%PASSWORD% dbname=%DATABASE%" >"!file_name!"
set time_end=!time!
set /a h1=!time_begin:~0,2!
set /a m1=1!time_begin:~3,2!-100
set /a s1=1!time_begin:~6,2!-100
set /a h2=!time_end:~0,2!
set /a m2=1!time_end:~3,2!-100
set /a s2=1!time_end:~6,2!-100
if !h2! LSS !h1! set /a h2=!h2!+24
set /a ts1=!h1!*3600+!m1!*60+!s1!
set /a ts2=!h2!*3600+!m2!*60+!s2!
set /a ts=!ts2!-!ts1!
set /a h=!ts!/3600
set /a m=!ts!-!h!*3600
set /a m=!m!/60
set /a s=!ts!%%60
set current_date_string=!date:~0,4!-!date:~5,2!-!date:~8,2! !time:~0,2!:!time:~3,2!:!time:~6,2!.!time:~9,2!
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! End Backup!
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! End Backup! >> "%db_all_log_file_name%"
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! 备份耗时: !h! 小时 !m! 分钟 !s! 秒.
echo [!current_date_string!] - %DATABASE% - %USER% - !table_number! - !table_name! 备份耗时: !h! 小时 !m! 分钟 !s! 秒. >> "%db_all_log_file_name%"
)
::重新获取当前时间,用于日志记录,2022-05-10 10:18:37.67
set current_date_string=%date:~0,4%-%date:~5,2%-%date:~8,2% %time:~0,2%:%time:~3,2%:%time:~6,2%.%time:~9,2%
echo [%current_date_string%] - %projectname% 单表备份结束!
echo [%current_date_string%] - %projectname% 单表备份结束! >> "%db_all_log_file_name%"
::===========数据库单表备份结束===========::

echo .
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Tzq@2018

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值