最近笔者第一遍读“MySQL王者晋级之路”,此书偏向于实际运用,可以给一个正确的方向。先总结其中较为重要的知识点记录下来。
1、mysql安装问题
1.1selinux和iptables需要关闭;
1.2IO调度系统默认是cfq模式,强烈建议使用deadline模式;
1.3swap分区设置,0-100之间,0代表最大限度的使用物理内存,100代表积极使用swap分区,把内存数据搬到swap分区上,建议不分配或者4GB。
1.4文件系统选择xfs,支持动态扩容,删除文件更加方便。
1.5操作系统限制。
1.6numa关闭,不需要swap来获取内存,会导致数据库性能下降。
1.7root密码会过期,需要设置永不过期。
1.8root密码丢失,要加跳过权限表参数重启数据库。
1.9数据库连接的两种方式,tcpip,检查user权限表,判断发起请求的客户端IP是否允许连接到mysql实例;socket,要在配置文件中指定嵌套字文件路径,比如navicat。
1.10root用户和all privileges权限永用户只能归DBA所有,创建账户时专库专账号,主机IP避免使用%,可以分配一个特定的网段,可分配读写权限和读权限,不要给超管权限,不要给用户建表,改表等权限。
2、体系结构与储存引擎
2.1mysql体系结构分为两层,server层和储存引擎层,server层包括连接层和SQL层。连接层包括通信协议、线程处理、用户密码认证。线程处理是每个连接请求都会分配一个对应的线程,相当于每个SQL对应 一个线程。
2.2查询缓存通过query cache进行操作,如果数据在query cache中则直接返回结果给客户端。在生产环境中建议关闭,因为只能缓存静态数据。需要关闭query-cache-type。
2.3mysql压力测试软件sysbench,进行基准测试。
2.4innodb支持事务和行锁,并发高,数据和索引文件都存在idb文件中,并且都缓存都内存中。myISAM不支持事务,是表锁,数据文件myd,索引文件myi,只缓存索引文件不缓存数据文件。
2.5mysql数据库是单进程多线程模型的数据库,数据库实例是进程加内存的组合。innodb体系结构实际是由内存结构、线程、磁盘文件这三层组成的。innodb逻辑储存单元分为表空间、段、区、页,系统表空间存储所有数据的信息,独立表空间的每个表都有自己的表空间。
2.6行记录格式分为四种,生产环境选择dynamic进行存储。
2.7page是innodb磁盘IO的最小单位,数据是存放在page里面的,对应到内存中就是一个个buffer。
2.8后台有各种线程,负责处理不同的事务。master thread是后台线程中的主线程,优先级别最高。其内部有四个循环:主循环loop、后台循环background loop、刷新循环flush loop、暂停循环suspend loop,根据数据的运行状态在四个循环间进行切换。主循环loop中有两种操作:每一秒操作和每10秒操作。
2.9四大IO线程:read thread、write thread、redo log thread、change buffer thread。
2.10内存刷新机制:redo log重做日志文件,用于记录事务操作的变化,记录的是数据修改后的值。binlog文件用于备份恢复和主从复制。
2.11innodb三大特性:插入缓冲,将多个插入合并到一个操作中,解决IO问题。两次写(double write),写入数据文件前都会写入双写缓冲。自适应哈希索引,innodb可以监控索引的搜索,innodb注意到查询可以通过建立哈希索引得到优化,那么会自动完成这件事情。
网友评论