存档

文章标签 ‘Go’

LBOMP – MySQL单机备份监控工具

2012年11月28日 谭俊青 2 条评论

之前的DMB系统,因为一直没有放出linux版本,使用范围比较窄。

这次应朋友们的要求,计划推出for linux单机版,暂时命名为LBOMP,现截图一张先睹为快。

后续推出的工具/系统 有:

MySQL多线程复制外挂
MySQL多主一从外挂
MySQL读写分离代理(这儿发布过
MySQL健康检查及高可用组件
大规模MySQL集中管理平台

分类: MySQL 标签: , ,

Go(golang) FastCGI Client

2012年6月1日 谭俊青 2 条评论

最近用Go语言写给legendbase.com写网站的时候实现了个MVC框架,原理是根据uri请求,用reflect方法找到相应的controller跟method,然后执行之.当没有找到就根据uri后缀是否是php,如果是则调用fastcig-client执行配置目录下的php文件.如果再没有就写404错误. Go语言官方package没有client的实现,于是花了点功夫实现了个,开源出来,给需要的朋友节省点时间.

地址: http://code.google.com/p/go-fastcgi-client/

使用示例: 

func main() {

        reqParams := "name=value"

        env := make(map[string]string)
        env["REQUEST_METHOD"] = "GET"
        env["SCRIPT_FILENAME"] = "/Users/ivan/work/test/fcgi/test.php"
        env["SERVER_SOFTWARE"] = "go / fcgiclient "
        env["REMOTE_ADDR"] = "127.0.0.1"
        env["SERVER_PROTOCOL"] = "HTTP/1.1"
        env["QUERY_STRING"] = reqParams

        fcgi, err := fcgiclient.New("127.0.0.1", 9000)
        if err != nil {
                fmt.Printf("err: %v", err)
        }

        content, err := fcgi.Request(env, reqParams)
        if err != nil {
                fmt.Printf("err: %v", err)
        }

        fmt.Printf("content: %s", content)
}
 

分类: Go 标签: ,

MySQL driver(驱动) liblbmysql for Go1

2012年5月24日 谭俊青 1 条评论

Go语言1.0出来之后,原来可用的MySQL驱动在新版本上基本不可用了,于是这几天自己写了个简单的MySQL的驱动,暂不支持prepare,没有implement sql/driver. 或许有能用的上的朋友,所以分享出来. 先介绍用法,后面提供下载链接.
先直接上例子

package main

import (
        "log"
        "liblbmysql"
)

func main() {
        settings := make(map[string]interface{})

        settings["host"] = "localhost"
        settings["port"] = 3306
        settings["uname"] = "ivan"
        settings["pass"] = "******"
        settings["dbname"] = "test"
        settings["charset"] = "utf8"
       
        conn, err := liblbmysql.Connect(settings)
        if err != nil {
                log.Fatal("Connect to MySQL error: %v", err)
        }

        var qr *liblbmysql.QueryResult

        qr, err = conn.ExecuteFetch("select * from ivan")
        if err != nil {
                log.Printf("query error: %v", err)
        } else {
                for {
                        m := qr.FetchMap()
                        if m != nil {
                                log.Printf("row map: %v\n", m)
                        } else {
                                break
                        }
                }
        }
        qr.Free()
        conn.Close()
}
 

【阅读全文·MySQL实验室】

分类: Go, MySQL 标签: ,

daemon function for Go language(golang)(fixed for mac/darwin)

2011年12月1日 谭俊青 2 条评论
/* ivan(a.t)mysqlab.net */

package main

import (
        "syscall"
        "os"
        "log"
)

func daemon(nochdir, noclose int) int {
        var ret, ret2 uintptr
        var err uintptr

        darwin := syscall.OS == "darwin"

        // already a daemon
        if syscall.Getppid() == 1 {
                return 0
        }

        // fork off the parent process
        ret, ret2, err = syscall.RawSyscall(syscall.SYS_FORK, 0, 0, 0)
        if err != 0 {
                return -1
        }

        // failure
        if ret2 < 0 {
                os.Exit(-1)
        }

        // handle exception for darwin
        if darwin && ret2 == 1 {
                ret = 0
        }

        // if we got a good PID, then we call exit the parent process.
        if ret > 0 {
                os.Exit(0)
        }

        /* Change the file mode mask */
        _ = syscall.Umask(0)

        // create a new SID for the child process
        s_ret, s_errno := syscall.Setsid()
        if s_errno != 0 {
                log.Printf("Error: syscall.Setsid errno: %d", s_errno)
        }
        if s_ret < 0 {
                return -1
        }

        if nochdir == 0 {
                os.Chdir("/")
        }

        if noclose == 0 {
                f, e := os.OpenFile("/dev/null", os.O_RDWR, 0)
                if e == nil {
                        fd := f.Fd()
                        syscall.Dup2(fd, os.Stdin.Fd())
                        syscall.Dup2(fd, os.Stdout.Fd())
                        syscall.Dup2(fd, os.Stderr.Fd())
                }
        }

        return 0
}
// usage example: daemon(0, 0)
 

参考:http://code.google.com/p/go/issues/detail?id=227

分类: Go 标签: , ,