应用场景
项目发布上线之后,如果后续有修改,这里的修改,包括代码和数据两部分的内容,比如由于业务需求的变更,我们新增了若干个数据库表,或者新增了若干个表字段等等,此时如果想让我们的修改同步到线上,依靠手工的方式一个个去拷贝文件以及修改数据库表肯定不现实,为了应对这种场景,我做了一个自动化增量更新的脚本,目前只适合windows下运行。
在运行bat之前,我们需要作以下准备:
1. 把之前修改过的文件以及文件结构全部复制到一个目录中,比如 upload
2. 数据库的修改部分,全部记录在.sql文件中,该sql文件存放在 data 目录中
3. 运行bat,其内容如下:
@echo off
setlocal enabledelayedexpansion
::设置根目录
set root_path=%~dp0
:file_path
set /p file_path=请输入目标路径:
if not defined file_path (
echo 无效的路径,请重新输入
goto file_path
)
if not exist %file_path% (
md %file_path%
)
::检查是否有sql脚本需要执行
set hasSql=0
for /R %root_path%data %%i in (*) do (
if "%%~xi" == ".sql" (
set hasSql=1
)
)
::出于安全性方面考虑,先执行sql脚本
if %hasSql% == 1 (
set /p execute_sql=更新文件中包含了sql脚本,确定执行该脚本吗(y/n)
if "!execute_sql!" == "y" (
:db_host
set /p db_host=请输入数据库连接地址:
if not defined db_host (
set db_host=localhost
)
:db_name
set /p db_name=请输入要使用的数据库名称:
if not defined db_name (
echo 无效的数据库名称,请重新输入
goto db_name
)
:db_user_name
set /p db_user_name=请输入数据库登录账号:
if not defined db_user_name (
echo 无效的登录账号,请重新输入
goto db_user_name
)
:db_user_pwd
set /p db_user_pwd=请输入数据库登录密码:
for /R %root_path%data %%i in (*) do (
if "%%~xi" == ".sql" (
echo %%~nxi
mysql -u!db_user_name! -p!db_user_pwd! -h!db_host! !db_name! < %root_path%data\%%~nxi
)
)
echo sql脚本执行完毕
)
)
::复制升级文件
echo 复制升级文件,请稍后...
for /R %root_path%upload %%i in (*) do (
xcopy %root_path%upload %file_path%\ /e/y
)
echo 升级文件复制完毕
pause