package executor import ( "bufio" "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" "os" "strings" ) 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 文件并执行 query := "" scanner := bufio.NewScanner(jackeyLove) for scanner.Scan() { sqlStatement := scanner.Text() // 这里可以添加逻辑来忽略空行或注释行 if sqlStatement == "" || sqlStatement[:2] == "--" || sqlStatement[:2] == "/*" { continue } query += sqlStatement if strings.HasSuffix(strings.TrimSpace(sqlStatement), ";") { fmt.Printf("%s -> %s", jackeyLoveFile, query) _, err := db.Exec(query) if err != nil { executeError := fmt.Sprintf("[MysqlSqlFileLoad] - jackeyLoveFile %s 执行出错: %s, 错误信息: %s", jackeyLove.Name(), sqlStatement, err.Error()) log.Error(executeError) return false, []string{ executeError, } } query = "" } else { query += " " // 添加空格以便连接多行语句 } } // 检查扫描过程中是否有错误 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 }