一、概述
应用场景:须要批量执行好多的mysql文件,逐项执行mysql数据库的sql文件太费时。
调试环境:本地windows10,要执行数据库在局域网的centos服务器上。
本地须要安装mysql,我的版本是mysql5.7。
MYSQL下载:
下载安装后linux环境变量,在环境变量加上路径后,前面用到mysql命令才可用。
1.检测是否windows命令行知否支持mysql指令
在cmd中用命令行登录mysql,假如提示“不是内部或外部指令”,则须要配置一下
image.png
须要将mysql安装目录下的bin目录,添加到系统变量中,具体怎么操作百度一下。
配置完成后,重新打开cmd,可以直接用mysql命令行。
二、解决思路三、具体实现
1.遍历目录并生成新的批量执行sql文件batch.sql
在根目录新建sqlscripts文件夹,把所有待执行的脚本装入sqlscripts文件夹,批处理命令会依次遍历并加入到新的sql。
2.新建creatsql.bat
在根目录新建一个txt文件并重命名为:creatsql.bat,之后把下边的内容复制进去,这个批处理会依次遍历并加入到batch.sql。
@echo off & setlocal EnableDelayedExpansion del batch.sql echo 开始执行... @set source=. for %%i in (sqlscripts*.sql) do ( set file=%%~fi set file=!file:/=/! echo %source% !file! echo %source% !file! >> batch.sql ) echo 执行完毕! pause
注意:,我在测试的过程中遇见有编码问题,因而所有的批处理文件都是用notepad++编辑并更改了编码格式为ANSI而不是utf-8;
3.新建update.bat
在根目录新建一个txt文件并重命名为:update.bat,之后把下边的内容复制进去。这个批处理会联接到数据库,并执行新生成的batch.sql文件。
::echo off @echo off :: 指定MySQL安装路径 :: C: :: cd C:Program FilesMySQLMySQL Server 5.7bin :: 数据库主机 @set host=192.10.120.101 :: 数据库名称 @set db=test :: 用户名 @set userName=root :: 密码 @set password=123456 :: 获取文件夹所在绝对路径 @set basePath=%~dp0 :: 要执行的sql脚本 @set sqlpath=%basePath%batch.sql echo 开始执行数据库脚本... :: 连接MySQL数据库并执行sql脚本 -f 脚本执行过程中,出现错误继续执行 --default-character-set指定导入数据的编码(与数据库编码相同) mysql -f -h %host% -u %userName% --password=%password% %db% < %sqlpath% --default-character-set=gbk :: 执行完成后,不立刻关闭dos窗口 echo 所有脚本执行完毕。 del batch.sql pause
注意:须要更改此批处理中的变量值linux 批量执行脚本,如主机,数据库名/密码等信息。
4.执行批处理
执行createsql.bat,并检测batch.sql是否正确执行update.bat,检测是否正常执行四、具体实现方案二
刚才介绍的思路是分为两步,先遍历并整合成一个sql脚本去执行。似乎还有一种方法就是逐字遍历的时侯linux 批量执行脚本,每取出一条就去执行一条。这样写一个批处理就可以搞定了。
具体实现:
新建update_each.bat,内容如下
::echo off @echo off :: 指定MySQL安装路径 :: C: :: cd C:Program FilesMySQLMySQL Server 5.7bin :: 数据库主机 @set host=192.10.120.101 :: 数据库名称 @set db=test :: 用户名 @set userName=root :: 密码 @set password=123456 :: 获取文件夹所在绝对路径 @set basePath=%~dp0 :: 要执行的sql脚本 @set sqlpath=%basePath%all.sql echo 开始执行数据库脚本... for %%i in (sqlscripts*.sql) do ( echo 正在执行 %%i 请稍后... echo set names utf8;>all.sql echo source %%i>>all.sql :: 连接MySQL数据库并执行sql脚本 -f 脚本执行过程中,出现错误继续执行 --default-character-set指定导入数据的编码(与数据库编码相同) mysql -f -h %host% -u %userName% --password=%password% %db% < %sqlpath% --default-character-set=gbk echo %%i 执行完毕。 ) del all.sql echo 所有脚本执行完毕。 pause
非常提示编码问题suse linux 下载,批处理命令是ANSI编码格式;sql脚本是UTF-8编码格式。
结束
以上是(每日一题)批量执行mysql数据库的解决思路的详细内容。更多信息请关注PHP中文网其他相关文章!