如何使用PowerShell脚本将.sql文件导入MySQL?

时间:2018-07-16 06:56:15

标签: mysql powershell

我正在尝试从Windows环境中将转储文件(包含CREATE / DROP / INSERT命令的.sql文件)导入远程MySQL服务器。我已经使用此PowerShell脚本通过使用环境中安装的“ MySQL shell实用程序” 功能为我完成了工作

Set-ExecutionPolicy RemoteSigned
Add-Type –Path 'C:\Program Files (x86)\MySQL\MySQL Connector Net 8.0.11\Assemblies\v4.5.2\MySql.Data.dll'
$Connection = [MySql.Data.MySqlClient.MySqlConnection]@{ConnectionString='server=192.168.100.100;Encrypt=false;uid=myUser;pwd=myPass;database=myDB;'}
$Connection.Open()
$sql = New-Object MySql.Data.MySqlClient.MySqlCommand
$sql.Connection = $Connection
$sql.CommandText = "SOURCE D:/MySQL_Dumps/myFile.sql"
$sql.ExecuteNonQuery()
$Reader.Close()
$Connection.Close()

我可以使用SELECT / ExecuteNonQuery() / ExecuteScalar()方法连接到服务器并执行基本的ExecuteReader()查询,但是收到此特定SOURCE命令的错误:< / p>

Exception calling "ExecuteNonQuery" with "0" argument(s): "You have an error
in your SQL syntax; check the manual  that corresponds to your MySQL server
version for the right syntax to use near 'SOURCE
D:/MySQL_Dumps/myFile.sql' at  line 1" At line:8 char:1
+ $sql.ExecuteNonQuery()
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : MySqlException

我尝试了几种输入路径的方法,例如使用双斜杠或双反斜杠,但遇到相同的错误。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

./mysql -u root -p DatabaseName -e "source C:\path\to\my_sql_file.sql"

答案 1 :(得分:0)

$sql.CommandText = Get-Content D:\MySQL_Dumps\myFile.sql -Raw

这对我来说非常有效。

答案 2 :(得分:0)

我知道这个帖子有点老了,但在谷歌上搜索这个问题时它是最重要的,所以我要把我的钱放在锅里。

我在一个项目中遇到了同样的问题,并且在使用代码段之后

$sql.CommandText = Get-Content D:\MySQL_Dumps\myFile.sql -Raw

我遇到了使用自定义 DELIMITER 字符(包含存储过程、触发器和用户定义函数的.sql 文件)的脚本的问题。

经过一番研究,我发现 MySql.Data.MySqlClient.MySqlScript 类可以处理 .sql 文件/脚本的执行。根据 this thread,从连接器版本 5.2.8 开始,自定义 DELIMITER 问题不再存在。 因此,对我有用的是以下代码段:

$Script = New-Object MySql.Data.MySqlClient.MySqlScript($MySqlConn)
$Script.Query = Get-Content $ScriptPath -Raw
$Script.Execute() | Out-Null

我目前使用的是 MySql.Data.dll 版本 8.0.25。

相关问题