具体描述
本书讲解了MariaDB的诞生背景及设计目的,并通过与MySQL的比较使读者轻松理解MariaDB。本书内容涉及MariaDB 5.1~10.0的各个方面,讲解重点在于MariaDB 10.0的各种实用功能。此外,MariaDB与MySQL有着紧密的联系,书中对MariaDB 10.0与MySQL 5.6的新功能进行了比较,读者可以同时学习MariaDB与MySQL的内容。
本书涵盖内容
MariaDB与MySQL间的兼容性
MariaDB的安装与迁移
在线修改Schema
执行计划分析
MariaDB 10.0与MySQL 5.6的优化
MariaDB的存储引擎
MariaDB的附加功能(线程池及管理诊断工具)
XtraBackup备份工具
MariaDB 10与MySQL 5.6的复制(GTID、多源复制及多线程从服务器)
作者简介
李成旭
计算机工程专业,曾担任金融企业CRM/DW项目负责人,用两年多时间推进针对DW的ETL解决方案的开发。担任NHN的DBA时,负责标准化与数据建模、DB运营和技术标杆管理。目前在Kakao公司(韩国即时通信软件运营商)负责MariaDB的升级和构建所需的代码安全及标杆管理工作。著有《PHP 5 Web编程》《MySQL性能优化》《MySQL权威指南》。
目录信息
1.1 MariaDB 2
1.2 MariaDB与MySQL 3
1.2.1 MariaDB、MySQL和PerconaServer 3
1.2.2 相同点 6
1.2.3 不同点 7
1.2.4 各版本间的兼容性 10
1.2.5 性能比较 11
1.2.6 MariaDB是否会取代MySQL 14
1.2.7 MariaDB与MySQL的选择 14
第2章 安装 17
2.1 下载 18
2.2 安装 20
2.2.1 在Windows操作系统下安装MariaDB 21
2.2.2 在Linux操作系统下安装MariaDB 27
2.3 更新 28
2.3.1 从MySQL升级到MariaDB时的注意事项 28
2.3.2 不受版本限制的安全升级法 29
2.3.3 从MySQL 5.0或之前版本升级为MariaDB 5.5 30
2.3.4 从MySQL 5.1升级为MariaDB 5.5 31
2.3.5 从MySQL 5.5升级为MariaDB 5.5 32
第3章 MariaDB启动及执行查询 33
3.1 启动与终止服务器MariaDB MySQL 34
3.1.1 在Linux中启动与终止MariaDB服务器 34
3.1.2 在Windows系统中启动与终止MariaDB服务器 36
3.2 登录服务器MariaDB MySQL 37
3.2.1 登录服务器与版本确认 37
3.2.2 mysql客户端程序支持的选项 39
3.3 创建数据库与用户MariaDB MySQL 41
3.3.1 MariaDB用户账户识别与权限 41
3.3.2 MariaDB默认用户 47
3.3.3 MariaDB的默认数据库 48
3.3.4 新建数据库 50
3.3.5 创建用户 50
3.4 创建与修改数据表MariaDB MySQL 51
3.4.1 创建数据表 52
3.4.2 修改数据表(在线与离线) 53
3.4.3 删除数据表 66
3.5 数据操作MariaDB MySQL 67
3.5.1 INSERT 67
3.5.2 SELECT 68
3.5.3 UPDATE 70
3.5.4 REPLACE 71
3.5.5 DELETE 71
第4章 执行计划分析 73
4.1 概要MariaDB MySQL 74
4.1.1 查询执行过程 74
4.1.2 优化器种类 75
4.1.3 统计信息 76
4.1.4 直方图统计信息MariaDB 82
4.1.5 连接优化器选项 87
4.2 准备示例数据 92
4.2.1 加载示例数据 92
4.2.2 收集统计信息 94
4.3 执行计划分析MariaDB MySQL 96
4.3.1 id列 97
4.3.2 select_type列 98
4.3.3 table列 106
4.3.4 type列 108
4.3.5 possible_keys列 117
4.3.6 key列 117
4.3.7 key_len列 117
4.3.8 ref列 119
4.3.9 rows列 120
4.3.10 Extra列 121
4.3.11 EXPLAIN EXTENDED(Filtered列) 149
4.3.12 EXPLAIN EXTENDED(附加优化器信息) 150
4.3.13 EXPLAIN PARTITIONS(Partitions列) 151
4.4 优化器提示MariaDB MySQL 152
4.4.1 提示的使用方法 152
4.4.2 STRAIGHT_JOIN 153
4.4.3 USE INDEX/FORCE INDEX/IGNORE INDEX 156
4.4.4 SQL_CACHE/SQL_NO_CACHE 157
4.4.5 SQL_CALC_FOUND_ROWS 158
4.4.6 其他提示 160
4.5 分析执行计划时的注意事项 160
4.5.1 Select_type列中需要注意的项目 160
4.5.2 Type列中需要注意的项目 161
4.5.3 Key列中需要注意的项目 161
4.5.4 Rows列中需要注意的项目 161
4.5.5 Extra列中需要注意的项目 161
第5章 优化 163
5.1 全表扫描MariaDB MySQL 164
5.2 ORDER BY处理(Using filesort)MariaDB MySQL 165
5.2.1 排序缓冲 165
5.2.2 排序算法 167
5.2.3 排序处理方式 169
5.2.4 ORDER BY LIMIT n 优化MySQL 177
5.2.5 与排序相关的状态变量 178
5.3 GROUP BY 处理MariaDB MySQL 179
5.3.1 使用索引扫描处理GROUP BY(紧凑索引扫描) 179
5.3.2 使用松散索引扫描处理GROUP BY 179
5.3.3 使用临时表处理GROUP BY 181
5.4 DISTINCT处理MariaDB MySQL 182
5.4.1 SELECT DISTINCT… 182
5.4.2 DISTINCT 用于集合函数内部 183
5.5 临时表(Using temporary)MariaDB MySQL 184
5.5.1 需要使用临时表的查询 185
5.5.2 在磁盘上创建临时表(使用Aria 存储引擎)MariaDB 185
5.5.3 与临时表有关的状态变量 186
5.5.4 带索引的内部临时表 187
5.5.5 内部临时表的注意事项 187
5.6 索引条件下推MariaDB MySQL 188
5.7 多范围读MariaDB MySQL 191
5.7.1 基于RowId排序(Rowid-orderd scan) 192
5.7.2 基于Key排序(Key-ordered scan)MariaDB 194
5.7.3 基于Key与RowId 排序(Key-ordered、Rowid-ordered scan)MariaDB 195
5.7.4 “多范围读”优化与排序 197
5.7.5 “多范围读”优化的注意事项 198
5.8 索引合并MariaDB MySQL 199
5.8.1 Using union 201
5.8.2 Using sort_union 202
5.8.3 Using intersect 204
5.8.4 Using sort_intersect MariaDB 205
5.9 数据表连接MariaDB MySQL 205
5.9.1 连接类型 206
5.9.2 连接算法 212
5.9.3 连接的注意事项 222
5.10 子查询MariaDB MySQL 224
5.10.1 半连接子查询优化 224
5.10.2 非半连接的子查询优化 236
5.10.3 子查询缓存 238
第6章 存储引擎 241
6.1 Aria存储引擎MariaDB 242
6.1.1 事务 242
6.1.2 页面缓存 243
6.1.3 系统变量设置 243
6.2 XtraDB存储引擎MariaDB 244
6.3 InnoDB存储引擎MariaDB MySQL 247
6.3.1 MySQL 5.6 InnoDB 247
6.3.2 “脏页”刷新 262
6.3.3 缓冲池性能改善MariaDB 279
6.3.4 原子写(针对FusionIO SSD的Atomic write)MariaDB 283
6.3.5 扩展的InnoDB引擎状态输出MariaDB 284
6.3.6 XtraDB重做日志存档 288
6.3.7 跟踪修改页面MariaDB 289
6.4 全文检索引擎MariaDB MySQL 290
6.4.1 添加全文检索索引 290
6.4.2 全文检索索引表空间 292
6.4.3 与全文检索索引相关的INFORMATION_SCHEMA 信息 294
6.4.4 使用全文检索索引 295
6.4.5 注意事项 295
6.5 Memcached插件MySQL 298
6.5.1 架构 298
6.5.2 安装与测试 299
6.5.3 缓存策略 303
6.5.4 注册用户数据表 304
6.5.5 相关系统变量 305
6.6 Cassandra存储引擎MariaDB 306
6.6.1 Cassandra 307
6.6.2 Cassandra存储引擎 309
6.7 CONNECT存储引擎MariaDB 311
6.7.1 安装CONNECT存储引擎 311
6.7.2 连接Oracle RDBMS数据表 312
6.7.3 连接my.cnf设置文件 313
6.7.4 连接操作系统目录 314
6.8 Sequence存储引擎MariaDB 315
6.8.1 Sequence存储引擎的基本用法 315
6.8.2 查找遗漏的编号 317
6.8.3 创建顺序组合的号码对 318
6.8.4 查找倍数或公倍数 318
6.8.5 顺序生成字母表 319
6.8.6 顺序生成日期 320
6.8.7 数据复制加工 320
6.9 Mroonga全文检索存储引擎MariaDB MySQL 321
6.9.1 索引算法 322
6.9.2 安装Mroonga全文检索引擎 324
6.9.3 使用Mroonga全文检索引擎 325
第7章 其他功能 329
7.1 性能提升MariaDB MySQL Enterprise 330
7.2 管理与诊断MariaDB 335
7.2.1 SHOW EXPLAIN FOR<THREAD-ID> 335
7.2.2 向慢查询日志输出执行计划 337
7.2.3 输出结构化的执行计划 338
7.2.4 线程的内存使用量 340
7.2.5 SHUTDOWN命令 341
7.2.6 强制终止用户或查询执行 341
7.2.7 GET DIAGNOSTICS 343
7.3 开发效率MariaDB 344
7.3.1 LIMIT ROWS EXAMINED 344
7.3.2 DELETE…RETURNING… 346
7.3.3 以微秒为单位保存时间 347
7.3.4 设置DATETIME类型的默认值 349
7.3.5 扩展正则表达式功能 349
7.3.6 虚拟列 352
7.3.7 动态列 354
7.4 分区MariaDB MySQL 358
7.4.1 显式指定分区 358
7.4.2 交换分区表空间 362
7.5 备份MariaDB MySQL 364
7.5.1 二进制日志远程备份 365
7.5.2 XtraBackup介绍 368
7.5.3 XtraBackup的功能 381
7.5.4 XtraBackup的高级用法 386
第8章 复制 397
8.1 全局事务IDMariaDB MySQL 398
8.1.1 全局事务ID的定义 398
8.1.2 全局事务ID的必要性 400
8.1.3 MariaDB 10.0全局事务ID MariaDB 403
8.1.4 MySQL 5.6全局事务ID MySQL 413
8.2 多源复制MariaDB 421
8.2.1 多源复制相关命令 422
8.2.2 构建多源复制 423
8.2.3 多源复制与全局事务 426
8.3 多线程复制MariaDB MySQL 428
8.3.1 MySQL 5.6的多线程复制 428
8.3.2 MariaDB 10.0的多线程复制 431
8.4 Crash safe slave MariaDB MySQL 433
8.4.1 MariaDB 10.0的崩溃安全复制 434
8.4.2 MySQL 5.6的崩溃安全复制 435
8.5 改善基于ROW的复制功能MariaDB MySQL 435
8.5.1 ROW格式的容量优化MySQL 435
8.5.2 ROW格式二进制日志的信息性日志事件 436
8.6 延迟复制MySQL 439
8.7 MariaDB与MySQL服务器间的复制 440
8.8 其他功能改善MariaDB MySQL 441
8.8.1 二进制日志校验和 441
8.8.2 二进制日志API 442
8.8.3 提交二进制日志组 443
· · · · · · (收起)
读后感
用户评价
“深入理解MariaDB与MySQL”这本书,从我个人角度来看,最突出的特点就是其内容的广度和深度都达到了一个相当高的水平。作者并没有满足于介绍基础概念,而是将目光投向了数据库的内部运作机制,以及那些决定数据库性能和稳定性的关键因素。我尤其欣赏其中关于数据库安全的部分。在当前信息安全日益重要的背景下,如何保障数据库的安全是每个开发者和运维人员都必须面对的挑战。这本书详细介绍了SQL注入的原理、常见的攻击方式以及防御策略,还讲解了数据库的用户权限管理、加密技术、审计机制等内容。对于MariaDB,书中还特别提到了其在安全方面的一些增强特性,比如基于角色的访问控制(RBAC)和更精细的插件安全机制。这些内容对于我们构建健壮、安全的系统非常有价值。此外,书中对数据库的容灾和备份恢复也进行了深入的探讨,涵盖了全备、增量备、日志备等多种备份方式,以及冷备、热备、物理备、逻辑备等不同策略的优缺点和适用场景。对于如何设计一个可靠的备份恢复方案,以及如何在灾难发生时快速恢复业务,书中的指导非常清晰和实用。
这本书《深入理解MariaDB与MySQL》给我的感觉是,它不仅仅是一本技术书籍,更像是一位经验丰富的数据库专家在循循善诱地教导你。作者并没有回避那些复杂和抽象的概念,而是以一种非常接地气的方式,将它们一一呈现。我尤其喜欢书中关于“数据库调优”的章节。调优是一个既需要理论知识又需要实践经验的领域,而这本书恰恰在这两方面都做得非常出色。它不仅仅是列举了一些常见的调优技巧,比如索引优化、SQL改写、参数调整等,更重要的是,它深入剖析了这些调优手段背后的原理。例如,在讲到索引优化时,作者不仅介绍了B+树索引、全文索引、空间索引等不同类型的索引,还详细讲解了如何根据查询的特点选择合适的索引,以及如何避免索引失效的情况。对于SQL改写,书中提供了大量的典型案例,分析了慢查询的原因,并给出了多种优化方案,这些案例的实用性非常强,让我能够在实际工作中举一反三。此外,书中还讨论了如何利用慢查询日志、性能剖析工具等来定位性能瓶颈,并给出了系统的调优流程和方法论。读完这本书,我感觉自己对数据库调优不再是凭感觉,而是有了更系统、更科学的方法论指导,这对我提升开发效率和优化系统性能有着直接的帮助。
“深入理解MariaDB与MySQL”这本书,从我拿到手的那一刻起,就散发出一种沉甸甸的专业气息。封面设计简洁有力,没有过多的花哨,直接点明了主题,让人一眼就能明白这是一本扎实的技术书籍。作为一名长期在数据库领域摸爬滚打的开发者,我深知理解数据库底层原理的重要性,而这本书正是满足了我这一需求。它不像市面上很多速成教材,只停留在API的调用层面,而是深入剖析了MariaDB和MySQL的核心架构,从存储引擎的演进,到事务的隔离级别,再到查询的优化机制,几乎无所不包。我特别喜欢其中关于InnoDB存储引擎的章节,作者详细讲解了B+树索引的实现原理,以及页分裂、行锁、表锁等概念,这些知识点对于我调优慢查询、排查死锁问题有着直接的指导意义。书中还对MySQL的复制机制进行了深入的探讨,无论是主从复制、半同步复制还是组复制,都给出了清晰的解释和实践指导,这对于构建高可用、可伸缩的数据库架构至关重要。更让我惊喜的是,书中还涉及了一些数据库性能调优的高级技巧,比如如何通过参数配置优化内存使用、如何针对性地设计索引以应对复杂的查询场景,甚至还触及了分库分表等大规模数据处理的策略。每一章节都像是一场知识的盛宴,让我受益匪浅。读完这本书,我感觉自己对数据库的理解上升到了一个新的高度,看待问题的方式也更加深入和系统化了。
当我拿到《深入理解MariaDB与MySQL》这本书时,我最期待的就是能够对数据库的存储引擎有更深入的了解。毕竟,存储引擎是数据库最核心的部分之一,它直接关系到数据的存储方式、读写性能以及事务的支持能力。这本书在这方面的内容绝对是重量级的。作者对InnoDB和MyISAM这两种最常见的存储引擎进行了详尽的对比分析,不仅讲解了它们各自的架构特点,比如InnoDB的页结构、行锁、多版本并发控制,MyISAM的表锁、非事务性,还深入探讨了它们在性能、功能和适用场景上的差异。我特别惊喜的是,书中还详细介绍了MariaDB中一些创新的存储引擎,比如Aria(用于缓存和内存操作)、TokuDB(用于高压缩和高性能)以及Spider(用于分布式和分片)。作者对这些新兴存储引擎的工作原理、配置方法和性能特点都进行了深入浅出的讲解,这为我们选择最适合业务场景的存储引擎提供了宝贵的参考。读完这部分内容,我感觉自己对如何选择和优化存储引擎有了更清晰的认识,能够根据实际需求做出更明智的决策,从而提升数据库的整体性能。
这本书《深入理解MariaDB与MySQL》给了我一种“回炉重造”的感觉,它让我重新审视了自己多年来对数据库的理解。作者在书中对“数据库的复制”机制进行了非常透彻的分析。无论是MySQL的主从复制,还是MariaDB中的半同步复制、组复制(Galera Cluster),书中都给出了详细的原理讲解、配置步骤和故障排查指南。我之前在搭建高可用数据库集群时,经常会遇到一些复制延迟、数据不一致等问题,而这本书中关于复制延迟的产生原因、判断方法以及解决方案,让我豁然开朗。作者还深入分析了不同复制方式的优缺点,以及它们在不同场景下的适用性。例如,对于需要强一致性保证的场景,组复制无疑是更好的选择;而对于读写分离的场景,传统的主从复制仍然是广泛应用的方案。书中还提到了如何通过监控复制状态来及时发现问题,并给出了一些实用的建议。读完这部分内容,我感觉自己对如何构建稳定、可靠、高性能的数据库复制方案有了更深入的理解,这对于保证业务的连续性和可用性至关重要。
这本书《深入理解MariaDB与MySQL》简直就是数据库开发人员的福音,尤其是对于那些像我一样,总想刨根问底,弄明白“为什么”的同行。它不仅仅是堆砌了大量的技术概念,更重要的是,它通过大量的图示和实例,将那些原本晦涩难懂的原理讲得浅显易懂。我尤其对书中关于MariaDB特有的功能和特性的讲解印象深刻。作为MySQL的一个分支,MariaDB在兼容MySQL的同时,又加入了很多创新性的改进,比如新的存储引擎,如Aria和Spider,以及更强大的全文搜索功能。这本书为我们详细阐述了这些新特性是如何工作的,它们解决了MySQL原有的哪些痛点,以及在实际应用中如何发挥它们的优势。例如,关于Spider存储引擎在分布式数据库场景下的应用,作者给出了非常详细的讲解,包括其工作原理、配置方法和使用注意事项,这对于我们正在考虑进行数据分片的团队来说,提供了宝贵的参考。此外,书中关于MySQL 8.0新特性的介绍也非常及时和详尽,比如窗口函数、公用表表达式(CTE)以及更强的JSON支持等,这些新功能极大地提升了SQL的表达能力和数据处理效率,作者在这方面的讲解,让我们能够快速掌握并应用到实际项目中。读完这本书,我感觉自己对数据库的掌握不再局限于过去的知识,而是能够拥抱最新的技术发展,并将其转化为生产力。
《深入理解MariaDB与MySQL》这本书,对于我来说,最大的价值在于它帮助我建立了对数据库系统一个更加全面和立体的认知。它不仅仅局限于讲解SQL语法或者API的使用,而是带我深入到数据库的“心脏”地带。我特别欣赏书中对“数据库事务”的讲解。事务是数据库的核心概念之一,而书中对ACID特性的详细阐述,以及不同隔离级别(Read Uncommitted, Read Committed, Repeatable Read, Serializable)的实现原理和优缺点,都给我留下了深刻的印象。作者通过生动的图例和场景分析,让我清晰地理解了脏读、不可重复读、幻读等并发问题是如何产生的,以及数据库是如何通过锁机制和MVCC来解决这些问题的。对于MariaDB,书中还介绍了其在事务处理方面的一些独特优势,比如其对XA事务的支持以及在分布式事务中的应用。这部分内容让我对如何设计健壮、可靠的事务处理逻辑有了更深刻的理解。此外,书中关于数据库的“死锁”和“锁升级”等问题也进行了详尽的分析,并给出了相应的预防和解决策略,这对于维护数据库的稳定运行至关重要。
我之前一直认为自己对MySQL已经有了相当程度的了解,毕竟用了这么多年,大小项目也都接触过。但直到我翻开《深入理解MariaDB与MySQL》这本书,我才意识到自己之前的理解有多么浅薄。这本书就像是为数据库底层原理揭开了神秘的面纱,让我看到了那些隐藏在SQL语句背后的复杂机制。我最震撼的是关于数据库的并发控制的部分,作者对MVCC(多版本并发控制)的讲解,可以说是鞭辟入里。它不仅仅是讲了MVCC的“是什么”,更重要的是讲了“为什么”需要MVCC,以及它如何在InnoDB中实现,包括事务ID、隐藏列、read view等关键概念,这些细节的阐述,让我豁然开朗,瞬间理解了之前很多关于事务隔离级别和锁行为的困惑。书中还花了大篇幅讲解了MySQL的查询优化器是如何工作的,它如何解析SQL语句,如何选择最优的执行计划,以及我们如何通过调整SQL语句和创建合适的索引来影响优化器的决策。这部分内容对我来说是重中之重,因为一个好的执行计划能够让查询速度成倍提升,而一个糟糕的执行计划则可能导致系统崩溃。读完这本书,我不再是那个只会写SQL的码农,而是能够更深入地理解数据库的“思考方式”,并以此来指导我的开发实践,这无疑是巨大的进步。
《深入理解MariaDB与MySQL》这本书,对于我这样的数据库新手来说,简直就是一场及时雨。它并没有一开始就抛出大量的专业术语,而是循序渐进地引导我进入数据库的世界。从最基础的数据库概念,到SQL语言的学习,再到更高级的数据库设计和优化,这本书都覆盖得非常全面。我尤其喜欢书中关于“数据库设计”的部分。它不仅仅是教我们如何写CREATE TABLE语句,而是从数据的规范化、范式理论入手,讲解了如何设计出结构合理、易于维护、性能优良的数据库表。作者还通过大量的实际案例,展示了如何根据业务需求进行数据建模,如何识别和解决数据冗余、数据不一致等问题。对于MySQL和MariaDB,书中还提到了各自在数据类型、约束、触发器等方面的特点和使用技巧,这让我能够更好地利用数据库的内置功能来保证数据的完整性和一致性。此外,书中关于数据库的“索引设计”部分也给了我很大的启发。我之前对索引的理解比较片面,而这本书让我认识到,索引的设计并非越多越好,而是需要根据查询的实际情况来精心设计,才能达到最优的性能。
拿到《深入理解MariaDB与MySQL》这本书,我首先被它扎实的理论基础所吸引。这本书就像是一本数据库领域的“内功心法”,不仅仅教你如何“招式”,更重要的是让你理解“内力”的来源。我之前在工作中经常遇到一些模糊的数据库性能问题,比如为什么同一个SQL在某些时刻会变得很慢,或者为什么数据库会出现间歇性的卡顿。这本书关于MySQL和MariaDB的线程模型、连接管理、缓冲池管理以及I/O调度等底层机制的讲解,为我解开了这些谜团。我开始理解,数据库的性能瓶颈往往不是简单的SQL语句问题,而是与底层的资源分配、并发处理、数据读写效率等密切相关。书中对Buffer Pool的详细解析,包括其内部结构、LRU算法的演进以及如何通过参数调优来提高缓存命中率,这些内容对于我理解和解决数据库的内存瓶颈非常有帮助。同时,对于CPU和I/O资源的消耗,书中也给出了深入的分析,并提供了相应的监控和优化建议。读完这本书,我感觉自己对数据库的“望闻问切”能力大大提升,能够更准确地诊断问题,并给出更有效的解决方案,这对于提高系统的稳定性和运行效率至关重要。
Mariadb是Mysql的翻版,是mysql创始人开发的另一个mysql,用起来和mysql没区别,但仍然是开源的,更新比较快
Mariadb是Mysql的翻版,是mysql创始人开发的另一个mysql,用起来和mysql没区别,但仍然是开源的,更新比较快
Mariadb是Mysql的翻版,是mysql创始人开发的另一个mysql,用起来和mysql没区别,但仍然是开源的,更新比较快
MariaDB和MySQL两者的差别,基本上不是很多,虽然逐步开始各有各的发展方向,但也会一直不停的有交集。 可以作为一部对数据库了解的书看一下。
Mariadb是Mysql的翻版,是mysql创始人开发的另一个mysql,用起来和mysql没区别,但仍然是开源的,更新比较快