Ram*_*tro 3 mysql shell terminal go
您好,我正在尝试执行一个脚本以使用 Golang 将数据填充到数据库中
func executeTestScript(){
cmd := exec.Command("/usr/local/mysql/bin/mysql", "-h127.0.0.1", "-P3333", "-uusr", "-pPassxxx", "-Ddtb_test", "< /Users/XXX/Documents/test/scripts/olds/SCRIPT_XXX.sql")
var out, stderr bytes.Buffer
cmd.Stdout = &out
cmd.Stderr = &stderr
err := cmd.Run()
if err != nil {
fmt.Println(fmt.Sprintf("Error executing query. Command Output: %+v\n: %+v, %v", out.String(), stderr.String(), err))
log.Fatalf("Error executing query. Command Output: %+v\n: %+v, %v", out.String(), stderr.String(), err)
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我收到错误:
ERROR 1049 (42000): Unknown database '< /Users/XXX/Documents/test/scripts/olds/SCRIPT_XXX.sql'
Run Code Online (Sandbox Code Playgroud)
我认为问题是exec认为是dbname的最后一个参数(sql脚本路径)
终端中的以下命令正在运行:
/usr/local/mysql/bin/mysql --host=127.0.0.1 --port=3333 --user=usr --password=Passxxx --database=dtb_test < /Users/XXX/Documents/roseula/scripts/olds/SCRIPT_XXX.sql
Run Code Online (Sandbox Code Playgroud)
但我尝试在 Go 中复制以自动执行脚本。
该脚本有删除表、创建表、插入和 PK 与 FK 关系,它是一个非常完整的脚本,因此我无法逐行执行,因此我决定执行 de mysql 程序以将数据插入数据库。
有什么建议么?
+1 来自 @MatteoRagni 的回答,展示如何在 Golang 中进行 stdin 重定向。
但这是我使用的一个简单的替代方案:
cmd := exec.Command("/usr/local/mysql/bin/mysql", "-h127.0.0.1", "-P3333",
"-uusr", "-pPassxxx", "-Ddtb_test",
"-e", "source /Users/XXX/Documents/test/scripts/olds/SCRIPT_XXX.sql")
Run Code Online (Sandbox Code Playgroud)
您不必让 mysql 客户端使用 stdin 重定向来读取脚本。相反,您可以让 mysql 客户端执行特定命令,即source <scriptname>.
PS:我也不会将主机、端口、用户和密码放入您的代码中。这意味着每当更改这些连接参数时都必须重新编译程序。此外,在命令行上使用明文密码也不安全。相反,我将所有连接参数放入默认文件中并使用mysql --defaults-file=FILENAME.
| 归档时间: |
|
| 查看次数: |
4243 次 |
| 最近记录: |