Go-MySQL-Driver

A pure Go implementation of the MySQL wire protocol, used as the database/sql driver for MySQL, MariaDB, and TiDB.

Library
Go
vv1.10.1
15,275 stars
Mozilla Public License 2.0

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
85 /100 Excellent
Development Activity 84
Maintenance 64
Community 92
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
83 /100 Excellent
Architecture 85
Code Quality 90
Innovation 75
Learning Curve 80

Go-MySQL-Driver implements Go’s database/sql/driver interface entirely in Go, with no cgo or C bindings, so it cross-compiles cleanly and runs anywhere the Go toolchain does. Importing it for its side effect registers a mysql driver with database/sql, after which the standard library’s connection pooling, prepared statements, and query APIs work against MySQL, MariaDB, or TiDB without any driver-specific code in the caller.

Beyond the baseline driver contract, it handles the practical edges of talking to a real MySQL server: TLS negotiation, zlib compression, LOAD DATA LOCAL INFILE with an explicit file allowlist, automatic reconnection on broken connections, and full context.Context support for cancellation and timeouts. Configuration is driven by a DSN string or a typed Config struct, both parsed and validated the same way, so applications can choose whichever fits their setup.

What You Get

  • A database/sql/driver implementation registered under the mysql driver name via a blank import
  • DSN parsing and a typed Config/FormatDSN API for building connection strings programmatically
  • TLS support, including custom tls.Config registration for verified or self-signed certificates
  • Optional zlib connection compression and pluggable custom dial functions via RegisterDialContext
  • Context-aware query cancellation and configurable read/write timeouts
  • Secure LOAD DATA LOCAL INFILE support with explicit file and reader allowlisting

Common Use Cases

  • Backing a Go web service’s database/sql connection pool with a MySQL or MariaDB database
  • Connecting to TiDB, which speaks the MySQL wire protocol, for horizontally scaled workloads
  • Streaming large result sets or bulk-loading data via LOAD DATA LOCAL INFILE from an io.Reader
  • Using sql.RawBytes and prepared statements to move large payloads without excess allocation

Under The Hood

Architecture

The driver is a flat, single-package implementation of Go’s database/sql/driver interfaces (driver.go, connector.go, connection.go, statement.go, transaction.go, rows.go). MySQLDriver.Open/OpenConnector parse a DSN into a Config and hand it to an internal connector, whose Connect method performs the handshake and returns a mysqlConn that owns the network connection, protocol buffer, and per-connection state (capability flags, sequence numbers, compression). packets.go implements the wire protocol framing and packet types on top of a small buffer abstraction, and auth.go isolates the various MySQL authentication plugins (native password, caching_sha2, cleartext) behind a common negotiation path. This keeps protocol concerns, connection lifecycle, and the database/sql adapter surface in clearly separate files despite the single-package layout, so a change to authentication or packet framing doesn’t ripple into the sql.driver glue code.

Tech Stack

The module targets Go 1.24+ and declares exactly one external dependency, filippo.io/edwards25519, used for Ed25519 curve arithmetic in newer MySQL authentication plugins — everything else, including TCP/TLS handling, zlib compression, and DSN parsing, is implemented with the Go standard library (net, crypto/tls, compress/zlib, context). There is no ORM or query-builder layer; the driver operates purely at the database/sql/driver boundary, so any Go code using database/sql gets MySQL/MariaDB/TiDB connectivity by importing the package for its side effect and calling sql.Open("mysql", dsn).

Code Quality

The repository ships 14 _test.go files with roughly 167 test functions, including fuzz tests for DSN parsing (dsn_fuzz_test.go) and a benchmark suite, exercised in CI against a real matrix of MySQL (5.7 through 9.0) and MariaDB (10.5 through 12.3 LTS) versions across three Go releases and three operating systems. A dedicated lint job runs staticcheck on every push and pull request. Errors are exposed as typed sentinel values (ErrInvalidConn, ErrPktTooLarge, etc.) and a MySQLError type carrying the server’s numeric code and SQLSTATE, rather than opaque strings, and connection-layer failures are explicitly funneled through markBadConn so database/sql knows to retry on a fresh connection instead of silently reusing a broken one.

