commit 1685ff59ffa6ff31fedd7edac87903ca3990beaa Author: huangsimin Date: Mon Dec 10 14:06:37 2018 +0800 for test diff --git a/logdb.go b/logdb.go new file mode 100644 index 0000000..2cddea8 --- /dev/null +++ b/logdb.go @@ -0,0 +1,71 @@ +package logdb + +import ( + "database/sql" + "fmt" + "io/ioutil" + "log" + + yaml "gopkg.in/yaml.v2" +) + +// LogDB 属性结构 +type LogDB struct { + Charset string `yaml:"charset"` + DB string `yaml:"db"` + Hosts []string `yaml:"hosts"` + Password string `yaml:"password"` + Port string `yaml:"port"` + User string `yaml:"user"` + + hostid int + driver *sql.DB + errorcount int +} + +// NewLogDB 创建一个logdb的配置 +func NewLogDB(filename string) *LogDB { + logdb := LogDB{} + data, err := ioutil.ReadFile(filename) + if err != nil { + panic(err) + } + err = yaml.Unmarshal(data, &logdb) + if err != nil { + panic(err) + } + logdb.hostid = 0 + + logdb.Connect() + return &logdb +} + +// Connect 重连 +func (logdb *LogDB) Connect() { + defer func() { + if err := recover(); err != nil { + hostlen := len(logdb.Hosts) + for i := 0; i < hostlen; i++ { + + logdb.errorcount++ + if logdb.errorcount >= hostlen*2 { + panic(err) + } + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", logdb.User, logdb.Password, logdb.Hosts[logdb.hostid], logdb.Port, logdb.DB)) + if err != nil { + log.Println(err, logdb.Hosts[logdb.hostid], " is connect fail") + continue + } + logdb.driver = db + logdb.hostid = i + break + } + } + }() + + db, err := sql.Open("mysql", fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", logdb.User, logdb.Password, logdb.Hosts[logdb.hostid], logdb.Port, logdb.DB)) + if err != nil { + panic(err) + } + logdb.driver = db +} diff --git a/logdb.yaml b/logdb.yaml new file mode 100644 index 0000000..76f3ee9 --- /dev/null +++ b/logdb.yaml @@ -0,0 +1,6 @@ +charset: utf8mb4 +db: test_log +hosts: [192.168.6.101,192.168.6.102,192.168.6.103,192.168.6.104,192.168.6.105] +password: ag-spider-log +port: 4000 +user: spider \ No newline at end of file diff --git a/logdb_test.go b/logdb_test.go new file mode 100644 index 0000000..43038aa --- /dev/null +++ b/logdb_test.go @@ -0,0 +1,20 @@ +package logdb + +import ( + "testing" + + _ "github.com/go-sql-driver/mysql" +) + +// charset: utf8mb4 +// db: test_log +// hosts: [192.168.6.101, 192.168.6.102, 192.168.6.103, 192.168.6.104, 192.168.6.105] +// password: ag-spider-log +// port: 4000 +// user: spider + +func TestSelect(t *testing.T) { + logdb := NewLogDB("logdb.yaml") + t.Error(logdb) + logdb.Connect() +}