Files
ProjectOctopus/agent-go/executor/MySqlFunction.go
2023-11-28 11:30:44 +08:00

100 lines
2.7 KiB
Go

package executor
import (
"bufio"
"database/sql"
"fmt"
_ "github.com/go-sql-driver/mysql"
"os"
)
func MysqlSqlFileLoad(jackeyLoveIp string, jackeyLoveFileList []string) (bool, []string) {
dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
db, err := sql.Open("mysql", dsn)
if err != nil {
errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
log.Error(errConnect)
return false, []string{
errConnect,
}
}
defer db.Close()
// 确保数据库连接是有效的
if err := db.Ping(); err != nil {
errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
log.Error(errConnect)
return false, []string{
errConnect,
}
}
for _, jackeyLoveFile := range jackeyLoveFileList {
// 打开 SQL 文件
jackeyLove, err := os.Open(jackeyLoveFile)
if err != nil {
log.ErrorF("[MysqlSqlFileLoad] - failed to load jackeyLoveFile => %s", jackeyLove.Name())
}
defer jackeyLove.Close()
// 逐行读取 SQL 文件并执行
scanner := bufio.NewScanner(jackeyLove)
for scanner.Scan() {
sqlStatement := scanner.Text()
// 这里可以添加逻辑来忽略空行或注释行
if sqlStatement == "" || sqlStatement[:2] == "--" {
continue
}
// 执行 SQL 语句
_, err := db.Exec(sqlStatement)
if err != nil {
executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 执行出错: %s, 错误信息: %s", jackeyLove.Name(), sqlStatement, err.Error())
log.Error(executeError)
return false, []string{
executeError,
}
}
}
// 检查扫描过程中是否有错误
if err := scanner.Err(); err != nil {
executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 文件加载错误! 错误信息: %s", jackeyLove.Name(), err.Error())
log.Error(executeError)
return false, []string{
executeError,
}
}
log.DebugF("[MysqlSqlFileLoad] - jackeyLoveFile %s execute success !", jackeyLove.Name())
}
return true, append(jackeyLoveFileList, "[MysqlSqlFileLoad] all file loaded !")
}
func MySqlConnection(jackeyLoveIp string, jackeyLovePort string) (bool, []string) {
dsn := "root:QzfXQhd3bQ@tcp(" + jackeyLoveIp + ":33306)/"
db, err := sql.Open("mysql", dsn)
if err != nil {
errConnect := fmt.Sprintf("[MysqlSqlFileLoad]- mysql connection error ! please check ! => %s error is %s ", dsn, err.Error())
log.Error(errConnect)
return false, []string{
errConnect,
}
}
defer db.Close()
// 确保数据库连接是有效的
if err := db.Ping(); err != nil {
errConnect := "[MysqlSqlFileLoad]- mysql ping error ! please check !"
log.Error(errConnect)
return false, []string{
errConnect,
}
}
return true, nil
}