{"id":34264,"date":"2026-07-17T07:12:12","date_gmt":"2026-07-17T14:12:12","guid":{"rendered":"https:\/\/www.pingcap.com\/?p=34264"},"modified":"2026-07-17T11:27:55","modified_gmt":"2026-07-17T18:27:55","slug":"bolt-mysql-migration-tidb","status":"publish","type":"post","link":"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/","title":{"rendered":"From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB"},"content":{"rendered":"<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Key_Takeaways\"><\/span>Key Takeaways<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Beyond a terabyte per table, MySQL hits an operational ceiling: week-long schema changes, single-threaded backups, and vertical-only write scaling.<\/li>\n\n\n\n<li>Sharding proxies just relocate the problem. Bolt ran Vitess and walked away; a natively distributed database shards below the SQL layer, invisibly to developers.<\/li>\n\n\n\n<li>On TiDB, a schema change that took over a week on MySQL runs in <a href=\"https:\/\/www.pingcap.com\/ko\/case-study\/bolt-modernizing-mysql-tidb-scale-thousands-microservices-aws\/\">22 minutes<\/a>, and a 60 TB backup takes 75 minutes.<\/li>\n\n\n\n<li>Query mirroring before cutover let Bolt migrate with a 10\u201320 second write pause and zero rollbacks; 90% of its schemas now run on TiDB, the default for every new microservice.<\/li>\n<\/ul>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">When a table crosses one terabyte, MySQL does not fail. It just starts charging for everything. A single index change takes over a week, blocks every other change queued behind it on the cluster, and demands a full shadow copy of the table just to run. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">At <a href=\"https:\/\/bolt.eu\/en\/\">Bolt<\/a>, whose ride-hailing, micromobility, delivery, and car rental businesses now serve more than 200 million users across Europe, Africa, and beyond, those costs were compounding across hundreds of terabytes of data and thousands of microservices on AWS. At TiDB SCaiLE Europe 2026 in Stockholm, Leandro Morgado, Senior Database Reliability Engineer at Bolt, walked through the three-to-four-year journey from MySQL to TiDB, and where it stands today: 90 percent migrated, with TiDB as the default database for everything new.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The session was the practitioner counterpart to&nbsp;<a href=\"\/ko\/LINK-TO-KEYNOTE-RECAP-WHEN-LIVE\/\">Ed Huang&#8217;s keynote<\/a>&nbsp;that preceded it. Where the keynote argued about where infrastructure is heading, this talk showed what running it looks like: the pain that forced the move, the alternatives that failed, the migration playbook, and the numbers after.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Bolt_Outgrew_MySQL\"><\/span>Why Bolt Outgrew MySQL<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Growth is a good problem that breaks databases. More users mean more data and more queries, and MySQL punishes both past a certain size. Bolt hit that size across four fronts:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Schema changes stopped scaling.<\/strong> Bolt&#8217;s developers ship dozens of table changes per day. On tables past a terabyte, an online change meant copying the entire table to a shadow copy, requiring equal free space, then dropping the old one\u2014stalling InnoDB on multi-terabyte tables. One change on a loaded cluster took about a week, and only one could run per cluster, so every other team&#8217;s work piled up behind it.<\/li>\n\n\n\n<li><strong>Backups became a single-threaded bottleneck.<\/strong> S3 scales; a single MySQL instance does not. As tables grew past a terabyte, backup and restore times stretched, and recovery time objectives stretched with them.<\/li>\n\n\n\n<li><strong>Write scaling only went up, never out.<\/strong> Read replicas solve read scaling, but MySQL&#8217;s single-master design means write capacity grows only through bigger instances, at costs that rise faster than performance\u2014sometimes triple the price for double the throughput, until there&#8217;s no bigger instance to buy. Every scale-up meant a master switchover, and every failover meant downtime users could notice.<\/li>\n\n\n\n<li><strong>Storage costs multiplied with every copy.<\/strong> Each replica carries the full dataset: one for reads, one for backups, one for feeding Kafka through binlog servers. Archiving depended on external tooling like pt-archiver that was easy to forget until tables were too large, reclaiming deleted space meant rebuilding tables, and compression was opt-in.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The usual answer is sharding: split the database and parallelize the writes. But sharding logic in the application layer is a project developers don&#8217;t want to own. They want to ship features, not manage where data lives or how cross-shard joins resolve.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"683\" src=\"https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-1024x683.jpg\" alt=\"\" class=\"wp-image-34288\" srcset=\"https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-1024x683.jpg 1024w, https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-300x200.jpg 300w, https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-768x512.jpg 768w, https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-1536x1024.jpg 1536w, https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-2048x1365.jpg 2048w, https:\/\/static.pingcap.com\/files\/2026\/07\/17111123\/DSC4844-1-18x12.jpg 18w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\"><em>Leandro Morgado, Senior Database Reliability Engineer at Bolt, presenting at TiDB SCaiLE Europe 2026<\/em><\/figcaption><\/figure>\n<\/div>\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Why_Bolt_Chose_TiDB_Over_Vitess_CockroachDB_and_YugabyteDB\"><\/span>Why Bolt Chose TiDB Over Vitess, CockroachDB, and YugabyteDB<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bolt is a MySQL shop, and that constraint did most of the filtering. CockroachDB and YugabyteDB are natively distributed but speak the Postgres protocol, so adopting either meant a codebase rewrite the team had no appetite for. TiDB at version 3 looked too early for Bolt&#8217;s production bar. That left Vitess, the sharding proxy proven at YouTube and Slack.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Bolt ran a Vitess proof of concept, then ran it in production for a few months before walking away. MySQL-style grants and revokes were unsupported, DDLs could complete on one shard and fail on another, leaving shards out of sync, and rebalancing was manual. By then TiDB had reached version 5, with stability and documentation to match, and Bolt gave it another look.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three properties decided it:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Sharding below the SQL layer.<\/strong> TiDB splits data into Regions, replicated three ways through Raft across TiKV nodes. Developers never specify a sharding key or learn where their data lives. The failure mode that ended the Vitess experiment does not exist.<\/li>\n\n\n\n<li><strong>Storage and compute decoupled.<\/strong> Bolt often needs more compute while storage sits idle. With MySQL, scaling one meant paying for both. TiDB scales each layer independently, and Bolt runs it on ARM instances where MySQL ran on x86.<\/li>\n\n\n\n<li><strong>MySQL compatibility that survived contact.<\/strong> A few incompatibilities exist around auto increments and character sets, and early versions only migrated from MySQL 5.7, since extended to 8.0. But the codebase did not change\u2014the adoption test that matters.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">The supporting cast sealed it: <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/ticdc-overview\/\">TiCDC<\/a> as a drop-in Debezium replacement kept the Kafka pipeline to the data lake intact and won over the data team, the <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/backup-and-restore-overview\/\">BR tool<\/a> parallelizes backups across every TiKV node, and monitoring shipped built in with TiDB Dashboard and Grafana where Vitess required building alerting from scratch. TiUP manages the EC2 clusters with single commands, TiUP Playground gives developers a full local cluster on a laptop, and PingCAP support has turned bugs into fixes and urgent cases into hot patches.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"How_Bolt_Migrates_a_Schema_With_20_Seconds_of_Write_Pause\"><\/span>How Bolt Migrates a Schema With 20 Seconds of Write Pause<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bolt&#8217;s first migration was actually off Vitess; everything since has been from MySQL, one schema at a time, and the playbook has not needed its own fallback plan once. Developers validate on a local TiUP Playground, then on a staging TiDB cluster. Once the schema is replicated to production TiDB through DM, the Data Migration tool, Bolt does not cut over immediately.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The step that de-risks everything is query mirroring. ProxySQL, which fronts all of Bolt&#8217;s database traffic, mirrors live production queries from MySQL into TiDB, where the team watches latencies and catches bad query plans while MySQL still serves the traffic. Problems get fixed before the migration instead of during an incident after it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Only when TiDB matches MySQL&#8217;s performance does the live switch happen. An internal tool, DB Migrator, copies database users to TiDB, kills MySQL connections, and repoints ProxySQL, all within seconds. Writes pause for roughly 10 to 20 seconds while reads continue. The last steps swap the Kafka source from Debezium to TiCDC and clean up the old schema. The fallback replication path back to MySQL, built for the first migration, has never been used.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"What_Changed_in_Production\"><\/span>What Changed in Production<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The numbers land hardest against the old pain points. Adding an index to a table over one terabyte, the operation that took more than a week on MySQL, completed in 22 minutes on TiDB, and the <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/tidb-distributed-execution-framework\/\">Distributed eXecution Framework (DXF)<\/a> has made it faster with each version. A 60 TB backup completes in an hour and 15 minutes, reading from all TiKV nodes in parallel, and lands in S3 at 15 TB after compression. Transparent compression at the TiKV level runs at two to three times depending on the data, cutting storage costs by nearly half. And availability stopped being an event: TiDB is multi-master, so when an AWS instance fails, the cluster absorbs it as a two-to-three-second latency blip, the application retries, and nobody declares an outage.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Three features have earned permanent places in the toolkit:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/time-to-live\/\">TTL<\/a>.<\/strong>&nbsp;Tables declare their own retention at creation, and background processes archive anything older. The forgotten pt-archiver problem is now a table property.<\/li>\n\n\n\n<li><strong><a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/sql-statement-flashback-cluster\/\">Flashback<\/a>.<\/strong>&nbsp;During one migration, a schema drop on MySQL replicated into TiDB before replication was killed. Flashback restored the schema in two to three minutes. Anyone who has pressed enter on the wrong DROP knows exactly what that feature is worth.<\/li>\n\n\n\n<li><strong>SQL bindings.<\/strong>&nbsp;When a bad query ships on a Friday and its author is on holiday, bindings force a specific query plan or index without touching the codebase. An emergency tool rather than a standard practice, and invaluable as exactly that.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"Where_Bolt_Is_Now_TiDB_by_Default\"><\/span>Where Bolt Is Now: TiDB by Default<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">90 percent of Bolt&#8217;s schemas run on TiDB, and every new microservice gets TiDB as the default database. The upgrade history tells the maturity story on its own: from version 5.4 at adoption to 8.5.6, the latest GA release, today. The current upgrade wave is about half complete and has already delivered fewer bugs, more stability, and query latencies down 5 to 10 percent.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The work in progress is the kind that only exists at scale: resource controls to stop any one database from starving the cluster, table partitioning for 15 TB tables where even TTL deletion gets expensive, and testing of the new event-based TiCDC architecture that replaces the older design, which lagged on very large changefeeds.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><span class=\"ez-toc-section\" id=\"The_Migration_Is_a_Playbook_Not_a_Leap\"><\/span>The Migration Is a Playbook, Not a Leap<span class=\"ez-toc-section-end\"><\/span><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The pattern in Bolt&#8217;s story is that nothing about it required a leap of faith. Every step was reversible until proven, from query mirroring before cutover to a fallback path that was built once and never used, and every claimed benefit is a number: a week to 22 minutes, 60 TB in 75 minutes, storage costs cut nearly in half, 90 percent migrated. The session closed with the operational case in one sentence.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><em>&#8220;I just sleep better running TiDB than MySQL.&#8221;\u00a0<br><\/em><strong><em>Leandro Morgado, Senior Database Reliability Engineer, Bolt<\/em><\/strong><\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">For teams staring at their own terabyte tables and week-long DDL queues, that is the real takeaway. The path off MySQL at scale is not a rewrite and not a bet. It is a playbook, and Bolt has now run it across 90 percent of a 200-million-user business.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Want to test Bolt&#8217;s claims for yourself? <a href=\"https:\/\/docs.pingcap.com\/tidb\/stable\/quick-start-with-tidb\/\">Spin up a local cluster with TiUP Playground<\/a> and mirror your own queries before you commit to anything.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>When a table crosses one terabyte, MySQL does not fail. It just starts charging for everything. A single index change takes over a week, blocks every other change queued behind it on the cluster, and demands a full shadow copy of the table just to run. At Bolt, whose ride-hailing, micromobility, delivery, and car rental [&hellip;]<\/p>\n","protected":false},"author":275,"featured_media":34265,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[193],"tags":[147,14,389,9,111],"class_list":["post-34264","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-conference","tag-distributed-sql","tag-mysql","tag-online-schema","tag-scalability","tag-tidb"],"acf":[],"featured_image_src":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png","author_info":{"display_name":"M. Nivanya","author_link":"https:\/\/www.pingcap.com\/ko\/blog\/author\/nivanya\/"},"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Bolt&#039;s MySQL to TiDB Migration: SCaiLE Europe 2026<\/title>\n<meta name=\"description\" content=\"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/\" \/>\n<meta property=\"og:locale\" content=\"ko_KR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Bolt&#039;s MySQL to TiDB Migration: SCaiLE Europe 2026\" \/>\n<meta property=\"og:description\" content=\"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/\" \/>\n<meta property=\"og:site_name\" content=\"TiDB\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/facebook.com\/pingcap2015\" \/>\n<meta property=\"article:published_time\" content=\"2026-07-17T14:12:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-07-17T18:27:55+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/static.pingcap.com\/files\/2026\/07\/17070910\/bolt-migration-featured-1800x900-3.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1800\" \/>\n\t<meta property=\"og:image:height\" content=\"900\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"M. Nivanya\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:site\" content=\"@PingCAP\" \/>\n<meta name=\"twitter:label1\" content=\"\uae00\uc4f4\uc774\" \/>\n\t<meta name=\"twitter:data1\" content=\"M. Nivanya\" \/>\n\t<meta name=\"twitter:label2\" content=\"\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04\" \/>\n\t<meta name=\"twitter:data2\" content=\"8\ubd84\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/\"},\"author\":{\"name\":\"M. Nivanya\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/person\\\/95941a1c225d1fe7b00554d8b4c8bfd1\"},\"headline\":\"From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB\",\"datePublished\":\"2026-07-17T14:12:12+00:00\",\"dateModified\":\"2026-07-17T18:27:55+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/\"},\"wordCount\":1650,\"publisher\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/07\\\/17070426\\\/bolt-migration-social-1800x600-1.png\",\"keywords\":[\"Distributed SQL\",\"MySQL\",\"Online Schema\",\"Scalability\",\"TiDB\"],\"articleSection\":[\"Conference\"],\"inLanguage\":\"ko-KR\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/\",\"name\":\"Bolt's MySQL to TiDB Migration: SCaiLE Europe 2026\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/07\\\/17070426\\\/bolt-migration-social-1800x600-1.png\",\"datePublished\":\"2026-07-17T14:12:12+00:00\",\"dateModified\":\"2026-07-17T18:27:55+00:00\",\"description\":\"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#breadcrumb\"},\"inLanguage\":\"ko-KR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#primaryimage\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/07\\\/17070426\\\/bolt-migration-social-1800x600-1.png\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2026\\\/07\\\/17070426\\\/bolt-migration-social-1800x600-1.png\",\"width\":1800,\"height\":600},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/blog\\\/bolt-mysql-migration-tidb\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.pingcap.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#website\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/\",\"name\":\"TiDB\",\"description\":\"TiDB | SQL at Scale\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.pingcap.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"ko-KR\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#organization\",\"name\":\"PingCAP\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2021\\\/11\\\/pingcap-logo.png\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2021\\\/11\\\/pingcap-logo.png\",\"width\":811,\"height\":232,\"caption\":\"PingCAP\"},\"image\":{\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/facebook.com\\\/pingcap2015\",\"https:\\\/\\\/x.com\\\/PingCAP\",\"https:\\\/\\\/linkedin.com\\\/company\\\/pingcap\",\"https:\\\/\\\/youtube.com\\\/channel\\\/UCuq4puT32DzHKT5rU1IZpIA\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.pingcap.com\\\/#\\\/schema\\\/person\\\/95941a1c225d1fe7b00554d8b4c8bfd1\",\"name\":\"M. Nivanya\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"ko-KR\",\"@id\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2024\\\/10\\\/16052239\\\/Untitled-design.png\",\"url\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2024\\\/10\\\/16052239\\\/Untitled-design.png\",\"contentUrl\":\"https:\\\/\\\/static.pingcap.com\\\/files\\\/2024\\\/10\\\/16052239\\\/Untitled-design.png\",\"caption\":\"M. Nivanya\"},\"description\":\"Content Manager\",\"url\":\"https:\\\/\\\/www.pingcap.com\\\/ko\\\/blog\\\/author\\\/nivanya\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Bolt's MySQL to TiDB Migration: SCaiLE Europe 2026","description":"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/","og_locale":"ko_KR","og_type":"article","og_title":"Bolt's MySQL to TiDB Migration: SCaiLE Europe 2026","og_description":"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.","og_url":"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/","og_site_name":"TiDB","article_publisher":"https:\/\/facebook.com\/pingcap2015","article_published_time":"2026-07-17T14:12:12+00:00","article_modified_time":"2026-07-17T18:27:55+00:00","og_image":[{"width":1800,"height":900,"url":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070910\/bolt-migration-featured-1800x900-3.png","type":"image\/png"}],"author":"M. Nivanya","twitter_card":"summary_large_image","twitter_creator":"@PingCAP","twitter_site":"@PingCAP","twitter_misc":{"\uae00\uc4f4\uc774":"M. Nivanya","\uc608\uc0c1 \ub418\ub294 \ud310\ub3c5 \uc2dc\uac04":"8\ubd84"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#article","isPartOf":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/"},"author":{"name":"M. Nivanya","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/95941a1c225d1fe7b00554d8b4c8bfd1"},"headline":"From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB","datePublished":"2026-07-17T14:12:12+00:00","dateModified":"2026-07-17T18:27:55+00:00","mainEntityOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/"},"wordCount":1650,"publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png","keywords":["Distributed SQL","MySQL","Online Schema","Scalability","TiDB"],"articleSection":["Conference"],"inLanguage":"ko-KR"},{"@type":"WebPage","@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/","url":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/","name":"Bolt's MySQL to TiDB Migration: SCaiLE Europe 2026","isPartOf":{"@id":"https:\/\/www.pingcap.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#primaryimage"},"image":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#primaryimage"},"thumbnailUrl":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png","datePublished":"2026-07-17T14:12:12+00:00","dateModified":"2026-07-17T18:27:55+00:00","description":"Why MySQL broke at scale, why Vitess failed, and the migration playbook behind 90 percent of schemas on TiDB.","breadcrumb":{"@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#breadcrumb"},"inLanguage":"ko-KR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/"]}]},{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#primaryimage","url":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png","width":1800,"height":600},{"@type":"BreadcrumbList","@id":"https:\/\/www.pingcap.com\/blog\/bolt-mysql-migration-tidb\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.pingcap.com\/"},{"@type":"ListItem","position":2,"name":"From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB"}]},{"@type":"WebSite","@id":"https:\/\/www.pingcap.com\/#website","url":"https:\/\/www.pingcap.com\/","name":"\ud2f0DB","description":"TiDB | SQL at Scale","publisher":{"@id":"https:\/\/www.pingcap.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.pingcap.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"ko-KR"},{"@type":"Organization","@id":"https:\/\/www.pingcap.com\/#organization","name":"PingCAP","url":"https:\/\/www.pingcap.com\/","logo":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/","url":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2021\/11\/pingcap-logo.png","width":811,"height":232,"caption":"PingCAP"},"image":{"@id":"https:\/\/www.pingcap.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/facebook.com\/pingcap2015","https:\/\/x.com\/PingCAP","https:\/\/linkedin.com\/company\/pingcap","https:\/\/youtube.com\/channel\/UCuq4puT32DzHKT5rU1IZpIA"]},{"@type":"Person","@id":"https:\/\/www.pingcap.com\/#\/schema\/person\/95941a1c225d1fe7b00554d8b4c8bfd1","name":"M. Nivanya","image":{"@type":"ImageObject","inLanguage":"ko-KR","@id":"https:\/\/static.pingcap.com\/files\/2024\/10\/16052239\/Untitled-design.png","url":"https:\/\/static.pingcap.com\/files\/2024\/10\/16052239\/Untitled-design.png","contentUrl":"https:\/\/static.pingcap.com\/files\/2024\/10\/16052239\/Untitled-design.png","caption":"M. Nivanya"},"description":"Content Manager","url":"https:\/\/www.pingcap.com\/ko\/blog\/author\/nivanya\/"}]}},"grav_blocks":false,"card_markup":"<a class=\"card-resource bg-white\" href=\"https:\/\/www.pingcap.com\/ko\/blog\/bolt-mysql-migration-tidb\/\"><div class=\"card-resource__image-container\"><img class=\"card-resource__image\" alt=\"bolt-migration-social-1800x600\" src=\"https:\/\/static.pingcap.com\/files\/2026\/07\/17070426\/bolt-migration-social-1800x600-1.png\" loading=\"lazy\" width=1800 height=600 \/><\/div><div class=\"card-resource__content-container\"><div class=\"card-resource__content-head\"><div class=\"card-resource__category\">Conference<\/div><\/div><h5 class=\"card-resource__title\">From One Week to 22 Minutes: How Bolt Migrated MySQL to TiDB<\/h5><\/div><\/a>","_links":{"self":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/34264","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/users\/275"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/comments?post=34264"}],"version-history":[{"count":16,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/34264\/revisions"}],"predecessor-version":[{"id":34297,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/posts\/34264\/revisions\/34297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media\/34265"}],"wp:attachment":[{"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/media?parent=34264"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/categories?post=34264"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pingcap.com\/ko\/wp-json\/wp\/v2\/tags?post=34264"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}