MySQLDBA修炼之道.html.pdf

上传人:紫竹语嫣 文档编号:5514645 上传时间:2020-05-27 格式:PDF 页数:304 大小:9.24MB
返回 下载 相关 举报
MySQLDBA修炼之道.html.pdf_第1页
第1页 / 共304页
MySQLDBA修炼之道.html.pdf_第2页
第2页 / 共304页
MySQLDBA修炼之道.html.pdf_第3页
第3页 / 共304页
MySQLDBA修炼之道.html.pdf_第4页
第4页 / 共304页
MySQLDBA修炼之道.html.pdf_第5页
第5页 / 共304页
点击查看更多>>
资源描述

《MySQLDBA修炼之道.html.pdf》由会员分享,可在线阅读,更多相关《MySQLDBA修炼之道.html.pdf(304页珍藏版)》请在三一文库上搜索。

1、推荐序 我之前也看过很多数据库相关的图书,但是没有一本能像这本书一样,让我读起来感觉那么轻松愉快,读完后觉得必须要收藏一本作为案头必备。 本书的作者是互联网一线的数据库开发、运维专家,书中的内容是其对10多年工作中所遇问题的思考和总结,围绕着MySQL徐徐展开,犹如庖丁解牛,对MySQL的核心逻辑解释得相当清晰和透彻。 本书以一个数据库专家的视角,解析其观察到的方方面面,内容涉及“业务系统设计”“测试体系”“运维管理”等。本书的很多内容已经不仅仅是从一个DBA的角度出发,更多的是从一个系统架构师和 运维管理者的角度来思考问题。读完全书,你将会对整个研发、运维体系的相关领域都有一个概要的认识。这

2、种提纲挈领的架构,对于某个知识领域的学习是非常有价值的。 之所以说本书读起来令人轻松愉悦,是因为书中提及的很多问题都是我所关心的,而笔者均以很简练的语言给予了回答和梳理,让人理解起来非常清晰、不费劲。我边看边忍不住想,这风格分明就是 UC内部的培训资料嘛,有很强烈的亲切感。 本书对实战中的很多问题,都给出了详细的解题思路,方案成熟、观点中肯,体现了对技术应有的严谨和敬畏,我相信对从事DBA工作的很多技术人员来说,本书具有非常重要的参考价值。 毫不夸张地说,MySQL开源项目推动了整个互联网产品的发展。我们从中获益不少,同时也深刻体会到自由分享精神对社会进步的贡献。从晓勇写的这本书中,我也能感受

3、到这一分享理念。我非常赞 赏这种分享精神,也希望更多的技术人员都能有此回报社会的情怀。 20年前,互联网刚刚起步,工程师是靠掌握一批指令和娴熟的操作来执行运维工作的。现如今,开发和运维体系已经渐趋成熟,不少企业更是将基础运维工作交给云服务厂商,研发和运维人员得以从 烦琐的技术细节中解放出来,从而更专注于业务分析和产品设计,这个进步是巨大的。 往后看,我们正从IT时代过渡到DT时代。在DT企业中,工程师使用贝叶斯变换和机器学习来操作数据,就好比当初使用“if()http:/ path=/openresources/teach_ebook/uncompressed/16038/OEBPS/Text

4、/.else()”来编写程序一样,巨大的技术变革正在来临。 在这风起云涌之际,技术让我们再次感受到年轻和无知,希望我们能从MySQL出发,保持旺盛的好奇心和探索精神,迈向下一个崭新的时代。 梁捷(Jack) UC联合创始人,神马搜索总裁 2016年12月 前言 为什么要写本书 本书主要讲述MySQL DBA的必备技能,包括MySQL的安装部署、开发、测试、监控和运维,此外,读者还可从中学习到系统架构的一些知识。 我从业10多年,先是在传统行业做开发工程师、系统管理员、Oracle DBA,2008年因为机缘巧合投身互联网,开始从事MySQL运维工作。相对于成熟的商业数据库,MySQL缺乏高质量

5、的技术文档和 图书,我在接触MySQL的过程中,也感觉市面上的相关图书还存在一些不足,难以系统化地学习MySQL。 从一名Oracle DBA转型为一名MySQL DBA,从传统领域转投到互联网公司,即便我之前有丰富的经验,在学习MySQL的过程中也仍然走了一些弯路。成为一名MySQL DBA并不难,但成为一名高水 平的MySQL DBA则需要时间、知识、技能、经验和意识的积累。 我在学习MySQL的过程中,有时会去看技术论坛,或者通过MSN群等聊天工具咨询他人一些问题,也得到过一些朋友的帮助。国内存在一批高素质的MySQL DBA,但由于各种现实因素,有心写一本 关于MySQL DBA实战的

6、书的人很少,所以市面上缺乏高质量的相关图书不足为奇。2013年年初,华章公司的策划编辑杨绣国找到我,说希望我能写一本关于MySQL的书,我当时很犹豫,虽然我有时会在 网上回答一些问题,也定期撰写个人博客,但是,写一本书,对于我来说,是一个艰巨的任务。经过一些交流,我慢慢明确了自己的想法,其实我一直是想写一本书的,既然我对市面上的相关图书不太满 意,那么就自己写一本吧,当时我唯一欠缺的是写作经验以及时间。 我写这本书的目的是想做一个尝试引领感兴趣的读者进入MySQL数据库运维领域。国内互联网行业正在高速发展,迫切需要大量的MySQL人才,希望这本书可以帮助一些读者顺利进入数据库领 域。而且,我也

7、想将自己的一些心得分享给读者,希望热爱数据库技术的同行们在工作中少走弯路。 在技术领域工作多年后,文字写作对于我来说其实已经很陌生了,弗朗西斯培根说过,“阅读使人充实,谈论使人机敏,写作使人精确”。在本书的写作的过程中,其实我自己也获得了很多,不仅学 到了更多的知识,对于自己的精神也是一种洗礼。写作真的是一种积极而富有价值的创作,我们只有正确地掌握所讲述的内容,才能为言行思想带来正能量。 希望在这个世界上,有越来越多的人愿意分享,且能享受分享的乐趣。 读者对象 本书的主要读者是MySQL DBA,在现实中,许多公司并没有配备专职的数据库维护人员,数据库的维护工作往往也是由开发工程师和系统管理员

8、负责的,因此这本书也适用于他们。 这是一本偏向实战的技术书籍,不会过多地涉及技术的细节和原理,我会尽量直接地给出解决方案;本书除了讲MySQL技能,还花了大量篇幅讲述架构;本书不仅讲述技术,也讲述技术之外的一些运 维管理规则。对数据库的使用、维护和管理感兴趣的运维工程师、架构师、运维经理、开发工程师、测试工程师都可以将本书作为参考图书,而了解其他领域会有助于你的职业发展。 本书也适合希望转行到数据库运维领域的人士。许多人想从事IT工作,但当下时间宝贵,要想进入一个行业或改变职业方向,往往会花费巨大的时间成本,所以这本书将尽量做到简单、易懂,以节省 大家的学习成本。 如何阅读本书 本书将分为5个

9、部分,分别从入门、开发、测试、运维、性能与架构这几个方面来介绍MySQL的使用。对于初次接触MySQL的读者,建议按照章节顺序逐步学习。对于已经有一定经验的读者,则可以 选择自己感兴趣的篇章,跳过自己已经熟悉的内容。 第一部分讲述了MySQL的基础架构、权限机制、常用的存储引擎、复制架构、安装及常用命令等知识。如果读者是初次接触MySQL,那么可能还需要在这一部分上花一些时间。在掌握Linux和MySQL 的基本使用方法之后,就可以开始第二部分的学习了。 第二部分将介绍MySQL数据库开发相关的基础知识和技巧。基础知识包括关系数据模型、字符集、常用的SQL语法、范式、索引和事务等。由于开发的领

10、域很广,所以本部分仅仅选取了一些常用的技 巧分享给大家。最后会结合实际生产,提供一份开发规范供大家参考。 第三部分介绍了数据库基准测试所需要的理论知识和常用的测试工具。本部分将介绍一个MySQL的基准测试模型。 第四部分介绍了MySQL运维工作的各项职责:监控、复制、迁移、升级、备份和恢复,然后通过一些案例向读者传授一些维护技巧及处理问题的方法。读者还将学习到规模化运维MySQL的一些知识 和规则。 第五部分介绍了性能调优的一些理论知识,以及从应用程序到数据库,再到存储等各个环节的优化。由于架构和性能优化密切相关,本部分也介绍了一些MySQL DBA需要熟悉的架构优化知识。初次 接触MySQL

