数据库
mysql
主从
为何做主从
- 当sql语句需要缩表,导致不能读,那么业务就受阻
- 当做了热备份,就算主库挂了,那么依靠从库也能快速的替换主库
- i/o访问频率增加,单库压力大
主从复制流程
- 主库的更新事件(update,insert,delete)写入binlog
- 主库创建binglog dump thread,把binlog发送到从库
- 从库启动并发起连接到主库
- 从库启动,创建i/o线程,读取主库binlog内容写入relay_log
- 从库启动,创建一个sql线程,从relay_log读取内容,从exec_master_pos位置开始执行读取到的更新事件,并将更新内容写入到从库的表
pxc
什么是pxc
一套开源的mysql高可用集群解决方案
原理
- 传统的主从就是我上面描述的那种,即主写从读,如果主节点因为网络问题没有同步到从节点,那么就出现了数据的不一致,底层是单向同步
- pvx,强一致性,无同步延迟
- 通过事务解决强一致性
性能调优
- 选择合适的存储引擎
我们都知道myisam比innodb快,但是实际的数据操作是很复杂的,所以相应的业务支持也要大,比如事务,锁,innodb就优于myisam。所以我们可以针对相应的表的数据结构或者业务选择合适的引擎,单纯就存储数据业务简单就用myisam。myisam仅仅缓存索引,innodb缓存数据和索引 - 数据尽量从内存读取
innodb_buffer_pool_size
show global status like 'innodb_buffer_pool_pages_%'
Innodb_buffer_pool_pages_data
Innodb_buffer_pool_pages_dirty
Innodb_buffer_pool_pages_flushed
Innodb_buffer_pool_pages_free
Innodb_buffer_pool_pages_misc
Innodb_buffer_pool_pages_total
- 数据预热
数据预热能够提高读取速度。 默认情况,仅仅有某条数据被读取一次,才会缓存在 innodb_buffer_pool。所以,数据库刚刚启动,须要进行数据预热,将磁盘上的全部数据缓存到内存中。 - 不要让数据存到 SWAP 中
- 提高磁盘读写速度
- 充分使用索引
- 直接数据放内存磁盘
- 慢查询日志找到sql
- slow_query_log 是否启动查询慢日志,默认不启动
- slow_query_log_file 指定日志存放路径
- long_query_time 指定阈值,即查询时间大于多少即为慢日志
- log_queries_not_using_indexes 是否记录未使用索引的sql
- 实时获取性能问题sql
show full processlist - 使用explain分析
id | type | key | extra |
---|
表示mysql执行顺序。id越大越先执行 | 表示找到数据行的方式 | 实际使用的索引 | 额外信息 |
连接池
索引
监控
sql调优
数据备份
|