What Makes It Unique

Unlike drivers that wrap a C client library via cgo, this is a from-scratch reimplementation of the MySQL wire protocol in pure Go, which is what lets it cross-compile to any Go-supported platform without a C toolchain or shared library at runtime. It also treats operational safety as a first-class concern rather than an afterthought — LOAD DATA LOCAL INFILE, a feature that has been a source of real-world SQL injection and file-disclosure vulnerabilities in other drivers, requires callers to explicitly allowlist file paths or register an io.Reader, closing off the class of exploit where a malicious server or query could read arbitrary client-side files.

Used by 33 apps in this directory

Go
51%
MIT

Fathom Lite

Analytics

8,019

A simple, self-hosted website analytics tool built with Go and Preact that lets you understand your traffic without handing data to third parties.

View details
47
Repo Health
67
Technical
67
Dependency
Built with
Go 51%
JavaScript 31%
CSS 15%
Updated 7 months ago
Go
52%
AGPL 3.0

Filestash

File Storage

14,824

A self-hosted file management platform that unifies access to S3, SFTP, SMB, FTP, WebDAV, NFS, Git, SharePoint, and 20+ other storage backends through a single extensible web interface.

View details
79
Repo Health
67
Technical
67
Dependency
Built with
Go 52%
JavaScript 34%
Updated 1 weeks ago
Go
83%
MIT

Gitea

Developer Tools · Devops · Project Management

58,668

Self-hosted DevOps in a single Go binary — Git hosting, GitHub Actions-compatible CI/CD, and 30+ package registries without any SaaS dependency.

View details
93
Repo Health
79
Technical
64
Dependency
Built with
Go 83%
Updated 6 days ago
TypeScript
47%
AGPL 3.0

Grafana

Analytics · Monitoring

77,469

The open-source observability platform that unifies metrics, logs, and traces from any data source into dynamic, queryable dashboards.

View details
95
Repo Health
91
Technical
63
Dependency
Built with
TypeScript 47%
Go 47%
Updated 6 days ago
Go
69%
Other

Hanko

Authentication · Security

9,045

Open source, self-hostable authentication platform with passkeys, SAML SSO, and OAuth — the privacy-first alternative to Auth0 and Clerk.

View details
90
Repo Health
81
Technical
66
Dependency
Built with
Go 69%
TypeScript 27%
Updated 1 weeks ago
Go
69%
MIT

hoop

Monitoring · Security

836

A wire-protocol gateway that enforces data masking, command blocking, approval workflows, and full session recording for engineers and AI agents accessing production infrastructure.

View details
86
Repo Health
80
Technical
64
Dependency
Built with
Go 69%
Clojure 13%
Updated 6 days ago
TypeScript
66%
MIT

Jitsu

Data Engineering

5,110

Open-source, fully-scriptable data ingestion engine that streams events from web, apps, and APIs to any data warehouse in real time.

View details
89
Repo Health
79
Technical
66
Dependency
Built with
TypeScript 66%
Go 32%
Updated 1 weeks ago
TypeScript
44%
Other

Magic

AI Agents · Automation · Low Code Platforms

5,055

Magic is an enterprise-grade open-source AI agent platform combining a generalist AI agent, workflow engine, IM, and collaborative office system for running an AI-powered digital workforce.

View details
68
Repo Health
79
Technical
65
Dependency
Built with
TypeScript 44%
PHP 32%
Updated 2 months ago
C++
77%
GPL 3.0

Manticore Search

Search

12,067

An open-source, C++ search database positioned as a faster, lighter alternative to Elasticsearch — supporting full-text, SQL, JSON, and vector/embedding search over a MySQL-compatible protocol.

View details
91
Repo Health
70
Technical
78
Dependency
Built with
C++ 77%
Updated 6 days ago

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers