Linux下MySql多实例免安装部署

 目前,LAMP、LNMP是两套非常流行的开源Linux Web服务搭建方式。以免费高效著称,是很多网站和Web系统的首选服务器架构。

        业务数据往往是很宝贵的资源,业务数据的损坏和丢失,对企业来讲是一个重大损失。因此,对业务数据做实时的备份和恢复显得尤为重要。

        在LAMP平台和LNMP平台上,数据的存储主要是存储在MySql数据库上。MySql从3.23.15版本开始,提供了主从同步复制机制,通过复制机制,可以达到数据实时备份的目的。同时,还可以使用该技术,进行数据读写分离,提高效率。因此,在常规情况下,一般是一台Web,3台DB。

        可能你有充足的资金预算,可以购买3台DB服务器来满足业务需要,也可能资金预算不足,只能买两台DB服务器甚至一台DB服务器。那么,必然会有一台服务器运行至少两个数据库示例。

        本文重点讲述如何在一台Linux服务器上快速部署多个MySql数据库实例。软件情况如下:

        1.操作系统:RedHat Linux 5.4 Enterprise

        2.MySql版本:MySql-5.1.44

        下面开始吧。

        1.获得MySql编译好的二进制程序文件及相关配置文件

        获得编译好的二进制程序文件有三种方式,第一种是直接在MySql的官方网站下载编译好的二进制版本,第二种是在已经安装好MySql数据库的服务器上提取,第三种,就是下载源代码包自己编译,得到编译后的二进制版本。

        本文采用的是第二种方式,从已经安装好的MySql服务器上提取编译过的MySql文件(安装采用的是源代码本机编译形式安装)。

        提取方法:

        1.1登录MySql服务器,获取MySql安装路径。可以在mysql控制台下,使用如下指令获取到安装路径:

        show variables like '%basedir%';

        查询结果如下:

Linux下MySql多实例免安装部署

        从上图可以看出,我们的MySql是安装在/usr/local/mysql/目录下的。得到了mysql的安装路径,就可以开始MySql文件的提取操作了。

        1.2登录到安装mysql的linux服务器上,进入mysql的安装目录。我们需要进入的目录是:/usr/local/。

        使用指令如下:

        cd /usr/local

        操作结果如下:

Linux下MySql多实例免安装部署

        可以使用pwd指令,查看当前所在的目录位置。操作指令如下:

        pwd

        操作结果如下:

Linux下MySql多实例免安装部署

        可以看出,我们当前是在/usr/local目录。现在我们看看目录下的文件夹及文件情况。使用指令如下(两个小写的L字母):

        ll

        操作结果如下:

Linux下MySql多实例免安装部署

        在上图的操作文件及文件夹列表中,我们看到了mysql目录,这个就是mysql的安装目录。

        1.3提取mysql安装文件

        找到了MySql,下一步就是将这个mysql文件夹及下面所有的子文件夹和文件全部打包。打包我们使用linux系统自带的tar指令。指令如下:

        tar -zcf /root/mysql-noinstall-5.1.44.tar.gz mysql

        指令格式:tar 参数 打包后的文件存储路径 要打包的目录或文件的路径

        操作结果如下:

Linux下MySql多实例免安装部署

        在这里,因为没有在参数上加v参数,所以没有列出打包文件的详细步骤,不过文件的确已经打包好并且放到/root下了。可以进入/root目录去看看。指令如下:

        cd #

        ll

       操作结果如下:

Linux下MySql多实例免安装部署

        可以看到,mysql-noinstall-5.1.44.tar.gz文件已经创建好了。下一步就是将文件传输到要安装mysql的服务器上了。传输方式很多,选一种自己习惯的方式,只要文件被拷贝过去就行了。

        2.在目标服务器上创建用户和用户组

        mysql服务器最好是限制启动mysql服务的用户的权限,使他们只能操作mysql自己的目录,不能操作其他目录。这样设置有利于服务器的安全管理。

        2.1创建mysql用户组

        我们使用groupadd指令,在linux服务器上创建用户组。指令如下:

        groupadd mysql

        操作结果如下:

Linux下MySql多实例免安装部署

        2.2创建mysql用户

        我们使用useradd指令,在linux服务器上创建用户组,指令如下:

        useradd -g mysql -s "/sbin/nologin" mysql

        指令含义:useradd 参数 用户名

        参数含义:-g mysql,将用户加入mysql用户组

                              -s "/sbin/nologin",设定用户的shell权限,用户不能登录shell,这样就限制了mysql这个用户,只能在linux服务器本地使用,不能      从远程使用该用户登录linux服务器

        操作结果如下:

Linux下MySql多实例免安装部署

       

        3.将打包的mysql安装文件解包

        用户和用户组创建好了,现在可以开始解包安装文件到我们的目录下了。由于我们要在同一台服务器上运行3个mysql实例。因此,目录规划如下:

        所有的mysql,都安装在/usr/local目录下,用不同的mysql目录区分不同的mysql实例,我们采用目录名+端口号的形式来区分。因此,我们的/usr/local下的mysql目录结构如下:

        /usr/local/mysql

        /usr/local/mysql3306

        /usr/local/mysql3307

        /usr/local/mysql3308

        注意:mysql这个目录,是为了配置硬链接而存在的,方便在任何目录下,都可以访问到mysql客户端程序。

       3.1将打包文件mysql-noinstall-5.1.44.tar.gz解包

       首先,将mysql-noinstall-5.1.44.tar.gz文件解包到/usr/local/mysql目录

       3.1.1进入/usr/local目录

       指令:

        cd /usr/local

        pwd

       操作结果如下:

Linux下MySql多实例免安装部署

        3.1.2解压文件

        指令:

        tar -zxf /root/mysql-noinstall-5.1.44.tar.gz

        ll

        执行结果如下

Linux下MySql多实例免安装部署

        可以看到,mysql这个目录已经创建好了,/usr/local/mysql这个目录的创建工作就完成了。

        3.1.3构建mysql3306、mysql3307、mysql3308这3个目录

        我们已经有了mysql目录,构建另3个目录就很简单了,直接拷贝mysql目录就可以了。

        指令:

        cp -R mysql mysql3306

        cp -R mysql mysql3307

        cp -R mysql mysql3308

        ll

        操作结果如下:

Linux下MySql多实例免安装部署

        到这里,我们的目录创建工作就结束了。

        3.2安装系统数据库

        由于多实例的需要,我们将所有的数据文件存储在/home目录下,数据文件目录分别对应于安装目录。命名方式一致。

        目录规划如下:

        /home/mysql3306

        /home/mysql3307

        /home/mysql3308

        安装mysql默认数据库,可以使用mysql安装文件的bin目录下的mysql_install_db程序来完成。

        指令如下:

         /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql3306 --datadir=/home/mysql3306 --user=mysql

         执行结果如下:

Linux下MySql多实例免安装部署

        重复以上步骤,将basedir和datadir修改成另外两个目录,就可以完成默认数据库的安装工作。

        /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql3307 --datadir=/home/mysql3307 --user=mysql

        /usr/local/mysql/bin/mysql_install_db --basedir=/usr/local/mysql3308 --datadir=/home/mysql3308 --user=mysql

        操作完成后,到/home目录下去看看吧。

        指令:

        ll /home/

        如图所示:

Linux下MySql多实例免安装部署

        至此,系统数据库的安装工作就完成了。

        3.3创建并编辑配置文件my.cnf

        由于在多实例的环境下,mysql的各个实例可以使用单独的配置文件,因此,我们也采用每个mysql实例使用单独的配置文件的方式。

        mysql的示例配置文件,存放在mysql安装目录下的share/mysql/目录下,提供了my-huge.cnf、my-innodb-heavy-4G.cnf、my-large.cnf、my-medium.cnf和my-small.cnf共5种配置文件模板。可以根据服务器的实际需要进行配置文件的选择。在这里,我们使用的是my-medium.cnf这个配置文件模板。

        3.3.1 拷贝my-medium.cnf文件到mysql各个示例的顶级目录

        指令如下:

        cp mysql/share/mysql/my-medium.cnf mysql3306/my.cnf

        cp mysql/share/mysql/my-medium.cnf mysql3307/my.cnf

        cp mysql/share/mysql/my-medium.cnf mysql3308/my.cnf

        操作结果如下:

Linux下MySql多实例免安装部署

        进入各个目录,我们就可以看到各个目录下,都有一个my.cnf配置文件了。

        如图所示:

Linux下MySql多实例免安装部署

        3.3.2编辑配置文件

        由于配置文件使用的是默认的模板,我们需要根据我们的实际情况进行修改才能使用。

        对配置文件的编辑如下:

        1.用#注释掉[client]配置节的所有信息

        2.在[mysqld]配置节,将port配置修改为我们要监听的端口3306、3307或3308

        3.在[mysqld]配置节,将skip-locking配置修改为:skip-external-locking

        4.在[mysqld]配置节,将sock配置修改为各个实例的socket文件路径

        5.在[mysqld]配置节,修改server-id配置节,参数为IP地址第四节+端口号,如:IP:10.34.40.40,端口3306,参数为:403306

        6.在[mysqld]配置节,增加pid-file配置节,参数各个实例的pid文件保存路径

       如:我们要配置3308实例,则修改如下:

[client]

#password       = your_password

#port           = 3306

#socket         = /tmp/mysql.sock

[mysqld]

pid-file        = /home/mysql3308/mysql3308.pid

log-error       = /home/mysql3308/mysql3308.err

port            = 3308

socket          = /tmp/mysql3308.sock

Skip-external-locking

……省略没有修改的配置……..

server-id       = 403308

……省略没有修改的配置……..

        根据以上信息,选择自己习惯的编辑器,依次修改/usr/local/mysql3306、/usr/local/mysql3307、/usr/local/mysql3308目录下的my.cnf为相应的配置信息。

        至此,配置文件创建编辑完成。

        3.4创建并修改服务文件

        mysql的服务文件,和mysql模板配置文件一样,存放在安装目录的share/mysql目录下。名为mysql.server。

        如图:

Linux下MySql多实例免安装部署

        拷贝该文件到/etc/init.d目录下,并以mysqld+端口号的形式命名。如:3306端口的服务文件,文件名为mysqld3306

        指令如下:

        cp mysql/share/mysql/mysql.erver /etc/init.d/mysqld3306

        结果如下:

Linux下MySql多实例免安装部署

        重复以上操作,生成3307和3308端口的服务文件

        cp mysql/share/mysql/mysql.erver /etc/init.d/mysqld3307

        cp mysql/share/mysql/mysql.erver /etc/init.d/mysqld3308

       下面来编辑服务文件,

        需要修改服务文件的basedir和datadir配置节。将配置节的信息设定为各自的实例程序和数据所在的路径。

        如:3306端口的服务文件,设置如下:

        basedir=/usr/local/mysql3306

        datadir=/home/mysql3306

        重复以上步骤,用自己习惯的编辑器编辑3个服务文件,mysqld3306、mysqld3307和mysqld3308。

        至此,服务文件的创建和编辑操作完成。

        现在我们来启动mysql服务器吧。指令如下:

        service mysqld3306 start

        service mysqld3307 start

        service mysqld3308 start

        执行结果如下:

Linux下MySql多实例免安装部署

        可以看到,我们的服务已经正常启动了。现在,我们来检验以下,linux系统的3306、3307、3308端口是否已经在监听状态了。

        使用指令如下:

        netstat -an | grep LISTEN

        结果如下:

