1. 程式人生 > >Golang 操作mysql使用舉例---連線本地資料庫

Golang 操作mysql使用舉例---連線本地資料庫

連線資料庫的方式有兩種:TCP和Unix域socket。
本文使用Unix domain sockets連線資料庫。關於TCP連線資料庫可以參考Go 操作mysql使用舉例

下面例子中,演示了使用show命令檢視資料庫連線資訊的過程。
show processlist可以檢視當前時刻資料庫的連線以及正在執行的sql語句。

mysql> show processlist;
±—±-----±---------------------±-----±--------±-----±---------±-----------------+
| Id | User | Host | db | Command | Time | State | Info |
±—±-----±---------------------±-----±--------±-----±---------±-----------------+
| 26 | root | 172.24.232.66:7868 | sys | Query | 0 | starting | show processlist |
±—±-----±---------------------±-----±--------±-----±---------±-----------------+
1 row in set (0.00 sec)

程式碼如下:

package main

import (
	"database/sql"
	"fmt"
	"log"

	_ "github.com/go-sql-driver/mysql"

)

type DBConnectionInfo struct {
	ID	[]byte
	User	string
	Host	string
	DB	[]byte 
	Cmd	string
	Time	[]byte
	State	string
	Info	[]byte
}

func(f *DBConnectionInfo) String() string{

	return fmt.Sprintf("ID:%s, User:%s, Host:%s, DB:%s, Cmd:%s, Time:%s, State:%s, Info:%s", string(f.ID), f.User, f.Host, string(f.DB), f.Cmd, string(f.Time), f.State, string(f.Info))

}

const (
	mysqlShowProcessList="show processlist"
)
var DB *sql.DB

//var dataBase = "root:
[email protected]
(/tmp/mysql.sock)/mysql" var dataBase = "root:[email protected](/tmp/mysql.sock)/" func Init() { var err error DB, err = sql.Open("mysql", dataBase) if err != nil { log.Fatalln("open db fail:", err) } err = DB.Ping() if err != nil { log.Fatalln("ping db fail:", err) } } func main() { Init() query() } func query() { rows, err := DB.Query(mysqlShowProcessList) if err != nil { log.Println("query failed:", err) return } defer rows.Close() for rows.Next(){ data := &DBConnectionInfo{} if err := rows.Scan(&data.ID, &data.User, &data.Host, &data.DB, &data.Cmd, &data.Time, &data.State, &data.Info); err != nil { log.Println("Scan failed:", err) } fmt.Println("data:", data) } }

output:

data: ID:145, User:root, Host:localhost, DB:, Cmd:Sleep, Time:632, State:, Info:
data: ID:172, User:root, Host:localhost, DB:, Cmd:Query, Time:0, State:starting, Info:show processlist

參考