11、的读者对于架构优化的内容可能会感到难以理解,但随着经验的增长,再理解这些内容将不会再有问题。 本书假设读者已经对软硬件有了一定的认识,掌握了一门脚本语言,并且对Unix或Linux有一定的使用经验,对于数据库有了基本的认识。阅读本书时,读者不需要预先准备好上述的所有知识,但需要 有意识地在阅读本书之外不断地补充自己的基础知识。我会对以上内容做深入的讲解,但如果读者有基础会更好,好的基础有利于快速吸收知识和深入思考问题。如果读者还不会使用Linux和编写Shell脚 本,那么,建议尽快搭建一个学习环境。 由于DBA需要和研发、测试、产品、运营、监控等团队进行合作,所以对于相关领域所涉及的数据库知

12、识,本书也会做一些介绍。但是,由于经验侧重的关系,本书将主要从DBA的角度来讲述这些知 识和技能。 本书主要基于MySQL官方5.1版本写作,这也是目前最流行的版本,我会补充MySQL最新版本的少许内容,但跟踪MySQL新版本更合适的策略是关注官方发布的新特性说明、新版本的文档手册,跟踪 业内专家的技术博客和社交媒体等。 通过阅读本书,读者可以学到MySQL的许多知识,但是仅通过阅读是难以获得技能和经验的。读者需要有一个适合自己的MySQL测试环境,并能够不断地思考和实践自己的想法,这样才能够掌握技 能,并得到属于自己的经验。 勘误和支持 由于作者的水平有限,写作时间也很仓促,书中难免存在一些

13、错误或不准确的地方,如有不妥之处,恳请读者批评指正。为此,我特意创建了在线支持页面http:/ 错误发布在勘误表页面,若遇到任何问题,也可以访问Q 如下命令用于回收上面所赋予的权限。 mysqlrevoke select,insert,update,delete on db_name.* from user_name 10.%; 1.5 长连接、短连接、连接池 当数据库服务器和客户端位于不同的主机时,就需要建立网络连接来进行通信。客户端必须使用数据库连接来发送命令和接收应答、数据。通过提供给客户端数据库的驱动指定连接字符串后,客户端 就可以和数据库建立连接了。可以查阅程序语言手册来获知通过何种

14、方式使用短连接、长连接。 1.5.1 短连接 短连接是指程序和数据库通信时需要建立连接,执行操作后,连接关闭。短连接简单来说就是每一次操作数据库,都要打开和关闭数据库连接,基本步骤是:连接数据传输关闭连接。 在慢速网络下使用短连接,连接的开销会很大;在生产繁忙的系统中,连接也可能会受到系统端口数的限制,如果要每秒建立几千个连接,那么连接断开后,端口不会被马上回收利用,必须经历一 个“FIN”阶段的等待,直到可被回收利用为止,这样就可能会导致端口资源不够用。在Linux上,可以通过调整/proc/sys/net/ipv4/ip_local_port_range来扩大端口的使用范围;调 整/pro

15、c/sys/net/ipv4/tcp_fin_timeout来减少回收延期(如果想在应用服务器上调整这个参数,一定要慎重!)。 另外一个办法是主机使用多个IP地址。端口数的限制其实是基于同一个IP:PORT的,如果主机增加了IP,MySQL就可以监听多个IP地址,客户端也可以选择连接某个IP:PORT,这样就增加了端口资 源。 1.5.2 长连接 长连接是指程序之间的连接在建立之后,就一直打开,被后续程序重用。使用长连接的初衷是减少连接的开销,尽管MySQL的连接比其他数据库要快得多。 以PHP程序为例,当收到一个永久连接的请求时,PHP将检查是否已经存在一个(前面已经开启了的)相同的永久连接

16、。如果存在,则将直接使用这个连接;如果不存在,则建立一个新的连接。所 谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 从客户端的角度来说,使用长连接有一个好处,可以不用每次创建新连接,若客户端对MySQL服务器的连接请求很频繁,永久连接将更加高效。对于高并发业务,如果可能会碰到连接的冲击,推荐使 用长连接或连接池。 从服务器的角度来看,情况则略有不同,它可以节省创建连接的开销,但维持连接也是需要内存的。如果滥用长连接的话,可能会使用过多的MySQL服务器连接。现代的操作系统可以拥有几千个 MySQL连接,但很有可能绝大部分都是睡眠(sleep)状态的,这样的工作方式不够高效,而且连

