如何使用exec.Command在Golang中执行Mysql脚本

嗨,我正在尝试执行脚本以使用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)

}

}

问题是我遇到了错误:

ERROR 1049 (42000): Unknown database '< /Users/XXX/Documents/test/scripts/olds/SCRIPT_XXX.sql'

我认为问题是执行人员认为是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

但我尝试在Go中复制以自动执行脚本。

该脚本具有删除表,创建表,插入和具有FK关系的PK,这是一个非常完整的脚本,因此我无法逐行执行,因此我决定执行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")

您不必使mysql客户端使用stdin重定向读取脚本。相反,您可以使mysql客户端执行特定的命令source <scriptname>

PS:我也不会在代码中输入主机,端口,用户和密码。这意味着,只要更改这些连接参数,就必须重新编译程序。同样,在命令行上以纯文本格式使用密码也不安全。相反,我将所有连接参数放入默认文件中并使用mysql

--defaults-file=FILENAME

以上是 如何使用exec.Command在Golang中执行Mysql脚本 的全部内容, 来源链接: utcz.com/qa/419752.html

回到顶部