笔者最近看完一本mysql书籍-mysql王者晋级之路,此书适合初学者,比书籍-高可用MySQL简单实在得多,现将文中末尾的问答知识和自己的理解分享出来供大家参考。
1、mysql分支版本
mariadb、drizzle、percona server。最出名的就是mariadb,不仅仅是mysql的替代品,而且是创新和提高。mysql被甲骨文收购后,更新速度方面也不如mariadb。mariadb支持多源复制、galera cluster集群、spider水平分片、tokuDB存储引擎。
2、mysql存储引擎MyISAM和InnoDB的不同之处。
2.1事务支持不同。MyISAM不支持事务,InnoDB支持事务。
2.2锁粒度不同。MyISAM是表锁,InnoDB是行锁。
2.3存储空间不同。InnoDB缓存索引文件和数据文件,MyISAM只能缓存索引文件。
2.4存储结构不同。MyISAM数据文件是.MYD(mydata),索引文件是.MYI (myindex),InnoDB所有表都保存在一个数据文件中(.Ibd)。
3、mysql binlog有几种格式
statement格式,不需要记录每一行,减少binlog日志量,节约io,提高性能。但是特殊函数或者夸库操作时容易丢失数据。生产中不建议使用。
row格式,清晰记录每一行数据信息,不会出现夸库数据丢失的情况,安全性高。但是会产生大量的binlog,网络开销大。生产中推荐使用。
mixed格式,DDL语句会记录成statement,DML语句记录成row。
4、mysql主从复制的具体原理
主服务器把更新记录到二进制日志,从服务器通过IO thread向主库发起binlog请求,主服务器通过IO dump thread把二进制日志传递给从库,从库通过IO thread记录到自己的中继日志中。然后通过SQL thread应用中继日志中SQL的内容。
5、mysql主从延迟的原理是什么,如何监控主从延迟,如何解决主从延迟问题。
主库可以并发写入,但从库只能通过SQL thread完成任务,这是出现延迟最核心的原因。其他方面的原因:
5.1主从之间的同步不是实时同步的,而是异步的同步,主库提交事务后从库再执行一遍。
5.2在主库上对没有索引的大表进行delete或者update操作。
5.3从库的硬件配置较差。
5.4网络抖动导IO线程复制延迟。
监控方面可以使用比较主从服务器之间的position号差异值,还可以通过第三方工具percona-toolkit中的pt-heartbeat命令进行主从延迟监控。
解决办法:
1)避免让数据库进行大量运算,数据库只是存储数据的,让应用端多分担些压力或者可以通过缓存完成。
2)避免无用IO消耗,可以增加高转速磁盘、SSD等。
3)规划初期要分库分表策略,避免单表单库过大带来额外的复制压力。
4)选择PXC架构,实现多节点写入。
5)mysql5.7的并行复制功能。
6、如何优化一条慢查询语句。
6.1表的设计层面,数据类型选择是否合理。
6.2大表的碎片整理是否完善。
6.3explain审查表的执行计划,判断字段是否使用索引。
7、服务器负载过高或者网页打开缓慢,优化思路。
可以通过操作系统、数据库、程序设计、硬件方面四个维度方面解答,找到瓶颈位置,制定好优化方案。体系制定好后要在测试环境进行优化方案的测试。效果良好再要用到生产环境上。
8、mysql主备架构优缺点。
8.1M-S主备复制。
8.2MHA。故障切换时自行判断哪个从库与主库最接近,减少数据丢失风险。
8.3MM+keepalived。keepalived都要设置成backup模式,非抢占模式,通过优先级来判断决定谁是主库,避免发生脑裂、冲突现象。
8.4PXC架构。
8.5中间件proxySQL。
欢迎提出宝贵意见,笔者进行修改增加。







网友评论