17、接占据内存,也会导致内存的浪费。 对于扩展性好的站点来说,其实大部分的访问并不需要连接数据库。如果用户需要频繁访问数据库,那么可能会在流量增大的时候产生性能问题,此时长短连接都是无法解决问题的,所以应该进行合 理的设计和优化来避免性能问题。 如果客户端和MySQL数据库之间有连接池或Proxy代理,一般在客户端推荐使用短连接。 对于长连接的使用一定要慎重,不可滥用。如果没有每秒几百、上千的新连接请求,就不一定需要长连接,也无法从长连接中得到太多好处。在Java语言中,由于有连接池,如果控制得当,则不会对 数据库有较大的冲击,但PHP的长连接可能导致数据库的连接数超过限制,或者占用过多的内存。

18、对此,研发工程师、系统运维工程师、DBA需要保持沟通,确定合理的连接策略,千万不要不假思索就采用长连接。 1.5.3 连接池 由于一些数据库创建和销毁连接的开销很大,或者相对于所执行的具体数据操作,连接所耗的资源过多,此时就可能需要添加连接池来改进性能。 数据库连接池是一些网络代理服务或应用服务器实现的特性,如J2EE服务器,它实现了一个持久连接的“池”,允许其他程序、客户端来连接,这个连接池将被所有连接的客户端共享使用,连接池可 以加速连接,也可以减少数据库连接,降低数据库服务器的负载。 1.5.4 持久连接和连接池的区别 长连接是一些驱动、驱动框架、ORM工具的特性,由驱动来保持连接句柄的

19、打开,以便后续的数据库操作可以重用连接,从而减少数据库的连接开销。而连接池是应用服务器的组件,它可以通过参数 来配置连接数、连接检测、连接的生命周期等。 如果连接池或长连接使用的连接数很多,有可能会超过数据库实例的限制,那么就需要留意连接相关的设置了,比如连接池的最小、最大连接数设置,以及php-fpm的进程个数等,否则程序将不能申 请新的连接。 1.6 存储引擎简介 运行如下命令可查看表的引擎。 mysql show table status like sys_accont G * 1. row * Name: sys_accont Engine: InnoDB 其中,Engine栏位表示使

20、用的是何种引擎。 MySQL不同于其他数据库,它的存储引擎是“可插拔”的,意思就是MySQL Server的核心基础代码和存储引擎是分离的,你可以使用最适合应用的引擎,也就是说MySQL支持不同的表使用不同的引 擎。MySQL拥有20多个引擎,下面介绍几个常用的引擎。 1.6.1 InnoDB引擎 在MySQL 5.5及以后的版本中,InnoDB是MySQL的默认引擎,这些年来,InnoDB一直在持续改进,处理能力不断提高,其优秀的性能和可维护性使它成为生产中普遍推荐使用的引擎。它的优点有: 灾难恢复性好。 支持全部4种级别的事务。默认的事务隔离级别是可重复读(Repeatable Read)

21、,它的事务支持是通过多版本并发控制(MVCC)来提供的。 使用行级锁。 对于InnoDB引擎中的表,其数据的物理组织形式是簇表(Cluster Table),数据按主键来组织,也就是说主键索引和数据是在一起的,数据按主键的顺序物理分布。数据表的另一种常见形式是非簇 表,其索引是有序的,而数据是无序的。 实现了缓冲管理,不仅能缓冲索引也能缓冲数据,并且会自动创建散列索引以加快数据的获取。相比之下,MyISAM只是缓存了索引。 支持外键。 支持热备份。 注意 若无特殊说明,本书都是基于InnoDB引擎论述的。 1.6.2 MyISAM引擎 MyISAM是MySQL5.0/5.1的默认引擎,但MyS

22、QL官方的重心早已不在MyISAM引擎上了,近些年来,MyISAM一直没有大的改进,由于它有许多缺陷,如不支持事务、灾难恢复性差,所以不建议在 生产环境中使用。 以下是MyISAM的一些特性。 可以配合锁,实现操作系统下的复制备份、迁移。 使用表级锁,并发性差。 支持全文检索(MySQL InonoDB在5.6以后也支持全文检索)。 主机宕机后,MyISAM表易损坏,灾难恢复性不佳。 无事务支持。 只缓存索引,数据的缓存是利用操作系统缓冲区来实现的。可能引发过多的系统调用且效率不佳。 数据紧凑存储,因此可获得更小的索引和更快的全表扫描性能。 1.6.3 MEMORY存储引擎 MEMORY存储引

