1.mysql 分库分表
1). 分库
A. 水平分库(冷热数据拆分)B. 垂直分库(模块化 业务碎片化)
2). 分表
A. 水平分表(套表)
a).ID 值域划分
b).ID 取模划分
B. 垂直分表(大表拆小表)
3). 分库分表问题
A. 跨库 join
a). 冗余字段
b). 全局表
c). 代码层面数据组装
B. 跨库事务
a). 分布式事务【XA 协议(消息事务 - 数据库事务) 两阶段提交】b). 最终一致性【事务补偿】4). 分库分表中间件
2.mysql 主从(读写分离)
1). 过程
A. 主将更改操作记录记录到 binlog【log dump 线程】B. 从将主 binlog 事件 (sql) 同步到本机上并记录在 relaylog(中继日志)【I/ O 线程、SQL 线程】C. 从根据 relaylog 的 sql 按顺序执行
2). 配置
A. 主服务配置 (conf 配置 a) 和 b))【binlog-do-db |binlog_ignore_db】a).log-bin=mysql-bin // 开启二进制日志
b).server-id=1 // 设置 server-id
c). 创建一个用于 slave 和 master 通信的用户账号【REPLICATION SLAVE ON】d).SHOW MASTER STATUS; // 获得 master 二进制日志文件名及位置
B. 从服务配置
a).server-id=2 // 设置 server-id,必须唯一
b).CHANGE MASTER TO
-> MASTER_HOST='host',
-> MASTER_USER='user',
-> MASTER_PASSWORD='pwd',
-> MASTER_LOG_FILE='binlogName',
-> MASTER_LOG_POS=xxx; // 使用 master 分配的用户账号读取 master 二进制日志
c).start slave // 启用 slave 服务【start、stop】d).SHOW SLAVE STATUS\G // 查看 slave 状态【Slave_IO_Running、Slave_SQL_Running】
3.mysql 集群
分库中间件参考
mysql 集群参考