Mysql入门与实践

建议大家重点掌握MySQL,其次是MongoDB。

第2章 MySQL数据库入门知识介绍

2.1 MySQL介绍

2.1.1 MySQL简介

当下,MySQL因为其功能稳定、性能卓越,且在遵守GPL协议的前提下,可以免费使用与修改,因此深受用户喜爱。

关系型数据库的特点是将数据保存在不同的表中,再将这些表放入不同的数据库中,而不是将所有的数据统一放在一个大仓库里,这样的设计加快了MySQL的读取速度,而且它的灵活性和可管理性也得到了很大的提高。

2.1.2 MariaDB数据库的诞生背景介绍

自甲骨文公司收购MySQL之后,MySQL在商业数据库与开源数据库领域的市场占有份额都跃居第一,这样的格局引起了部分业内人士的担忧,因为商业数据库的老大有可能将MySQL闭源,为了避免Oracle将MySQL闭源,而无开源的类MySQL数据库可用,MySQL社区采用了分支的方式——MariaDB数据库就这样诞生了,MariaDB是一个向后兼容的数据库产品,可能会在以后替代MySQL,其官方地址为https://mariadb.org/。不过,这里还是建议大家选择更稳定且使用更广泛的MySQL数据库,可以先测试MariaDB数据库,等使用的人员多一些,社区更活跃后再正式考虑使用也不迟。

2.1.3 为什么选择MySQL数据库

原因可能有以下几点。

[插图]MySQL性能卓越,服务稳定,很少出现异常宕机的情况。

[插图]MySQL开放源代码且无版权制约,自主性强,使用成本低。

[插图]MySQL历史悠久,社区及用户非常活跃,遇到问题,可以寻求帮助。

[插图]MySQL软件体积小,安装使用简单,并且易于维护,安装及维护成本低。

[插图]MySQL品牌口碑效应好,使得企业无须考虑即可直接用之。

[插图]LAMP、LNMP、LNMT(tomcat)等流行Web架构都含有MySQL。

[插图]MySQL支持多种操作系统,提供了多种API,支持多种开发语言,特别是对流行的Java、Python、PHP等语言都有很好的支持。

2.2 MySQL数据库分类与版本升级

MySQL数据库的官方网站为http://www.mysql.com

MySQL数据库也有社区版和企业版之分,且这两个版本又各自分了四个版本依次发布,这四个版本分别为:Alpha版、Beta版、RC版和GA版本。

2.2.1 MySQL数据库企业版与社区版的区别

1.MySQL数据库企业版介绍

MySQL企业版是由MySQL公司内部发布的,它参考了社区版的先进代码功能和算法,是MySQL公司的赢利产品,需要付费才能使用及提供服务支持,稳定性和可靠性无疑都是最好的,当然了,企业腰包得够鼓才能买得起。

2.MySQL数据库社区版介绍

MySQL社区版则是由分散在世界各地的MySQL开发者、爱好者以及用户参与开发与测试的,包括软件代码的管理、测试工作,也是他们在负责。社区也会设

立BUG汇报机制,收集用户在使用过程中遇到的BUG情况,相比于企业版,社区版的开发及测试环境没有那么严格。

MySQL是成熟产品,企业版与社区版之间在性能方面相差不大。它们的区别主要集中在以下几个方面。

[插图]企业版本组织管理与测试环节控制更严格,稳定性更好

[插图]企业版不遵守GPL协议,社区版遵守GPL协议,可以免费使用!

[插图]使用企业版后可以购买相关的服务,比如,享受7×24小时的技术支持以及定时打补丁等服务,但是用户必须为此支付服务费用。社区版的服务质量与时效性等就无法与企业版相比了。

[插图]社区版本的维护服务只能靠社区提供,其无法像企业版本那样获得故障及补丁解决服务,但是,使用社区版是完全免费的方式。

2.2.2 MySQL数据库的四种发布版本介绍

国内门户提供的MySQL下载地址:http://mirrors.sohu.com/mysql/

2.3 MySQL数据库软件的命名介绍

MySQL数据库软件的版本号是由3个数字和一个后缀组成。例如,mysql-5.6.40. tar.gz的版本号,其数字的含义分别如下。

[插图]第1个数字(5)是主版本号,描述了文件格式。所有版本5的发行都有相同的文件格式。

[插图]第2个数字(6)是发行级别。主版本号和发行级别组合到一起便构成了发行序列号。

[插图]第3个数字(40)是指在此发行系列的版本号,随每个新分发版而递增。通常你需要已经选择的发行(release)的最新版本(版本)。

每次更新之后,版本字符串的最后一个数字会递增。如果是相对于前一个版本增加了新功能或有微小的不兼容性,那么字符串的第二个数字会递增。如果文件格式改变,那么第一个数字会递增。

据官方讲,MySQL 5.6是有史以来最好的版本,是世界上使用最广的开源数据库,它提供了一套新的、先进的功能,使我们能够建设新一代基于网络和嵌入式的应用和服务。

第3章 MySQL数据库安装方法及安装实践

3.1 MySQL数据库的安装方法及选择

3.1.1 yum/rpm方式安装MySQL

MySQL官方网站及相关镜像网站提供了不同版本的RPM安装包,并且针对不同的硬件或操作系统平台,安装包的类型也会有区别。在使用时,可以到官方网站的下载页面进行选择,国内有一些互联网公司提供了镜像文件下载,比如搜狐、阿里云公司提供的镜像资源就非常不错。

下面是搜狐网提供的数据库软件镜像地址:http://mirrors.sohu.com/mysql

注意:yum/rpm安装方式适合所有MySQL软件产品。

1.rpm包方式安装MySQL

rpm包的安装方式非常简单,这里以el6平台下的MySQL 5.6.40版本为例,首先,要通过上述搜狐镜像地址下载到如下四个MySQL相关软件安装包。

一般来说,其中的MySQL-server-5.6.40-1.el6.x86_64.rpm和MySQL-client-5.6.40-1. el6.x86_64.rpm这两个软件包是必须要安装的,至于另外两个软件包,则可视实际需要进行安装,不过一般建议一起安装。

可以把这四个rpm包上传到服务器的目录中,然后执行如下rpm命令进行安装:

执行上述命令即可完成MySQL软件的安装。

在采用rpm包安装方式时,必须要官方或第三方提供了现成的rpm软件包,否则是无法使用该方式安装的。另外,和直接采用yum的安装方式相比,rpm包的安装方式往往可以选择更新的版本,但是rpm包安装也有自身的问题,例如,无法满足定制化安装,比如,不能进行编译参数、路径等的更改。

2.yum方式安装MySQL

yum方式安装MySQL数据库时,只需要执行一个命令“yuminstall mysql-server -y”即可,yum方式的安装原理是在执行yum安装命令之后,其会自动从yum源地址下载相应名称的MySQL数据库rpm包,然后到系统上安装,并自动解决各种软件包之间的依赖问题。这是一个非常不错的安装软件的方式,不仅仅是针对MySQL,安装其他软件也是如此。

yum安装方式的最大优点就是超级简单,但是它也有自身的问题:例如它继承了rpm包的无法定制化安装的问题;另外一个缺点是采用默认的yum安装时,一般随yum源附带的软件版本都比较低,例如,截至作者写作本文时(2018.5),使用CentOS 6.9Linux默认yum安装的MySQL版本仅为5.1.73。

3.1.2 采用常规方式编译安装MySQL

采用常规方式编译安装MySQL时,适合使用第一条最正宗的MySQL产品线5.2及以前版本:

所谓常规方式编译安装MySQL就是延续早期MySQL的3部曲安装方式,即“./conf igure; make; make install”,下面是老男孩在早期的企业生产场景下操作过的具体命令及参数:

安装到这里,MySQL数据库还不能正常启动使用,还需要进行初始化数据库等工作,具体可以参考后文的安装部分。

此种方式适合所有MySQL 5.2.xx及以前的产品系列,是最常规的编译方式,在当下的互联网企业中,此种编译安装的方法已经很少使用了,原因是第一条产品线的产品(MySQL 5.2.xx及以前的产品系列)用得越来越少了,被第二条产品线(MySQL 5.4.xx及以后的产品系列)的产品逐渐替代了,因此,老男孩也不建议读者再使用第一条产品线的产品作为对外的业务库。

3.1.3 采用cmake方式编译安装MySQL

考虑到MySQL 5.4.xx及以后系列产品的特殊性,其编译方式和早期的第一条产品线的有所不同,这里采用cmake或gmake的方式编译安装。即“./cmake; make; make install”,生产场景的具体命令及参数具体如下:

安装到这里,MySQL数据库仍然无法正常启动使用,还需要进行初始化数据库等工作,具体可以参考后文的安装部分,另外,cmake等用于编译的工具也需要提前进行安装。相关参数的说明,请见本章结尾的内容。

如果上述操作未出现错误,则MySQL 5.6.40软件cmake方式的安装就算成功了。

3.1.4 采用二进制方式免编译安装MySQL

采用二进制方式免编译安装MySQL的方法和yum/rpm包安装的方式类似,适合各类MySQL产品系列,不需要复杂的编译设置及编译时间等待,直接解压下载软件包,就相当于编译方式的makeinstall步骤完成了,然后只要进行初始化数据库的操作,即可完成并启动。此方式的MySQL软件包一般都比较大,最大可达180MB,采用二进制方式免编译安装MySQL的方法在后文会详细讲解。

3.1.5 如何正确选择MySQL的安装方式

若是对数据库要求不太高的场景,则可以采用yum/rpm方式安装MySQL,例如,并发不大,只是在公司内部(wiki系统)、企业内部(Zabbix监控系统,OpenStack后台管理)等需要数据库的一些应用场景,当然,生产场景下也是可以选择yum或rpm方式进行安装的。

但是,有很多大型网站或门户网站,在安装MySQL时,往往会有各种定制化、初始化的需求,这时,要根据企业的需求先把源码包制作成rpm包,然后搭建自己的yum仓库,最终采用“yum install mysql-server -y”的方式进行安装,这样做的优点是既兼顾了yum/rpm安装方式简单的优点,又用到了源码包安装方式的可定制性,但是,使用这个方法需要一定的技术能力,此部分的内容建议参考老男孩教育为读者提供的如下博文。

自动化运维必备技能——定制属于自己的RPM包http://blog.oldboyedu.com/autodeploy-rpm/。

自动化运维必备技能——搭建属于自己的YUM仓库http://blog.oldboyedu.com/autodeploy-yum/。

二进制免编译安装方式简单方便,且适合5.0-5.1和5.5-5.7系列,是不少专业DBA的选择,普通Linux运维人员一般多采用编译的方式进行安装,对应到MySQL 5.0-5.1系列就是常规编译方式,对应到MySQL 5.5-5.7系列就是cmake编译方式。

所以综合来讲,这些安装方式都是可以使用的,只是不同层次的人习惯不同,实际应用的性能差距不是很大。

老男孩的建议:首先是选择MySQL 5.5或以上的数据库版本,当数据库服务器机器数量少的话,可以采用cmake编译方式安装,这是很多运维人员的习惯选择。在数据库服务器机器数量多的情况下,可采用二进制免编译方式安装,这是某些DBA的偏爱,若是数据库服务器机器数量特别大,且对定制化要求很高,则可以选择通过源码定制rpm包,搭建yum仓库的安装方式。当然了,采用此种方法的读者也要具备这方面的能力才行,前文已经给出了做rpm定制以及yum仓库搭建的地址,这里不再赘述。

3.2 安装并配置MySQL数据库

3.2.1 安装MySQL数据库

1.MySQL数据库的安装环境准备

如果读者没有物理服务器环境,则可以搭建vmware等虚拟机环境学习,相应地需要准备如下内容。

1)请提前加大VM虚拟机硬件的内存,最好将内存设置成2GB以上。

2)最好提前下载好要安装的MySQL相关软件包(http://mirrors.sohu.com/mysql/),如果本书使用的软件版本已更新,请更新至5.6的最新版即可。

3)重视每个操作过程的输出,有错误要解决掉然后再继续,不能忽略掉操作中的错误(error)。

4)建议进入虚拟机界面去执行make以及makeinstall,通过SSH操作有时会导致网络中断。

特别提示:Linux操作系统的安装选包很重要,如果系统安装的不合适(不要按照上述文章来安装,除非你真正知道自己在做什么),会导致MySQL无法正常安装及使用。

2.安装MySQL需要的依赖包和编译软件

当前的Linux系统环境情况如下:

(1)安装MySQL需要的依赖包

安装MySQL之前,最好先安装MySQL需要的依赖包,不然后面会出现很多报错信息,到那时还得再回来安装MySQL的依赖包。安装命令如下:

提示:安装后使用rpm -qa ncurses-devel libaio-devel命令进行检查,如果出现两行如上信息则表示安装成功。

(2)安装编译MySQL需要的软件

由于MySQL 5.5及以上的系列产品要采用特殊的编译方式安装,因此,需要先安装常用的编译MySQL的工具cmake软件包,命令如下:

提示:安装后使用“rpm -qa cmake”检查,如果出现一行如上信息则表示安装成功。

此外,也有网友采用源码包的方式安装cmake的,但是操作起来比较复杂,因此一般建议读者选择这个简单的yum安装方法。

3.开始安装MySQL

为了让大家学习更多的MySQL技术,本文选择以相对复杂的源代码安装方式为例来讲解MySQL多实例安装,大型公司一般都会将MySQL软件定制成rpm包,然后放到yum仓库里,使用yum安装,中小型企业里的二进制和编译安装的区别不大。

使用二进制方式安装MySQL的方法见http://oldboy.blog.51cto.com/2561410/1893734。

(1)建立MySQL用户账号

首先以root身份登录到Linux系统中,然后执行如下命令创建mysql用户账号:

根据上述结果输出,可以看到mysql用户和组已经创建成功。

(2)获取MySQL软件包

MySQL软件包的下载地址为:http://dev.mysql.com/downloads/mysql/(如果地址变更无法下载,则可以去http://mirrors.sohu.com/mysql下载或者去本章开头提供的云盘地址去下载相关的软件包)。可以把软件下载到客户端电脑本地后,使用rz等工具传到Linux里,或者找到网络下载地址后,直接在Linux里使用wget命令下载下来。

提示:本书以MySQL编译的方式进行讲解,在生产场景中,二进制和源码包两种安装方法都是可用的,其应用场景一般没什么太大差别。不同之处在于:二进制的安装包较大,名字和源码包也有些区别,二进制的安装过程比源码更快,更多区别在前文选择安装方式章节中已经讲解过了,这里就不再赘述了。

(3)采用编译方式安装MySQL

配置及编译安装的步骤具体如下。

第一步,下载mysql软件包,命令及操作如下:

第二步,解压并配置mysql,命令及操作如下:

提示:

编译时可配置的选项很多,常见的参数选项请参见3.4节的选项说明讲解,此处就不特别说明了

2)编译MySQL需要安装gcc等工具,此部分在安装操作系统时就已经安装上了,具体请参考CentOS 6操作系统的详细安装步骤,可参见《跟老男孩学Linux运维:Web集群实战》—书或免费部署文章http://book.51cto.com/art/201605/510756.htm

第三步,编译并安装mysql,命令及操作如下:

如果是虚拟环境测试,以上两步过程可能有些长,请耐心等待。

第四步,为mysql安装路径设置不带版本号的软链接/application/mysql,操作命令如下:

如果上述操作未出现错误(每个步骤结束后,都可以使用“echo$?”查看返回值是否为0,为0则表示正确),则查看/application/mysql/目录;若其下有内容,则表示MySQL5.6.40源代码包采用cmake方式安装成功了。

3.2.2 创建MySQL数据库配置文件并对数据库目录授权

MySQL 5.5及老版数据库默认为用户提供了多个配置文件模板,但是MySQL 5.6的support-f iles目录下已经没有配置文件模板了。

关于mysql的配置文件my.cnf参数的更多说明及调优,请参看本书后面的章节。

3.2.3 初始化MySQL数据库文件

上述配置完毕后,就可以初始化数据库数据文件了,这个步骤其实也可以在编译安装MySQL之后就操作,只不过放到这里更合理一些。

(1)初始化MySQL数据库

上述配置完毕后,就可以初始化数据库数据文件了,这个步骤其实也可以在编译安装MySQL之后就操作,只不过放到这里更合理一些。

(1)初始化MySQL数据库

初始化数据库的核心命令为:

提示:--basedir=/application/mysql/为MySQL的安装路径,--datadir为数据文件目录。另外,需要注意mysql_install_db和MySQL 5.1的路径不同,MySQL 5.1在MySQL bin路径下。

整个初始化的操作过程为:

此步骤必须要初始化成功,否则,后面会出现登录不了数据库等各种问题。

(2)初始化数据库的原理及结果说明

初始化数据库的实质就是创建基础的数据库系统的库文件,例如,生成mysql库表等。

初始化数据库之后,查看数据目录,可以看到多了如下文件:

(3)MySQL初始化故障排错集锦

本节的所有故障都必须要解除,即必须要出现两个Yes字样,否则,后面就算数据库服务可以启动,也会出现登录不了MySQL数据库等各种问题,因此读者若遇到了故障无法解决,则可以提前看一下本章结尾的故障集锦内容。

3.2.4 配置并启动MySQL数据库

1)设置MySQL启动脚本:

2)启动MySQL数据库:

提示:禁止使用kill -9、killall -9等命令强制杀死数据库,这会引起数据库无法启动等故障发生。企业中曾发生过的血的教训案例请看http://oldboy.blog.51cto.com/2561410/1431161。

3)检查MySQL数据库是否启动

如果发现3306端口没起来,则请使用tail -100/application/mysql/data/机器名.err检查日志报错进行调试。经常查看服务运行日志是个很好的习惯,也是高手的习惯。

4)查看MySQL数据库启动结果日志:

本例查看了错误日志的命令及错误日志中的内容,这里省略了大部分日志内容,只给出了默认的10行,如果有错误,一般会显示error字样。

5)设置MySQL开机自启动:

若MySQL安装及使用出现故障,则可根据下面的分析思路进行检查。

  • 看所有步骤执行命令返回的屏幕输出,不要忽略关键的输出内容。
  • 查看mysql错误日志/application/mysql/data/机器名.err。
  • 辅助查看系统日志/var/log/messages。
  • 如果是MySQL关联了其他服务,则还要同时查看相关服务的日志。
  • 仔细阅读,重新查看所有操作的步骤是否正确,书写的命令及字符是否都正确

 

经常查看各种服务运行日志是个很好的习惯,也是成长为高手的必经之路!

3.2.5 将MySQL相关命令加入全局路径

如果不为MySQL的命令配置全局路径,就会无法在命令行直接输入mysql这样的客户端命令,只能使用全路径命令(/application/mysql/bin/mysql),这种附带路径输入命令的方式很麻烦。下面来看看配置的具体方法。

1)确认mysql命令所在的路径:

提示:更简单的设置方法为使用下面的命令做软链接:ln -s /application/mysql/bin/* /usr/local/sbin/,把mysql命令所在的路径链接到全局路径/usr/local/sbin/的下面。

要特别强调的是,务必把MySQL命令路径放在PATH路径中其他路径的前面,否则,可能会导致使用的mysql客户端等命令和本章编译安装的mysql服务对应的mysql命令不是同一个,进而产生错误。下面的网址中给出了因为MySQL路径配置问题而导致的错误案例:http://oldboy.blog.51cto.com/2561410/1122867,该错误实际上就是因为使用yum安装的MySQL客户端命令访问了编译安装的服务端而导致的。

若出现登录故障,则可以通过以下方法排查。

如果这里提示无法登录,排除了数据库启动问题之后,则很可能是数据库初始化文件有问题。例如,执行mysql后提示如下错误:

解决办法:重新初始化数据库即可,此问题一般都是数据库初始化问题或者数据库文件损坏以及目录权限问题。

MySQL安装完成后,默认情况下,管理员账号root是无密码的,极不安全,必须要处理一下。

3.2.7 基本的MySQL安全配置

1.为root用户设置密码

MySQL管理员的账号root密码默认为空,极不安全,可以通过mysqladmin命令为mysql不同实例的数据库设置独立的密码;

2.清理mysql服务器内无用的用户

有时使用drop命令可能会无法删除对应用户。比如,当数据库内的host等字段为大写及特殊Linux主机名时,删除用户就会遇到问题,例如:

可使用DML语句,并采用delete命令删除来解决此问题,具体命令如下:

3.删除mysql数据库内无用的test库

 

表3-2 MySQL 5.6编译参数及说明

 第4章 MySQL多实例数据库企业级应用实践

4.1 MySQL多实例介绍

4.1.1 什么是MySQL多实例

根据老男孩的经验,简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如3306、3307),同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看起来是各自独立的,它们根据配置文件的对应设定值来获得服务器相应数量的硬件资源。

打个比方吧,MySQL多实例就相当于房子的多个卧室,每个实例可以看作是一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu、mem、disk)、软件资源(CentOS操作系统)可以看作是房子的卫生间、厨房、客厅,是房子的公用资源。若你是北漂的小伙伴,与朋友一起租房,相信对此能有更好地理解,大家蜗居在一起,休息时在自己的卧室,但出来活动肯定是要共用上述公共资源的。图4-1是MySQL多实例形象示意图。

其实很多网络服务都是可以配置多实例的,例如Nginx、Apache、Haproxy、redis、Memcahed等都可以。而且这在门户网站中使用得很广泛,当然,随着虚拟化、云计算的产生和发展,也会通过不同的虚拟机切割资源配置独立的服务,但虚拟化存在一定的缺陷,例如,相比于物理机,其性能会有所下降等。

4.1.2 MySQL多实例的作用与问题

本节首先来看看MySQL多实例的作用,具体如下。

[插图]可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离。

[插图]节约服务器资源。若公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且还需要用到主从复制等技术,那么选择多实例就再好不过了。

MySQL多实例有它的好处,也有其弊端,比如,会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。这就相当于大家住在一个房子的不同卧室中,早晨起来上班,都要刷牙、洗脸等,这样卫生间就会长期处于占用状态,其他人则必须要等待。不同实例获取的资源是相对独立的,无法像虚拟化一样完全隔离。

4.2 MySQL多实例的生产应用场景

若公司资金紧张,公司业务访问量不太大,但又希望不同业务的数据库服务各自能够尽量独立地提供服务而互相不受影响,或者,还有需要主从复制等技术提供备份或读写分离服务的需求,那么,多实例就再好不过了。比如:可以通过3台服务器部署9~15个实例,交叉做主从复制、数据备份及读写分离,这样就可以达到9~15台服务器每个只装一个数据库才有的效果。这里需要强调的是,所谓的尽量独立是相对的。

4.2.2 并发访问不是特别大的业务

当公司业务访问量不太大的时候,服务器的资源基本上都是浪费的,这时就很适合多实例的应用,如果对SQL语句的优化做得比较好,MySQL多实例会是一个很值得使用的技术,即使并发很大,合理分配好系统资源以及搭配好服务,也不会有太大的问题。

4.2.3 门户网站应用MySQL多实例场景

门户网站通常都会使用多实例,因为配置硬件好的服务器,可以节省IDC机柜空间,同时,运行多实例也会减少硬件资源占用率不满的浪费。比如,百度公司的很多数据库都是多实例的,不过,一般是从库采用多实例,例如某部门中使用的IBM服务器为48核CPU,内存96GB,一台服务器运行3~4个实例;此外,新浪网也有采用多实例的情况,内存48GB左右。

另外,新浪网站安装数据库时,一般采用编译安装的方式,并且会在进行优化之后做成rpm包,以便统一使用

4.3 MySQL多实例常见的配置方案

4.3.1 单一配置文件、单一启动程序多实例部署方案

下面是MySQL官方文档提到的单一配置文件、单一启动程序多实例部署方案,老男孩老师不推荐此方案,这里仅作为知识点提及,后文不会再涉及此方案。my.cnf配置文件示例(MySQL手册里提到的方法)如下:

4.3.2 多配置文件、多启动程序部署方案

多配置文件、多启动程序部署方案,是本文主要讲解的方案,也是老男孩老师常用并极力推荐的方案。下面来看一下配置示例。

以下是老男孩已经部署好的MySQL双实例的目录信息及文件注释说明:

提示:这里的配置文件my.cnf、启动程序mysql都是独立的文件,数据文件data目录也是独立的。

4.4 安装并配置多实例MySQL数据库

4.4.1 安装MySQL多实例

1.安装MySQL需要的依赖包和编译软件

(1)安装MySQL需要的依赖包

安装MySQL之前,最好先安装MySQL需要的依赖包,不然后面会出现很多报错信息,到那时再回来安装MySQL的依赖包会很麻烦。安装命令如下:

提示:安装后检查,如果出现两行信息则表示安装成功。

(2)安装编译MySQL需要的软件

由于MySQL 5.5及以上系列产品采用了特殊的编译方式安装数据库,因此,需要安装常用的编译MySQL的工具cmake软件包,命令如下:

提示:安装后使用“rpm -qa cmake”检查,如果出现一行如上信息则表示安装成功。此外,网上有资料选用源码包的方式安装cmake,比较复杂,因此一般建议读者选择这种简单的yum安装cmake的方法。

2.开始安装MySQL

为了让大家学习更多的MySQL技术,这里选择以相对复杂的源代码安装为例来讲解MySQL多实例的安装。大型公司一般都会将MySQL软件定制成rpm包,然后放到yum仓库里,使用yum安装,在中小型企业里,二进制和编译安装方式的区别不大。

(1)建立MySQL用户账号

首先以root身份登录到Linux系统中,然后执行如下命令创建mysql用户账号:

根据上述结果输出,可以看到mysql用户和组已经成功创建。

(2)获取MySQL软件包

MySQL软件包的下载地址为:http://dev.mysql.com/downloads/mysql/(如果地址变更无法下载,则去http://mirrors.sohu.com/mysql上下载,或者通过老男孩在本文开头给出的云盘地址下载)。可以把软件下载到客户端电脑本地后使用rz等工具传到Linux里,或者找到网络下载地址后直接在Linux里使用wget下载。

提示:本例是以MySQL编译的方式来讲解。在生产场景中,二进制和源码包两种安装方法都是可用的,其应用场景一般没有什么太大的差别。不同之处在于,二进制的安装包较大,二进制的安装过程比源码更快,此外在名字和源码包方面也有些区别。

(3)采用编译方式安装MySQL

4.4.2 创建MySQL多实例的数据文件目录

在老男孩的企业中,通常以“/data”目录作为MySQL多实例总的根目录,然后规划不同的数字(即MySQL实例端口号)作为“/data”下面的二级目录;不同的二级目录对应的数字就作为MySQL实例的端口号,以区别不同的实例;数字对应的二级目录下包含MySQL的数据文件、配置文件以及启动文件等。

 

下面以配置3306、3307两个实例为例进行讲解。创建MySQL多实例的目录如下:

提示:

1)“mkdir -p /data/{3306,3307}/data”相当于“mkdir-p /data/3306/data; mkdir -p /data/3307/data”的两条命令。2)如果是创建多个目录,则可以增加如3308、3309这样的目录名,在生产环境中,一般以2~4个实例为佳。

4.4.3 创建MySQL多实例的配置文件

MySQL 5.5及以下数据库默认为用户提供了多个配置文件模板,但是MySQL 5.6版本只有一个模板文件。示例如下:

上面是单实例的默认配置文件模板,如果配置多实例,则其与单实例会有所不同。为了让MySQL多实例之间彼此独立,需要为每一个实例建立一个my.cnf配置文件和一个启动文件mysql,让它们分别对应自己的数据文件目录data。

不同的实例需要添加的my.cnf内容也会有区别,具体见表4-1,其中的配置是由官方的配置模板修改而来的,当然,在实际工作中则是拿早已配置好的模板来进行修改的,可以通过rz等方式上传配置文件模板my.cnf文件到相关目录下。

4.4.4 创建MySQL多实例的启动文件

MySQL多实例启动文件的创建和配置文件几乎一样,也可以通过vim命令来添加,示例如下:

MySQL多实例启动文件的创建和配置文件几乎一样,也可以通过vim命令来添加,示例如下:

需要添加的MySQL启动文件内容见表4-2。当然,在实际工作中是拿早已配置好的模板来进行修改的,可以通过rz等方式上传配置文件模板mysql文件到相关目录下。

 

最终完成后的多实例根/data目录结果如下:

需要特别说明一下的是,在多实例启动文件中,启动MySQL不同实例服务所执行的命令实质上是有区别的,例如,启动3306实例的命令如下:

其中,“--defaults-f ile=/data/3307/my.cnf”表示指定配置文件启动,“>/dev/null 2>&1”表示将正确输出和错误输出定向到空。

4.4.5 配置MySQL多实例的文件权限

4.4.6 MySQL相关命令加入全局路径的配置

1.配置全局路径的意义

如果不为MySQL的命令配置全局路径,就会无法直接在命令行输入mysql这样的命令,这时只能使用全路径命令(“/application/mysql/bin/mysql”),而这种带着路径输入命令的方式很麻烦。

2.配置MySQL全局

路径的方法

1)确认mysql命令所在的路径,命令如下:

2)在PATH变量前增加/application/mysql/bin路径,并追加到/etc/prof ile文件中,示例如下:

提示:更简单的设置方法为使用如下命令来做软链接:

ln -s /application/mysql/bin/* /usr/local/sbin/把mysql命令所在路径链接到全局路径/usr/local/sbin/的下面。

3.因MySQL环境变量配置顺序导致的错误案例

(2)初始化数据库的原理及结果说明

初始化数据库的实质就是创建基础的数据库系统的库文件,例如,生成MySQL库表等。

第5章 MySQL常用管理基础知识实践

5.1 启动与关闭MySQL

因为MySQL数据库中存放着企业的重要数据,所以数据库数据必须保持高度的一致性,这也导致了MySQL的内部管理机制很复杂,而这就使得MySQL数据库服务不同于常规的Web服务,是不能随意关闭的,因此,能否正确地关闭和开启MySQL,是初学者管理MySQL数据库时最关键的事情之一。

5.1.1 单实例MySQL启动与关闭知识

1.正确启动单实例MySQL数据库

初始化数据库时有这么一条命令:

这条命令是把数据库自带的启动脚本,复制到/etc/init.d/目录实现管理MySQL服务的启动和停止。

下面就为大家介绍启动单实例数据库的两种正确方法。

正确启动MySQL服务的命令如下:

提示:根据输出可以得知数据库成功启动了。这里的“/etc/init.d/mysqld start”相当于“mysqld_safe 2>&1> /dev/null &”。

(2)用初始化数据库时MySQL系统给出的方法启动

7.关闭MySQL数据库方法小结

关闭MySQL数据库的方法选择顺序如下。

第一种使用MySQL自带的管理脚本,示例如下:

第二种为mysqladmin管理方法

第三种为利用系统进程管理命令关闭MySQL:

5.2 MySQL连接原理方法及提示符设置

5.2.1 客户端连接MySQL服务器原理结构

3.MySQL连接方式介绍

如图5-2所示,MySQL的连接方式有TCP/IP和Socket连接方式。TCP/IP连接方式一般是应用(PHP/Python/Java程序)和数据库服务不在一台机器上的连接方案,对于mysql命令来说就是指定-h参数登录,命令如下:

本地连接数据库常用的方式一般是Socket连接方式,特别是多实例本地MySQL登录,本书就首推socket的连接方式,命令如下:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

似水流年 光阴已逝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值