golang中连接mysql数据库

golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现

一般连接mysql首先需要调用sql.Open函数,但是此时并没有真正的去连接mysql,而是只创建了一个Db的对象而已。当执行Query或者是Exec方法时,才会去真正的连接数据库。

默认情况下。每次执行sql语句,都会创建一条tcp连接,执行结束就会断掉连接,但是会保留两条连接闲置。当下次再执行 sql时,先用闲置的连接,不够的时候再去创建连接。

当设置了Db类下的这两个参数,就可以真正的实现连接池了。

db.SetMaxOpenConns(10)
db.SetMaxIdleConns(5)

SetMaxOpenConns(10)是设置的最大连接数,也就是甭管你多少并发,只能最多创建10条tcp连接,还有要注意的一点是,当执行完sql,连接转移到rows对象上,如果rows不关闭,这条连接不会被放回池里,其他并发获取不到连接会被阻塞住。
SetMaxIdleConns(5)是设置的执行完闲置的连接,这些就算是执行结束了sql语句还是会保留着的

测试的流程是这样的,首先在代码中并发100次执行sql,开一个窗口不停的netstat查看3306端口看tcp连接的情况,可以看到最大就10条tcp连接,执行完后会有5条连接保持住,开一个窗口看tcpdump中3306端口的数据请求情况,在闲置连接的时候,会每10秒传递数据给mysql,使得闲置连接保持住。

mysqlClient.go

先要拉取一下github包,go get github.com/go-sql-driver/mysql

package main