23、擎提供“内存”表,也不支持事务、外键。 使用内存表(内存引擎)可以显著提高访问数据的速度,可用于缓存会频繁访问的、可以重构的数据、计算结果、统计值、中间结果,但也有如下这些不足之处。 使用的是表级锁,虽然内存访问快,但如果频繁地读写,表级锁可能会成为瓶颈所在。 只支持固定大小的行。VARCHAR类型的字段会存储为固定长度的CHAR类型,浪费空间。 不支持TEXT、BLOB字段。当有些查询需要使用到临时表(使用的也是MEMORY存储引擎)时如果表中有TEXT、BLOB字段,那么会转化为基于磁盘的MyISAM表,严重降低性能。 由于内存资源成本昂贵,一般不建议设置过大的内存表,如果内存表满了,就会

24、在MySQL错误日志里发现类似“The tabletable_nameis full”这样的错误,可通过清除数据或调整内存表参数来避免 报错。 服务器重启后数据会丢失,复制维护时需要小心,具体请参考第12章。 1.6.4 ARCHIVE存储引擎 ARCHIVE存储引擎是被设计用来存储企业中的大量流水数据的存储引擎。ARCHIVE引擎使用zlib无损数据压缩,让数据都保存在压缩的存档表中。当数据被插入时,它们被压缩。 它只支持INSERT和SELECT,支持自增键及其上的索引,不支持其他索引。它适合做日志记录、用户行为分析,不需要UPDATE、DELETE和索引的数据。 1.6.5 选择合适的引

25、擎 表1-1列举了MySQL部分引擎的特性:是否支持事务、锁级别、是否支持热备份。其中,5.0版本、5.1版本默认的引擎是MyISAM,5.5版本、5.6版本默认的引擎是InnoDB。 表1-1 MySQL引擎特性对比 那么如何选择合适的引擎呢?以下是选择引擎时需要考虑的一些因素。 是否需要事务支持。 是否为高并发,InnoDB实现了行锁,这方面的表现大大优于MyISAM。 索引,不同存储引擎的索引实现不尽相同。 是否需要外键。 高效缓冲数据,InnoDB缓冲数据而MyISAM只缓冲了索引。 备份,是否需要支持热备份。 我们可以灵活地选择引擎,但是从维护的角度来说,维护统一的存储引擎会更方便,

26、所以或者全部是MyISAM,或者全部是InnoDB引擎在现实生产中更常见,也更易于管理。 1.6.6 选择何种平台 业内普遍的做法是把MySQL部署在Linux系统下,所以如果不加特别说明,本书指的都是Linux下的MySQL部署、使用。为什么互联网公司的生产环境一般使用Linux操作系统,而不考虑在Windows上 部署安装MySQL呢?部分原因如下所示。 一般来说,部署在Unix/Linux环境下的软件程序往往有更高的运行效率。因为这样一个事实:不同的操作系统在它们所采用的进程和线程模型方面有着相当大的差异。Unix/Linux编程模型对Apache 和MySQL等软件进行优化的工作不仅开

27、始得最早,进行得也最全面彻底,而Windows在这方面就远远落后了。 Oracle公司在收购MySQL后,对Windows版本做了一些增强,这样做更多的是出于商业的考虑,Windows PC和Windows Server的市场占有率高,无论是作为开发环境或独立软件供应商的后台数据 库,Windows下的MySQL都有其巨大的商业价值,而且可以对MS SQL Server构成一定的威胁,但如果想要获得更好的性能、更高的吞吐量,仍然只有在Linux平台上才能实现。 1.7 MySQL复制架构 下面简要叙述下MySQL的各种复制模式,为了方便理解,假设有A、B、C三个MySQL实例,它们的复制模式有

28、如下几种。 主从模式 AB 主主模式 AB 链式复制模式 ABC 环形复制模式 ABCA 说明 箭头的意思是复制到。 以上4种模式为复制的主要模式,生产中一般建议部署为主从模式,这也是最稳健的一种方式。 为了方便切换,在一定程度上提高可用性,也可以选择主主模式。需要注意的是,主主模式必须确保任何时刻都只有一个数据库是主动(Active)状态,也就是说同一个时刻只能写入一个主 (Master)节点,否则可能导致数据异常。 链式或环形复制在生产中很少用到,它们的主要缺点在于,随着节点的增加,整个复制系统的稳健性会下降。 后续运维章节(第12章)对复制会有更多的叙述。各种复制模式的基础都是主从模式,

