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
53%
MIT

memos

Note Taking

64,031

Open-source, self-hosted note-taking built for quick capture — Markdown-native, lightweight, and fully yours.

View details
91
Repo Health
78
Technical
65
Dependency
Built with
Go 53%
TypeScript 46%
Updated 6 days ago
Go
99%
AGPL 3.0

MinIO

File Storage

61,301

High-performance, S3-compatible object storage built for AI/ML and analytics workloads — run it anywhere from a laptop to a petabyte-scale cluster.

View details
58
Repo Health
85
Technical
65
Dependency
Built with
Go 99%
Updated 6 months ago
Go
48%
GPL 3.0

Netdata

Devops · Monitoring

81,111

Real-time per-second metrics, ML-powered anomaly detection, and zero-config observability for any infrastructure.

View details
93
Repo Health
86
Technical
70
Dependency
Built with
Go 48%
C 29%
Rust 15%
Updated 6 days ago
Go
98%
Apache 2.0

Nightingale

Monitoring

13,383

Open-source alerting engine that connects to any time-series or log data source and routes alarms to 20+ notification channels with AI-assisted triage.

View details
95
Repo Health
77
Technical
67
Dependency
Built with
Go 98%
Updated 1 weeks ago
Python
39%
Apache 2.0

OpenSandbox

Developer Tools · Security

16,116

Secure, fast, and extensible sandbox runtime for AI agents with multi-language SDKs and Docker/Kubernetes runtimes.

View details
85
Repo Health
81
Technical
70
Dependency
Built with
Python 39%
Go 36%
Updated 6 days ago
Go
91%
Apache 2.0

Ory Kratos

Authentication

13,933

API-first identity and user management that handles login, registration, MFA, and recovery so your application never has to.

View details
69
Repo Health
78
Technical
65
Dependency
Built with
Go 91%
Updated 3 months ago
Go
40%
Apache 2.0

Rill

Analytics · Data Engineering

2,962

The fastest BI tool for humans and agents — define metrics, models, and dashboards as code and query them instantly on ClickHouse or DuckDB.

View details
88
Repo Health
88
Technical
64
Dependency
Built with
Go 40%
TypeScript 38%
Svelte 21%
Updated 6 days ago
Go
79%
MIT

seonaut

Developer Tools · Marketing

828

Self-hosted SEO auditing that crawls your entire website and surfaces critical issues — broken links, duplicate meta tags, redirect loops, and more — before they hurt your rankings.

View details
57
Repo Health
77
Technical
67
Dependency
Built with
Go 79%
HTML 17%
Updated 3 weeks ago
Go
98%
Apache 2.0

Space Cloud

Authentication · Devops

4,003

Kubernetes-native serverless platform that generates instant GraphQL and REST APIs for any database with built-in auth and real-time subscriptions

View details
50
Repo Health
74
Technical
63
Dependency
Built with
Go 98%
Updated 2 years 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