import (
  "database/sql"
  "fmt"
  "time"

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

func main() {
  db, _ := sql.Open("mysql", "root:123456@tcp(127.0.0.1:3306)/gocron")
  db.SetMaxOpenConns(10)
  db.SetMaxIdleConns(5)
  //连接数据库查询
  for i := 0; i < 100; i++ {
    go func(i int) {
      mSql := "select * from user"
      rows, _ := db.Query(mSql)
      rows.Close() //这里如果不释放连接到池里,执行5次后其他并发就会阻塞
      fmt.Println("第 ", i)
    }(i)

  }

  for {
    time.Sleep(time.Second)
  }
}

开一个窗口不停的netstat

while true;do clear;date;netstat -altupn|grep 3306|grep Client;sleep 1;done

开一个窗口tcpdump看闲置连接的请求情况,每隔15秒请求一次数据

tcpdump -i lo port 3306 -vv

以上就是golang中连接mysql数据库的详细内容,更多关于golang 连接mysql数据库的资料请关注我们其它相关文章!

(0)

相关推荐

  • Golang操作MySql数据库的完整步骤记录

    前言 MySQL是业界常用的关系型数据库,在平时开发中会经常与MySql数据库打交道,所以在接下来将介绍怎么使用Go语言操作MySql数据库. 下载MySql连接驱动 Go语言中的database/sql包提供了保证SQL或类SQL数据库的泛用接口,并不提供具体的数据库驱动.使用database/sql包时必须注入(至少)一个数据库驱动. 我们常用的数据库基本上都有完整的第三方实现.比如:MySQL驱动 **下载依赖** go get -u github.com/go-sql-driver/my

  • Golang中如何对MySQL进行操作详解

    前言 Golang官方并没有提供数据库驱动,但通过database/sql/driver包来提供了实现驱动的标准接口.可以在Github上找到很多开源的驱动. 其中go-sql-driver/mysql是一个比较推荐的驱动,其完全支持database/sql接口. 使用这个驱动, 在项目里import进: import ( "database/sql" _ "github.com/go-sql-driver/mysql" ) 在正式使用database/sql包之前

  • golang操作连接数据库实现mysql事务示例

    目录 mysql驱动 posgre驱动 连接postgres 连接mysql 初始化连接 SetMaxOpenConns SetMaxIdleConns CRUD 查询 单行查询QueryRow 多行查询Query-rows 插入和更新和删除Exec 影响的行数 插入 更新 删除 MySQL预处理 为什么要预处理? Go实现MySQL预处理 SQL注入问题 Go实现MySQL事务 什么是事务? 事务的ACID 事务相关方法 事务示例 MySQL是业界常用的关系型数据库,本文介绍了database

  • golang 通过ssh代理连接mysql的操作

    我就废话不多说了,大家还是直接看代码吧~ package main import ( "bytes" "context" "database/sql" "errors" "fmt" "github.com/go-sql-driver/mysql" "golang.org/x/crypto/ssh" "io" "io/ioutil"

  • 在golang中操作mysql数据库的实现代码

    前言 Golang 提供了database/sql包用于对SQL数据库的访问, 作为操作数据库的入口对象sql.DB, 主要为我们提供了两个重要的功能: •sql.DB 通过数据库驱动为我们提供管理底层数据库连接的打开和关闭操作. •sql.DB 为我们管理数据库连接池 需要注意的是,sql.DB表示操作数据库的抽象访问接口,而非一个数据库连接对象;它可以根据driver打开关闭数据库连接,管理连接池.正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用.所以,如果你没有把连接释放回连接池,

  • golang实现mysql数据库备份的操作方法

    背景 navicat是mysql可视化工具中最棒的,但是,在处理视图的导入导出方面,它是按照视图名称的字母顺序来处理的,若视图存在依赖,在导入过程中就会报错.前面已经用python写了一个,但在使用过程中,遇到xfffd编码,python的pymysql会直接崩溃.发现golang没有这个问题,正好用go重写,来熟悉golang. 一些关键点 map & json,在处理主键与外键信息时,需要用到json数据结构来存储中间结果,因为要灵活处理,在golang中只能用map[string]inte

  • golang中连接mysql数据库

    golang中连接mysql数据库,需要使用一个第三方类库github.com/go-sql-driver/mysql,在这个类库中就实现了mysql的连接池,并且只需要设置两个参数就可以实现 一般连接mysql首先需要调用sql.Open函数,但是此时并没有真正的去连接mysql,而是只创建了一个Db的对象而已.当执行Query或者是Exec方法时,才会去真正的连接数据库. 默认情况下.每次执行sql语句,都会创建一条tcp连接,执行结束就会断掉连接,但是会保留两条连接闲置.当下次再执行 sq

  • 在ASP中连接MySQL数据库的方法,最好的通过ODBC方法

    折腾了一阵,总算把ASP和MySQL连接完成了,有感,特写此文与大家一同分享. 查了很多资料,ASP和MySQL连接目前有两种办法:一个是使用组件,比较有名是MySQLX,可惜要99美元.二就是使用MyODBC 来连接,下面我们 就来看看第二种方式. 试验的平台: MySQL 4.0 For RadHat Linux (也可以使用for windows)  Windows 2003 standard Edition Windows XP English 一.安装MyODBC 1.访问网站 www

  • 在ASP中连接MySQL数据库,最好的通过ODBC方法

    折腾了一阵,总算把ASP和MySQL连接完成了,有感,特写此文与大家一同分享. 查了很多资料,ASP和MySQL连接目前有两种办法:一个是使用组件,比较有名是MySQLX,可惜要99美元.二就是使用MyODBC 来连接,下面我们 就来看看第二种方式. 试验的平台: MySQL 4.0 For RadHat Linux (也可以使用for windows) Windows 2003 standard Edition Windows XP English 一.安装MyODBC 1.访问网站 www.

  • myeclipse中连接mysql数据库示例代码

    1. 环境配置 下载地址:http://www.mysql.com/downloads/mysql/ 真麻烦,下载的话还需要注册和登录以及填个表.上面的信息还挺全的,乱填的信息也是可以接受的~~ 下载后按提示安装即可,最后设置登录mysql用的密码.安装完成后,测试连接数据库.在开始-程序中点击MYSQL5.5 Command Line cilent,输入刚才设定的密码后,应该后就能连上mysql服务器了. 在安装后的软件包中,mysql_server\Connector J XXXX中可以找到

  • pycharm中连接mysql数据库的步骤详解

    前言 最近在新的环境配置pycharm的项目时候,发现pycharm不能连接到mysql数据库.由于安了java环境但是还没配置相关的库,并且jetbrains家的IDE一般都是java写的,于是猜想可能是java缺少mysql的驱动.所以就动手起来,总算是成功了,所以将过程分享出来给大家,需要的朋友们一起来学习学习. 一.先确保python能正常连接到数据库 可以如下图测试,如果无报错,说明正常连接到了数据库 如果有报错,可能是缺少MySQLdb包 先去下载MYSQLdb 官方下载:MySQL

  • SpringBoot连接MYSQL数据库并使用JPA进行操作

    今天给大家介绍一下如何SpringBoot中连接Mysql数据库,并使用JPA进行数据库的相关操作. 步骤一:在pom.xml文件中添加MYSQl和JPA的相关Jar包依赖,具体添加位置在dependencies中,具体添加的内容如下所示. <!--数据库相关配置--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-

  • MyEclipse连接MySQL数据库报错解决办法

    我们现在一般网站都是利用的MySQL数据库搭建网站的,但是在网上看到很多网友吐槽数据库连接不上的问题,现在我就结合相关资料向提出一些我个人的见解,希望对大家解决问题有帮助. 一般MySQL连接不上,可能有两大原因:1.MyEclipse配置错误 2.MySQL配置不当. 一.我们一般的连接步骤如下: 1.在MyEclipse中连接MySQL数据库:依次点击window-->show view-->other-->MyEclipse Database-->DB Browser 图一:

  • pycharm工具连接mysql数据库失败问题

    在使用pycharm开发工具连接mysql数据库时提示错误,信息如下: Server returns invalid timezone. Go to 'Advanced' tab and set 'serverTimezone' property manually 提示信息返回无效的时区,这是由于MySQL默认的时区是UTC时区,比北京时间晚8个小时. 解决的方法是修改mysql时区的时长,连接上mysql后,操作命令如下: set global time_zone='+8:00'; 但可能这样

  • golang连接mysql数据库操作使用示例

    目录 安装 连接数据库 处理类型(Handle Types) 建表 Exec使用 Exec增删该示例 sql预声明(Prepared Statements) Query Queryx QueryRow和QueryRowx Get 和Select(非常常用) 事务(Transactions) 连接池设置 案例使用 golang操作mysql 安装 go get "github.com/go-sql-driver/mysql" go get "github.com/jmoiron

随机推荐