29、可以说,掌握了主从模式也就掌握了其他各种模式。 1.8 一些基础概念 为了方便后续阅读,让大家对部分概念的理解保持一致,从而更好地理解书中的内容,这里有必要先对下面的这些概念进行阐述。 1.MySQL Server、MySQL实例、MySQL数据库 MySQL数据库指的是实际存在的物理操作系统文件的集合,也可以指逻辑数据的集合。为了访问、处理数据,我们需要一个数据库管理系统,也就是MySQL Server(也称为MySQL服务器)。 MySQL实例指的是MySQL进程及其所持有的内存结构,我们对数据的操作实际上是通过MySQL实例来访问物理数据库文件的。在实际生产中,可以用一个IP:PORT组

30、合来表示一个实例。 如“192.168.7.101:3307”这个MySQL实例表示在主机上起了一个MySQL服务,它的服务端口是3307。如果没有特别说明,本书中的实例一词就是指MySQL实例。 现实语境中,我们一般使用实例来描述对于数据库的操作,对于MySQL数据库、MySQL Server、MySQL实例并没有进行严格的区分,没有特别说明的话,大家可以将它们看作是同等的。 2.可扩展性 可扩展性也称为伸缩性,指的是系统不断增长其承载能力的能力。它是能满足不断增长的负荷而自身的性能仍然尚可的这样一种能力。 3.可用性 可用性可以定义为系统保持正常运行时间的百分比,比如一个系统一共运行了10

31、0分钟,有99分钟是正常运行的,那么可用性就是99%。 4.单点故障 单点故障是指系统中的某个部分,一旦失败,将会导致整个系统无法工作。为了消除单点故障,一般需要增加冗余组件或冗余系统。比如服务器的电源冗余、网卡冗余、磁盘RAID阵列,冗余的服务 器,备用的数据中心等。如果要设计高可用的服务,单点故障是需要尽量避免的。 5.读写分离 由于数据库只能接受有限的读请求。对于读请求较多的应用,数据库可能会成为瓶颈,为了增加读的能力,提高扩展性,因此引入了读写分离的技术。比如,利用复制技术配置多个从库,以承担更多 的读请求,或者应用程序直接访问读库,或者通过一个负载均衡软件分发读请求。写入操作和一些读

32、操作仍然访问主库。由于MySQL的复制是异步的,所以需要留意复制延时对于读写分离的影响。 小结 本章主要讲述了MySQL的基础架构、查询的执行过程,以及MySQL常见的部署方式。MySQL支持许多存储引擎,大家有必要熟悉和了解最常使用的两个引擎:MyISAM、InnoDB。 第2章 MySQL安装部署和入门 第1章介绍了MySQL的一些基础知识,本章将为读者介绍MySQL的部署、安装及一些常用命令和参数的设置。 2.1 如何选择MySQL版本 在选择MySQL的版本时,要根据生产情况来决定,是对现有生产环境中的数据库进行版本升级呢?还是部署新的数据库呢?如果已经在生产环境中部署了MySQL,那

33、么我们不需要急着将其升级到最 新版本,旧的版本已经在生产环境中长期稳定地运行,而新版本刚出来时,往往并不是那么稳定,通常都会有一些Bug需要修复。不稳定版本将导致生产系统的不稳定,所以,如果不是急需新版本的某种 特性,或者旧版本有严重的安全隐患,建议继续使用旧的MySQL版本即可。如果新版本已经稳定成熟且生产环境中的版本过于陈旧,那么可以考虑升级旧的MySQL版本。MySQL的发展已经有10多年了, 截至2016年6月,Oracle已经发布了MySQL 5.5、MySQL 5.6、MySQL 5.7,其中MySQL 5.5已经比较成熟,读者可以考虑把生产环境中的MySQL 5.0和MySQL

34、5.1升级到MySQL 5.5,如果需要MySQL 5.6的一些新特性,那么可以考虑将非核心的一些系统升级到MySQL 5.6。 升级到新版本,往往可以获得一定程度上的性能提升,所以,有计划地把生产环境中的MySQL 5.0、MySQL 5.1系统升级为最新的稳定成熟版本是值得的。如果升级的代价比较大,那么保持现状也是 可以的。如果生产数据库的部署是标准的,那么可以考虑编写一个自动升级的脚本。先统一升级从库,再升级主库。由于升级主库可能对服务的可用性造成影响,因此需要和相关方协调好时间计划。如果 前端有带数据库自动切换功能的中间件,或者应用层能够比较友好地处理主从切换,那么把数据库流量临时切换

