Databases 5 min read

How GitHub Upgraded 1,200 MySQL Servers to 8.0 Without Downtime

GitHub migrated over 1,200 MySQL hosts to version 8.0 through a staged, zero‑downtime process, detailing infrastructure scale, tooling, and five upgrade steps, while also highlighting new Java architecture video courses for developers.

Java High-Performance Architecture
Java High-Performance Architecture
Java High-Performance Architecture
How GitHub Upgraded 1,200 MySQL Servers to 8.0 Without Downtime

GitHub’s MySQL Upgrade Experience

GitHub recently shared how they upgraded the underlying database of GitHub.com to MySQL 8.0.

GitHub stores massive relational data in MySQL, and upgrading a cluster of over 1,200 MySQL hosts without impacting Service Level Objectives was a significant challenge.

The planning, testing, and execution of the upgrade took more than a year and required collaboration across multiple internal teams.

GitHub’s MySQL Infrastructure Overview

More than 1,200 hosts, including Azure virtual machines and bare‑metal servers.

Over 300 TB of data stored, handling 5.5 million queries per second across 50+ database clusters.

Each cluster configured with primary‑replica high availability.

Partitioned storage using horizontal and vertical sharding, plus Vitess clusters for large‑domain workloads.

A rich tooling ecosystem: Percona Toolkit, gh‑ost, orchestrator, freno, and internal automation tools.

Because both MySQL 5.7 and 8.0 needed to be operated simultaneously, GitHub’s tools and automation had to support mixed‑version compatibility and the new, changed, or deprecated syntax between the versions.

To meet availability standards, the team adopted a phased upgrade strategy that allowed checkpoints and rollbacks.

Upgrade Plan

Step 1: Upgrade rolling replica

Step 2: Upgrade replication topology

Step 3: Promote MySQL 8.0 hosts to primary cluster

Step 4: Upgrade internal instance types

Step 5: Cleanup

After confirming the clusters are stable on MySQL 8.0, the 5.7 servers are decommissioned, and verification runs for at least a full 24‑hour traffic cycle to ensure no issues during peak load.

The upgrade was driven by MySQL 5.7 reaching end‑of‑life, and the new version provides security patches, bug fixes, performance improvements, and features such as instant DDL, invisible indexes, and compressed binary logs.

For detailed technical information see the GitHub blog post.

high availabilityMySQLGitHubDatabase MigrationScaling
Java High-Performance Architecture
Written by

Java High-Performance Architecture

Sharing Java development articles and resources, including SSM architecture and the Spring ecosystem (Spring Boot, Spring Cloud, MyBatis, Dubbo, Docker), Zookeeper, Redis, architecture design, microservices, message queues, Git, etc.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.