/
query.go
76 lines (66 loc) · 1.48 KB
/
query.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
package mydb
import (
"dannytools/ehand"
"database/sql"
_ "github.com/go-sql-driver/mysql"
)
const (
C_mysql_alive_query string = "select 1"
C_mysql_sql_global_status string = "show global status"
C_mysql_sql_global_vars string = "show global variables"
C_mysql_sql_slave_status string = "show slave status"
C_mysql_sql_slave_status_all string = "show all slaves status"
C_mysql_sql_innodb_status string = "show engine innodb status"
)
func MergeMapUint64(dst map[string]uint64, src map[string]uint64) map[string]uint64 {
mg := map[string]uint64{}
for k, v := range src {
mg[k] = v
}
for k, v := range dst {
mg[k] = v
}
return mg
}
func CheckMysqlAlive(db *sql.DB, querySql string) bool {
rows, err := db.Query(querySql)
if rows != nil {
defer rows.Close()
}
if err != nil {
if CheckIfMysqlAliveError(err) {
return true
} else {
return false
}
} else {
return true
}
}
func MysqlShowGlobalStatus(db *sql.DB) (map[string]int64, error) {
var (
err error
sts map[string]int64 = map[string]int64{}
varName string
varValue int64
)
rows, err := db.Query(C_mysql_sql_global_status)
if rows != nil {
defer rows.Close()
}
if err != nil {
return sts, ehand.WithStackError(err)
}
for rows.Next() {
err = rows.Scan(&varName, &varValue)
if err != nil {
//ignore error, example string value
continue
}
sts[varName] = varValue
}
if len(sts) == 0 {
return sts, ehand.WithStackError(err)
}
return sts, nil
}