我正在尝试从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
我尝试了几种输入路径的方法,例如使用双斜杠或双反斜杠,但遇到相同的错误。有人可以帮忙吗?
答案 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。