
**
前言
为什么要写本书
本书主要讲述mysql dba的必备技能,包括mysql的安装部署、开发、测试、监控和运维,此外,读者还可从中学习到系统架构的一些知识。
我从业10多年,先是在传统行业做开发工程师、系统管理员、oracle dba,2008年因为机缘巧合投身互联网,开始从事mysql运维工作。相对于成熟的商业数据库,mysql缺乏高质量的技术文档和图书,我在接触mysql的过程中,也感觉市面上的相关图书还存在一些不足,难以系统化地学习mysql。
从一名oracle dba转型为一名mysql dba,从传统领域转投到互联网公司,即便我之前有丰富的经验,在学习mysql的过程中也仍然走了一些弯路。成为一名mysql dba并不难,但成为一名高水平的mysql dba则需要时间、知识、技能、经验和意识的积累。
我在学习mysql的过程中,有时会去看技术论坛,或者通过msn群等聊天工具咨询他人一些问题,也得到过一些朋友的帮助。国内存在一批高素质的mysql dba,但由于各种现实因素,有心写一本关于mysql dba实战的书的人很少,所以市面上缺乏高质量的相关图书不足为奇。2013年年初,华章公司的策划编辑杨绣国找到我,说希望我能写一本关于mysql的书,我当时很犹豫,虽然我有时会在网上回答一些问题,也定期撰写个人博客,但是,写一本书,对于我来说,是一个艰巨的任务。经过一些交流,我慢慢明确了自己的想法,其实我一直是想写一本书的,既然我对市面上的相关图书不太满意,那么就自己写一本吧,当时我唯一欠缺的是写作经验以及时间。
我写这本书的目的是想做一个尝试——引领感兴趣的读者进入mysql数据库运维领域。国内互联网行业正在高速发展,迫切需要大量的mysql人才,希望这本书可以帮助一些读者顺利进入数据库领域。而且,我也想将自己的一些心得分享给读者,希望热爱数据库技术的同行们在工作中少走弯路。
在技术领域工作多年后,文字写作对于我来说其实已经很陌生了,弗朗西斯·培根说过,“阅读使人充实,谈论使人机敏,写作使人精确”。在本书的写作的过程中,其实我自己也获得了很多,不仅学到了更多的知识,对于自己的精神也是一种洗礼。写作真的是一种积极而富有价值的创作,我们只有正确地掌握所讲述的内容,才能为言行思想带来正能量。
希望在这个世界上,有越来越多的人愿意分享,且能享受分享的乐趣。
读者对象
本书的主要读者是mysql dba,在现实中,许多公司并没有配备专职的数据库维护人员,数据库的维护工作往往也是由开发工程师和系统管理员负责的,因此这本书也适用于他们。
这是一本偏向实战的技术书籍,不会过多地涉及技术的细节和原理,我会尽量直接地给出解决方案;本书除了讲mysql技能,还花了大量篇幅讲述架构;本书不仅讲述技术,也讲述技术之外的一些运维管理规则。对数据库的使用、维护和管理感兴趣的运维工程师、架构师、运维经理、开发工程师、测试工程师都可以将本书作为参考图书,而了解其他领域会有助于你的职业发展。
本书也适合希望转行到数据库运维领域的人士。许多人想从事it工作,但当下时间宝贵,要想进入一个行业或改变职业方向,往往会花费巨大的时间成本,所以这本书将尽量做到简单、易懂,以节省大家的学习成本。
如何阅读本书
本书将分为5个部分,分别从入门、开发、测试、运维、性能与架构这几个方面来介绍mysql的使用。对于初次接触mysql的读者,建议按照章节顺序逐步学习。对于已经有一定经验的读者,则可以选择自己感兴趣的篇章,跳过自己已经熟悉的内容。
第一部分讲述了mysql的基础架构、权限机制、常用的存储引擎、复制架构、安装及常用命令等知识。如果读者是初次接触mysql,那么可能还需要在这一部分上花一些时间。在掌握linux和mysql的基本使用方法之后,就可以开始第二部分的学习了。
第二部分将介绍mysql数据库开发相关的基础知识和技巧。基础知识包括关系数据模型、字符集、常用的sql语法、范式、索引和事务等。由于开发的领域很广,所以本部分仅仅选取了一些常用的技巧分享给大家。最后会结合实际生产,提供一份开发规范供大家参考。
第三部分介绍了数据库基准测试所需要的理论知识和常用的测试工具。本部分将介绍一个mysql的基准测试模型。
第四部分介绍了mysql运维工作的各项职责:监控、复制、迁移、升级、备份和恢复,然后通过一些案例向读者传授一些维护技巧及处理问题的方法。读者还将学习到规模化运维mysql的一些知识和规则。
第五部分介绍了性能调优的一些理论知识,以及从应用程序到数据库,再到存储等各个环节的优化。由于架构和性能优化密切相关,本部分也介绍了一些mysql dba需要熟悉的架构优化知识。初次接触mysql的读者对于架构优化的内容可能会感到难以理解,但随着经验的增长,再理解这些内容将不会再有问题。
本书假设读者已经对软硬件有了一定的认识,掌握了一门脚本语言,并且对unix或linux有一定的使用经验,对于数据库有了基本的认识。阅读本书时,读者不需要预先准备好上述的所有知识,但需要有意识地在阅读本书之外不断地补充自己的基础知识。我会对以上内容做深入的讲解,但如果读者有基础会更好,好的基础有利于快速吸收知识和深入思考问题。如果读者还不会使用linux和编写shell脚本,那么,建议尽快搭建一个学习环境。
由于dba需要和研发、测试、产品、运营、监控等团队进行合作,所以对于相关领域所涉及的数据库知识,本书也会做一些介绍。但是,由于经验侧重的关系,本书将主要从dba的角度来讲述这些知识和技能。
本书主要基于mysql官方5.1版本写作,这也是目前最流行的版本,我会补充mysql最新版本的少许内容,但跟踪mysql新版本更合适的策略是关注官方发布的新特性说明、新版本的文档手册,跟踪业内专家的技术博客和社交媒体等。
通过阅读本书,读者可以学到mysql的许多知识,但是仅通过阅读是难以获得技能和经验的。读者需要有一个适合自己的mysql测试环境,并能够不断地思考和实践自己的想法,这样才能够掌握技能,并得到属于自己的经验。
目录
第一部分 入门篇
**[第1章 理解mysql
1.1.1 应用领域和适用场景
1.1.2 为什么那么多公司和机构选择使用mysql
1.1.3 mysql的优势是什么,它解决了什么问题
<a href="https://yq.aliyun.com/articles/89683">1.2 mysql的基础架构和版本</a>
1.2.1 软件架构中数据库的定位
1.2.2 mysql的基础架构
1.2.3 mysql的版本及特性
1.2.4 mysql的开发周期
<a href="https://yq.aliyun.com/articles/89698">1.3 查询执行过程概述</a>
<a href="https://yq.aliyun.com/articles/89702">1.4 mysql权限</a>
1.4.1 mysql权限机制
1.4.2 赋予权限和回收权限
<a href="https://yq.aliyun.com/articles/89728">1.5 长连接、短连接、连接池</a>
1.5.1 短连接
1.5.2 长连接
1.5.3 连接池
1.5.4 持久连接和连接池的区别
<a href="https://yq.aliyun.com/articles/89734">1.6 存储引擎简介</a>
1.6.1 innodb引擎
1.6.2 myisam引擎
1.6.3 memory存储引擎
1.6.4 archive存储引擎
1.6.5 选择合适的引擎
1.6.6 选择何种平台
<a href="https://yq.aliyun.com/articles/89740">1.7 mysql复制架构</a>
<a href="https://yq.aliyun.com/articles/89744">1.8 一些基础概念</a>
**[第2章 mysql安装部署和入门
<a href="https://yq.aliyun.com/articles/89751">2.2 官方版本的安装</a>
2.2.1 二进制包的安装
2.2.2 源码编译安装
<a href="https://yq.aliyun.com/articles/89755">2.3 其他mysql分支的安装</a>
<a href="https://yq.aliyun.com/articles/89758">2.4 安装innodb plugin</a>
<a href="https://yq.aliyun.com/articles/89762">2.5 常用命令</a>
2.5.1 使用mysql命令
2.5.2 使用mysqladmin命令
2.5.3 使用mysqldump命令
<a href="https://yq.aliyun.com/articles/89774">2.6 mysql的主要参数设置</a>
第二部分 开发篇
**[第3章 开发基础
<a href="https://yq.aliyun.com/articles/89827">3.2 数据模型</a>
3.2.1 关系数据模型介绍
3.2.2 实体–关系建模
3.2.3 其他数据模型
<a href="https://yq.aliyun.com/articles/89933">3.3 sql基础</a>
3.3.1 变量
3.3.2 保留字
3.3.3 mysql注释
3.3.4 数据类型
3.3.5 函数
3.3.6 操作符及优先级
3.3.7 mysql示例employees数据库
3.3.8 sql语法
<a href="https://yq.aliyun.com/articles/89950">3.4 php开发</a>
3.4.1 概述
3.4.2 客户端访问过程
3.4.3 开发工具
3.4.4 操作数据
3.4.5 php数据库开发建议
<a href="https://yq.aliyun.com/articles/89974">3.5 索引</a>
3.5.1 索引介绍
3.5.2 使用索引的场景及注意事项
3.5.3 索引的错误用法
3.5.4 如何使用explain工具
3.5.5 优化索引的方法学
<a href="https://yq.aliyun.com/articles/89981">3.6 id主键</a>
<a href="https://yq.aliyun.com/articles/89987">3.7 字符集和国际化支持</a>
3.7.1 什么是字符集
3.7.2 国际化支持
3.7.3 字符集设置