mysql checksum table golang
来源:互联网 发布:淘宝上怎么买qq号 编辑:程序博客网 时间:2024/06/05 15:16
package mainimport ("bytes""database/sql""fmt"_ "github.com/go-sql-driver/mysql""io/ioutil""regexp""strconv""strings""sync")var wg sync.WaitGrouptype DBinfo struct {user stringpwd stringhost stringport uint64database string}type Checkinfo struct {host stringport uint64database stringtable stringchecksum uint64}func checksumTable(dbinfo *DBinfo, checkinfo *Checkinfo) {db := getConn(dbinfo)if db == nil {return}defer db.Close()tbuf := bytes.Buffer{}tbuf.WriteString("checksum table ")tbuf.WriteString(checkinfo.table)rows, err := db.Query(tbuf.String())if err != nil {return}if rows.Next() {var table_name stringvar checksum uint64rows.Scan(&table_name, &checksum)checkinfo.checksum = checksum}}func getConn(dbinfo *DBinfo) *sql.DB {url := bytes.Buffer{}url.WriteString(dbinfo.user)url.WriteString(":")url.WriteString(dbinfo.pwd)url.WriteString("@tcp(")url.WriteString(dbinfo.host)url.WriteString(":")url.WriteString(strconv.FormatUint(dbinfo.port, 10))url.WriteString(")/")url.WriteString(dbinfo.database)url.WriteString("?charset=utf8")db, err := sql.Open("mysql", url.String())if err != nil {return nil}return db}func getTables(dbinfo *DBinfo) *map[string]Checkinfo {dict := make(map[string]Checkinfo)db := getConn(dbinfo)if db == nil {return nil}defer db.Close()rows, err := db.Query("show tables")if err != nil {return nil}for rows.Next() {var table_name stringrows.Scan(&table_name)dict[dbinfo.database+"_"+table_name] = Checkinfo{host: dbinfo.host, port: dbinfo.port, database: dbinfo.database, table: table_name}}return &dict}func getDatasource(path string) *map[string]DBinfo {dict := make(map[string]DBinfo)reg_coll, _ := regexp.Compile(`[/:]+`)rf, _ := ioutil.ReadFile(path)ar := strings.Split(string(rf), "\n")for _, item := range ar {ar_coll := reg_coll.Split(item, -1)if len(ar_coll) == 5 {port, _ := strconv.ParseUint(ar_coll[1], 10, 64)dict[ar_coll[2]] = DBinfo{host: ar_coll[0], port: port, database: ar_coll[2], user: ar_coll[3], pwd: ar_coll[4]}}}return &dict}func workhandle(skey string, sdbinfo DBinfo, target *map[string]DBinfo) {dict := getTables(&sdbinfo)if dict != nil {for dkey, dcheckinfo := range *dict {checksumTable(&sdbinfo, &dcheckinfo)//fmt.Println(dkey, "source", dcheckinfo)tdbinfo := (*target)[skey]tcheckinfo := &Checkinfo{host: tdbinfo.host, port: tdbinfo.port, database: tdbinfo.database, table: dcheckinfo.table}checksumTable(&tdbinfo, tcheckinfo)//fmt.Println(dkey, "target", tcheckinfo)if dcheckinfo.checksum != tcheckinfo.checksum {fmt.Println(dkey, "source", dcheckinfo, "->", dkey, "target", tcheckinfo)}}}wg.Done()}func run() {source := getDatasource("/home/work/etc/a.lst")target := getDatasource("/home/work/etc/b.lst")for skey, sdbinfo := range *source {wg.Add(1)go workhandle(skey, sdbinfo, target)}wg.Wait()}func main() {run()}cat /home/work/etc/a.lst 127.0.0.1:3306/test/xm_dba/123456127.0.0.1:3306/test_1/xm_dba/123456cat /home/work/etc/b.lst 127.0.0.1:3306/test/xm_dba/123456127.0.0.1:3306/test_1/xm_dba/123456
1 0
- mysql checksum table golang
- mysql table checksum
- pt-table-checksum校验mysql数据一致性
- pt-table-checksum- 主从MySQL数据一致性校验
- 验证MySQL主从一致性(pt-table-checksum&pt-table-sync)
- Maatkit--Mysql的高级管理工具mk-table-checksum
- MySQL 使用pt-table-checksum 检查主从数据一致性
- MySQL主从同步校验工具_pt-table-checksum
- 使用pt-table-checksum校验MySQL主从复制
- 利用mk-table-checksum监测Mysql主从数据一致性操作记录
- pt-table-checksum
- pt-table-checksum使用说明
- pt-table-checksum
- pt-table-checksum
- pt-table-checksum安装
- pt-table-checksum 使用方法
- mysql主从一致性检查以及修复(pt-table-checksum和pt-table-sync工具)
- pt-table-checksum 中文使用说明
- Android之四大组件之一-Service(二)
- 简单选择排序
- Python - 编码转换
- MFC Doc/View结构实现ActiveX控件
- 2016春季练习——水题
- mysql checksum table golang
- java常用容器总结
- 代码:编写一个简单的字符设备驱动(自动创建设备文件)
- 按之字形顺序打印二叉树
- Android TouchEvent事件传递机制
- BSP-Apache HAMA-Graph运行(2)
- Selenium Grid.
- html5 网页全屏显示
- Multisim12.0 安装、破解教程详细图解____本人备注