35、到从库,可以大大减少对生产服务的影响。 对MySQL的分支选择也要慎重,2008年SUN公司收购了MySQL AB,但次年Oracle又收购了SUN,MySQL也是交易的一部分,这之后,Oracle的一系列举动让许多用户和开发者开始质疑MySQL在 Oracle旗下的命运,进而开始选择其他替代品。对于MySQL分支的选择,本书不做过多的叙述,现实中,已经有一些重量级公司放弃了MySQL,转向MySQL的其他分支,如MariaDB、Percona Server, 但对于绝大部分中小公司来说,使用官方的MySQL或其他分支(如MariaDB),都是比较好的选择,能够满足绝大部分的需求。笔者的建议是

36、如果公司尚在起步阶段,选择Oracle官方的版本即可。我们选 择一个产品往往会基于一个重要的理由,它必须是由一个可靠的、成熟的公司或组织来维护的,这能够确保这个产品会得到长久、稳定的支持。技术发展的目的是解放生产力,如果官方版本仍然能够为企 业带来好处,那么坚持使用原来的产品往往是一种比较好的选择,开源和闭源的分裂将是长期的,也是可以共存的,只要是对企业有利的,就不应该拒绝继续使用,除非你有明确的理由放弃它。 2.2 官方版本的安装 下面将以Linux下MySQL 5.1和MySQL 5.5的安装为例进行讲解。为了避免冲突,可以考虑先卸载Linux下自带的MySQL安装包,可使用“rpm-qa

37、|grep MySQL”检测是否安装了MySQL相关包。 推荐大家使用二进制版本的安装,主要原因是简单方便,而且官方的二进制包也是经过了充分的测试验证和参数优化的。使用源代码编译的方式安装可能会有一定性能的提升,但在实际应用中,可能 会由于编译源码而出现各种问题,如果不清楚编译的参数,建议还是使用二进制版本。此外,无论是使用二进制版本还是源码编译,大规模的部署都必须尽量做到自动化安装,否则安装部署的成本会比较 高。 2.2.1 二进制包的安装 首先登录官网,下载二进制版本,步骤如下。 1)进入。 2)选择downloads(GA)。 3)单击Download from MySQL Develo

38、per Zone。 4)单击MySQL Community Server。 5)选择相应的平台、版本,比如,选择64位Linux平台下的MySQL二进制包“Linux-Generic(glibc 2.5)(x86,64-bit),Compressed”。 下面开始二进制版本的安装。 1.在root下安装MySQL 这种安装方式为默认方式,这里以“mysql-5.1.45-linux-x86_64-icc-glibc23.tar.gz”为例进行讲解。 以root身份登录,运行如下命令安装MySQL。 useradd mysql cd /usr/local tar zxvf /tmp/mysql-

39、5.1.45-linux-x86_64-icc-glibc23.tar.gz ln -s mysql-5.1.45-linux-x86_64-icc-glibc23 mysql cd mysql cp support-files/my-f /etc/f chown -R mysql . chgrp -R mysql . scripts/mysql_install_db -user=mysql chown -R root . chown -R mysql data mv data /home/mysql/ ln -s /home/mysql/data . 上面的命令中移动data目录到其他分区(

40、/home/mysql),是因为/usr/local下的磁盘空间可能不够。一般数据目录会存放到和操作系统不一样的分区或磁盘中。 下面是安装后的目录及文件说明。 安装后在安装目录mysql/bin中有如下内容。 mysqld:MySQL服务主程序。 mysqld_safe:MySQL服务启动脚本。 mysql:MySQL命令行工具。 mysqladmin:MySQL客户端(管理数据库)。 perror:显示错误码(状态码)含义。 mysqlbinlog:是处理二进制日志文件的实用工具。 将MySQL配置为自启动服务,并启动。 cp support-files/mysql.server /etc/

41、init.d/mysqld chkconfig mysqld on /etc/init.d/mysqld start 运行如下命令设置MySQL root密码。 /usr/local/mysql/bin/mysqladmin -u root password your_password 之后,使用MySQL自带的脚本或手动执行命令强化安全,删除匿名用户。自动化的方式是在root用户下执行如下命令。 ./bin/mysql_secure_installation 然后按照提示操作,删除匿名账户和空密码的账户。 手动删除匿名账户的操作方法如下。 shell mysql -u root mysql