Linux下MySql多实例免安装部署

        现在,我们可以看到,3306、3307、3308端口已经处于监听状态了。我们再看看3306、3307、3308端口的监听程序是什么。

        使用指令:

        lsof -i :3306

        结果如下:

Linux下MySql多实例免安装部署

        可以看到,3306端口是mysqld这个程序在监听。同样,我们检测下3307和3308端口。

        结果如下:

Linux下MySql多实例免安装部署

        可以看出,都是mysqld程序在监听。也就是说明,mysqld程序正在监听3306、3307、3308端口。需要注意的是,监听这3个端口的mysqld程序,是分别存放在/usr/local/mysql3306/bin、/usr/local/mysql3307/bin、/usr/local/mysql3308/bin中,是3个实例各自的程序在监听,互不影响。

        4.设置mysql客户端

        在mysql服务端配置完成之后,我们需要使用mysql客户端链接到mysql的各个实例上,看看mysql是否是按照我们设定的参数在运行。mysql的客户端,存放在/usr/local/mysql/bin目录下,文件名是mysql。这个目录是在配置mysql多实例的时候,从tar.gz包里面解压出来的(可以参考前面的文档)。

        进入/usr/local/mysql/bin目录,运行mysql。

        指令如下:

        /usr/local/mysql/bin/mysql

        让我们看看发生了什么。报错了,找不到一个文件[SOCK文件]。

        如图所示:

Linux下MySql多实例免安装部署

        这是因为,mysql配置了多实例之后,各个实例必须使用单独的sock文件防止相互影响。因此,在多实例的环境下,链接mysql服务器,需要指定特定的sock文件所在的路径。我们修改一下mysql的指令,修改如下:

        /usr/local/mysql/bin/mysql --socket=/tmp/mysql3306.sock

        执行,结果如图所示:

Linux下MySql多实例免安装部署

        我们已经正常连接到mysql服务器上了。现在我们来看看是不是监听的3306端口,数据文件和程序文件是不是我们指定的目录。

        我们用指令show variables like '%port%';来查看当前监听的端口。

        在mysql > 提示符后面,输入指令:

        show variables like '%port%';

        执行结果如下:

Linux下MySql多实例免安装部署

        我们可以看到,当前mysql监听的端口,的确是3306。然后我们来看看mysql的程序目录和数据目录。

        在mysql > 提示符后面,输入指令:

        show variables like '%dir%';

        执行结果如下:

Linux下MySql多实例免安装部署

        看输出结果的第一行和第四行,basedir是程序目录,datadir是数据目录。我们可以看到,程序目录是/usr/local/mysql3306,数据目录是/home/mysql3306.和我们实例配置时的设定是一致的。

        有时候,在mysql客户端链接mysql服务器实例的时候,会提示error while loading shared libraries: libmysqlclient.so.16这样的错误。出现这个错误,可能是因为你的linux操作系统中的这个库文件位置不正确或不存在。解决方法很简单,将/usr/local/mysql/lib/mysql/libmysqlclient.so.16这个文件拷贝到/usr/bin目录下即可。指令如下:

        cp /usr/local/mysql/lib/mysql/libmysqlclient.so.16 /usr/lib

        5.设置mysql各个示例随操作系统自启动

        mysql服务器实例配置好了,现在mysql也可以运行起来了。不需要每次启动服务器,都去手动启动mysql服务。设置指令如下:

        chkconfig --level 3 mysqld3306 on

        chkconfig --level 3 mysqld3307 on

        chkconfig --level 3 mysqld3308 on

        执行结果如下:

Linux下MySql多实例免安装部署

        现在,我们来验证下,这3个实例是否添加成功:

        使用指令:

         chkconfig --list

        执行结果:

Linux下MySql多实例免安装部署

        可以看到,mysqld3306、mysqld3307和mysqld3308已经添加成功。现在,mysql的各个实例就能随linux操作系统启动而自动启动了。

        到此,我们的mysql多示例免安装配置就算全部完成了。剩下的,就是如何使用各个实例了。

相关推荐