Databases 5 min read

How GitHub Upgraded Its 1200‑Node MySQL Cluster to 8.0 Without Downtime

GitHub detailed its year‑long, multi‑team effort to seamlessly upgrade over 1,200 MySQL servers—supporting more than 300 TB of data and 5.5 million queries per second—from 5.7 to 8.0, outlining the infrastructure, tools, and step‑by‑step migration strategy used to maintain service reliability.

Programmer DD
Programmer DD
Programmer DD
How GitHub Upgraded Its 1200‑Node MySQL Cluster to 8.0 Without Downtime

GitHub recently shared its experience of seamlessly upgrading the underlying MySQL database of GitHub.com to MySQL 8.0.

GitHub stores massive relational data in MySQL; upgrading a fleet of more than 1,200 MySQL hosts without affecting the site’s Service Level Objectives was a complex task that required a year‑long planning, testing, and cross‑team collaboration.

GitHub’s MySQL infrastructure overview

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

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

Each cluster is configured for high availability with primary‑replica setups.

Data is sharded both horizontally and vertically; large‑domain workloads use Vitess clusters for horizontal scaling beyond single‑master MySQL limits.

A rich tooling ecosystem comprising Percona Toolkit, gh‑ost, Orchestrator, Freno, and internal automation for host‑cluster operations.

Because both MySQL 5.7 and 8.0 needed to run concurrently, GitHub’s tools and automation had to support mixed‑version environments and handle new, changed, or deprecated syntax between the versions.

To meet availability requirements, GitHub adopted a phased upgrade strategy with checkpoints and rollback capabilities. The plan consisted of the following steps:

Step 1 – Upgrade rolling replicas

Step 2 – Upgrade replication topology

Step 3 – Promote MySQL 8.0 hosts to primary clusters

Step 4 – Upgrade internal instance types

Step 5 – Cleanup

After confirming that clusters no longer need rollback and have successfully upgraded to MySQL 8.0, the remaining MySQL 5.7 servers are decommissioned. Validation runs for at least a full 24‑hour traffic cycle to ensure no issues during peak load.

The upgrade was driven by the impending end‑of‑life of MySQL 5.7 and the desire to obtain newer security patches, bug fixes, and performance improvements. GitHub also aims to leverage MySQL 8.0 features such as instant DDL, invisible indexes, and compressed binary logs.

For full technical details, see the original GitHub blog post: https://github.blog/2023-12-07-upgrading-github-com-to-mysql-8-0/

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

mysqlGitHubdatabase migrationscaling
Programmer DD
Written by

Programmer DD

A tinkering programmer and author of "Spring Cloud Microservices in Action"

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.