MySQL-- 批处理执行多个sql脚本恢复数据

目录

方法1 不推荐

方法2 不推荐

方法3 DOS环境下(推荐)

若方法3执行批处理文件出现'****' 不是内部或外部命令的解决方案

小技巧:在Mysql中取消和关联外键约束


数据恢复或插入,必须注重数据源和数据目的地的编码一致性,否则会出现数据乱码问题

方法1 不推荐

若有SQL脚本a.sql, b.sql, 其目录在F盘根目录下, 则可再写一个SQL脚本c.sql(假设其目录也在F盘根目录下, 也可以在其他路径下)如下: 

source f:/a.sql; 
source f:/b.sql; 
......

然后执行source f:/c.sql 即可.,注意:路据要提供全路径[绝对路径]


方法2 不推荐

恢复xls、xlsx、txt或csv格式的数据文件,也可写一个SQL脚本如下: 

SET FOREIGN_KEY_CHECKS=0;
  
load data local infile '[文件全路径/.文件后缀名]' into table [相对应的数据库表名] fields terminated by '\t';
......

SET FOREIGN_KEY_CHECKS=1; 

方法3 DOS环境下(推荐)

方法1和方法2的不便之处在于, 要为每个脚本写一句代码, 若有成千上万个, 这样写便不现实. 此时, 可用批处理来实现. 批处理文件后缀名为.bat,需放置在与多个sql脚本目录的平级目录下, 如多个sql脚本目录为F:\all_sql目录下,则批处理文件.bat需放置在F:\下,其批处理代码如下: 

::echo off ::
@echo off
echo 开始执行数据库脚本...
for %%i in ([目录的相对路径]\*.sql) do (
echo 正在执行 %%i 请稍后...
echo set names utf8;>all.sql
echo source %%i>>all.sql
mysql -h[IP地址] -u[用户名] -p[密码] --max_allowed_packet=1048576 --net_buffer_length=16384 [数据库名]< all.sql
echo %%i 执行完毕。
)
del all.sql
echo 所有脚本执行完毕。
pause

注意:

1. 目录的相对路径,如sql脚本放在all_sql目录下,那相对路径就可以写成:all_sql\*.sql;

2. do后面的左括号要跟在do后, 若放在do的下一行, 则出会出现一闪而过的情况

3. all.sql只是作为临时缓冲sql脚本,多个sql脚本信息暂时缓冲到all.sql脚本中,从而all.sql脚本把数据信息更新到数据库中,全部数据更新完后,删除all.sql临时缓冲脚本文件;临时缓冲sql脚本名称可自定义

4. ip如果为本地,可以不写-h参数


若方法3执行批处理文件出现'****' 不是内部或外部命令的解决方案

右键点击:“我的电脑”-“属性”-“高级”-“环境变量”-“系统变量”-双击“Path”

将mysql的路径“D:\[MySQL安装全路径]\bin,添加进去-“确定”

注意:系统变量Path中明明配置了MySQL的安装路径,为什么还是出现“不是内部或外部命令”的情况,那是因为系统没有识别到的原因,可添加系统变量MYSQL_HOME,方法如下

MySQL-- 批处理执行多个sql脚本恢复数据_第1张图片

安装路径换成自己电脑上MySQL的安装路径

MySQL-- 批处理执行多个sql脚本恢复数据_第2张图片

在Path中加入如下所示:%MYSQL_HOME%\bin

MySQL-- 批处理执行多个sql脚本恢复数据_第3张图片

MySQL-- 批处理执行多个sql脚本恢复数据_第4张图片

到此完成


小技巧:在Mysql中取消和关联外键约束

SET FOREIGN_KEY_CHECKS=0; -- 取消外键约束,放在数据恢复或插入前
SET FOREIGN_KEY_CHECKS=1; -- 设置外键约束,放在数据恢复或插入完成后

在方法1和方法3中都应该先把数据表间的外键约束取消(设置为:0),等数据恢复或插入完成后,再把数据表间的外键约束关联起来(设置为:1),防止数据表间因外键约束,而无法正确恢复或插入数据,办法很简单,在此不再叙述

你可能感兴趣的:(#,MySql)