42、DELETE FROM mysql.user WHERE User = ; mysql FLUSH PRIVILEGES 说明 如果要手动修改授权表(使用INSERT、UPDATE或DELETE等),应该在mysql命令提示符下执行FLUSH PRIVILEGES或mysqladmin flush-privileges告诉服务器再装载授权表,否则更改将不会 生效。 建议使用/usr/bin/mysql_secure_installation脚本进行安全配置,它会帮你删除匿名账号。安装完成后,注意把要执行命令的路径添加到系统的PATH变量里,命令如下。 vi mysql/.bash_profil

43、e export PATH=/usr/local/mysql/bin:$PATH 2.安装在特定的用户下面 首先,编辑一份自己的配置文件,指定PORT、SOCKET等参数变量。安装和启动的时候需要指定这个配置文件,其他操作和默认安装类似。比如,要安装到“$HOME/app/”下,命令如下。 cd $HOME/app tar zxvf /path/mysql-5.1.45-linux-x86_64-icc-glibc23.tar.gz ln -s mysql-5.1.45-linux-x86_64-icc-glibc23 mysql cd mysql scripts/mysql_install_

44、db -defaults-file=/home/garychen/app/mysql/f -user=garychen 如果配置文件没有指定数据目录的话,则默认是在/home/garychen/app/mysql/data下。 启动方式如下。 ./bin/mysqld_safe -defaults-file=/home/garychen/app/mysql/f -user=garychen 然后再关闭数据库(对于大数据库而言,可能耗时会较多)。 2)在参数文件mysqld节中增加以下参数。 shellvi f ignore-builtin-innodb plugin-load=innodb=h

45、a_innodb_plugin.so plugin_dir=/usr/local/mysql/lib/plugin 3)启动数据库,启动数据库后执行下面的语句。 INSERT INTO mysql.plugin VALUES(INNODB, ha_innodb_plugin.so) ; INSTALL PLUGIN INNODB SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_TRX SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_LOCKS SONAME ha_innodb_plugin.

46、so; INSTALL PLUGIN INNODB_LOCK_WAITS SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_CMP SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_CMP_RESET SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_CMPMEM SONAME ha_innodb_plugin.so; INSTALL PLUGIN INNODB_CMPMEM_RESET SONAME ha_innodb_plugin.so; 4

47、)关闭数据库,然后再去掉参数文件f中的plugin-load和plugin_dir行,之后重新启动数据库,运行“SELECTinnodb_version;”以确认版本。 2.5 常用命令 本节先介绍几个常用命令,如mysql、mysqladmin、mysqldump的简单用法。后续章节还会再详述这些命令的使用。 2.5.1 使用mysql命令 首先,需要留意区分MySQL的大小写。标准的说法是,MySQL指MySQL服务器,mysql指客户端。 从Unix/Linux系统下发展出来的MySQL有着优良的设计,客户工具的所有选项都可以保存到一个“/f”的用户级配置文件里的client部分中,而且

48、它把适用于MySQL的选项集中在了MySQL 部分。可以先把默认的用户名、密码、端口等在“f”文件中配置好,以便简化登录。 另外,要说明一下,本章阐述的一些命令,为了显示方便,可能会省略用户名、密码、socket文件的功能连接参数。 首先给出连接并登录数据库时会涉及的命令,分别如下。 通过IP、端口远程连接的命令。 mysql -h ip_address -P your_port -u username -p 通过TCP/IP协议进行本地连接的命令。 mysql -u username -h 127.0.0.1 -P your_port 通过socket文件进行本地连接的命令。 mysql -

49、u username -S /path/to/mysql.sock 阅读在线帮助的命令。 mysql help contents 退出的命令。 mysql exit 简单查询的命令。 mysql SELECT VERSION(), CURRENT_DATE; mysql SELECT SIN(PI()/4), (4+1)*5; MySQL客户端还提供了一些简写命令,这些简写命令只能出现在命令行的中间或末尾,具体如下。 mysql help List of all MySQL commands: Note that all text commands must be first on line and end with ; ego (G) Send c

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/环境 > 建筑资料


经营许可证编号:宁ICP备18001539号-1