第十篇:MySQL 实战:数据迁移、分库分表与分区技术指南

随着系统数据量与访问压力的增长,MySQL 单实例常面临性能瓶颈。本篇系统讲解如何进行 数据迁移分库分表分区表设计,并结合实践案例提供完整的优化思路。

一、MySQL 数据迁移方式

1. 场景分类

场景推荐工具
同版本、本地迁移mysqldumpcp+ibdata
跨版本、跨机房迁移mysqldumpmydumperpt-archiver
在线无停机迁移gh-ostPercona XtraBackup、同步复制

2. 使用 mysqldump(适合小型数据)

# 备份数据库
mysqldump -uroot -p mydb > mydb.sql

# 迁移目标服务器导入
mysql -uroot -p mydb < mydb.sql

3. 使用 Percona XtraBackup(推荐企业使用)

支持热备份、不锁表,适合大规模数据在线迁移。

xtrabackup --backup --target-dir=/backup/ --datadir=/var/lib/mysql
xtrabackup --prepare --target-dir=/backup/

二、分库分表策略详解

1. 为什么要分库分表?

  • 单表数据量过大(>千万行)导致查询效率下降;

  • 单库连接数、锁竞争瓶颈严重;

  • 提升写入吞吐量与负载均衡能力。

2. 分库 vs 分表

类型说明应用场景
水平分表同库,按主键或时间拆分多个表单表太大
水平分库多库,按用户 ID 分散到不同库访问压力大
垂直分表不同字段拆分存储表字段过多
垂直分库模块拆分,如用户、订单库系统解耦

3. 分表策略示例

-- 按用户 ID hash 分表
CREATE TABLE user_0 (...);
CREATE TABLE user_1 (...);

-- 插入数据时
SET @table_id = MOD(user_id, 2);
SET @sql = CONCAT('INSERT INTO user_', @table_id, ' VALUES(...)');
PREPARE stmt FROM @sql;
EXECUTE stmt;

注意: 分表后不支持跨表 JOIN 查询,需借助中间件如 ShardingSphere、MyCat、PolarDB。

 三、MySQL 分区表详解(Partition)

1. 为什么使用分区?

  • 优化大表查询性能;

  • 加快归档与清理;

  • 自动路由 SQL 到指定分区;

  • 支持高效的范围查询、按时间删除等。

2. 分区类型

分区类型描述
RANGE按数值/时间范围
LIST枚举列表分区
HASH按哈希值均匀分布
KEY类似 HASH,自动选择分区函数

3. RANGE 分区示例(按月份)

CREATE TABLE order_log (
  id BIGINT,
  create_time DATE
)
PARTITION BY RANGE (YEAR(create_time)*100 + MONTH(create_time)) (
  PARTITION p202301 VALUES LESS THAN (202302),
  PARTITION p202302 VALUES LESS THAN (202303),
  PARTITION pmax     VALUES LESS THAN MAXVALUE
);

4. 分区操作命令

  • 添加新分区:

ALTER TABLE order_log ADD PARTITION ( PARTITION p202304 VALUES LESS THAN (202305) );

  • 删除旧分区(归档或清理):

ALTER TABLE order_log DROP PARTITION p202301;

四、工具链与中间件推荐

工具/平台功能
ShardingSphere分库分表中间件,支持事务、读写分离
MyCat国人开发的分库分表中间件
Canal数据同步/增量迁移利器
gh-ost在线无锁结构变更/迁移
MySQL Fabric官方分库高可用方案(已不推荐)

五、实战:百万级订单表拆分方案

背景

  • 单表超过 500 万订单,查询严重拖慢;

  • 要求按月查询效率高、支持并发写入;

  • 目标:分区表 + 分库备份归档。

方案

  1. 按月 RANGE 分区建表;

  2. 设置自动任务,每月自动添加新分区;

  3. 使用 DROP PARTITION 实现 6 个月外数据自动归档;

  4. 归档数据转存到历史库中。

总结

  • 小规模数据可用 mysqldump 迁移,大数据建议用 XtraBackup

  • 分库分表需考虑分片键、路由策略与查询代价;

  • 分区表可解决部分大表场景,但不适用于高频跨分区操作;

  • 多表多库方案建议配合中间件,简化业务改造。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值