这章主要讲怎么挑mysql的硬件。
CPU
多核的
磁盘
raid卡,带电,防断电的
iostat和vmstat用法
略
高性能mysql第十章-笔记-复制
使用场景:
- 数据分布;
- 负载均衡(从库可以读);
- 备份;
- 高可用/故障切换;
- 升级测试。 主库备库同步流程:
- 主库: 生成binlog;(binlog dump线程)
- 备库: 读取binlong放入中继日志relay log;(通过TCP/IP协议,IO线程)
- 备库: 重放relay log。(单线程,SQL线程)
配置复制
- 每台服务器上创建账号;
- 配置主库和备库;
- 通知备库连接到主库,并从主库复制数据。
第一步创建账号
主库、备库:
1 | grant replication slave, replication client on *.* |
第二步设置主库和备库
主库:[my.conf]
:
1 | log_bin = mysql-bin |
重启主库。
检查主库完成配置:
1 | show master status; |
备库配置:[my.conf]
1 | log_bin = mysql-bin |
第三步:启动复制
备库执行sql:
1 | change master to MASTER_HOST= 'server1' |
检查备库配置:
1 | show slave status \G |
让备库开始复制:
1 | start slave; |
binlog配置
主库配置
sync_binlog
=1: 事务提交前把binlog存到磁盘上。
复制的原理
binlog_format
:
- 基于语句的复制(逻辑): 出错机率大,开销小;
- 基于行的复制(物理): 几乎不出错,开销一般更大。(5.1以后开始有)
基于语句的复制的缺点:
- 不支持触发器或者存储过程:有bug;
- 只能串行重放。
基于行的缺点:
- 可读性差,无法直接知道执行了什么SQL。
解决方案:1
2
3
4-- 1:
show master logs;
-- 2:
show binlog events in 'mysql-bin.000643' from 1073742091;
复制的过滤器
不建议使用。
复制的拓扑
1. 一主多备(星形模型)
2. 双主
不建议使用,两个主库都可写会有很多问题
3. HA模式(类似于双主,但只有一个可写)
两个库的配置基本相同,只是其中一个库是只读的。
如果有Alter table等耗时操作,可以在备库上执行,然后互换两个库。
优点:
故障恢复很简单。
具体设置情况:
- 两个库数据相同;
- 创建复制账号,选择不同serverid;
- 两者启用binlog,互相跟踪;
- 备库设置成只读,主库设置成可写。
由于serverid,主库不会重复消费自己的变更。(忽略自己的日志)
确定备库追上了主库
1 | -- 主库: |
4. 环形(>=3的库成环)
不建议使用,太脆弱容易死循环。
5. 分发主库
一主多备对于备的数量有上限,可以用分发主库来进行扩展。
为了避免在分发主库上执行查询,可以将它的表修改为blackhole引擎。
(storage_engine=blackhole)
6. 模拟多主库
备库可以轮流读两个主库,俩主库带blackhole即可。
tips
1 | insert ... |
这样更快(不需要加锁)