linux下mysql免安装_Linux下MySql多实例免安装部署

本文详细介绍了如何在Linux服务器上快速部署多个MySQL数据库实例,包括创建用户和用户组、解包MySQL安装文件、安装系统数据库、编辑配置文件my.cnf以及设置MySQL服务随操作系统自启动。通过这种方法,可以在同一台服务器上运行多个独立的MySQL实例,实现数据备份、读写分离等需求。
摘要由CSDN通过智能技术生成

目前,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%';

查询结果如下:

ef9c36796d89dbbf354f7c98e0e4245a.png

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

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

使用指令如下:

cd /usr/local

操作结果如下:

b6d7c85e83d577df2c7da71ea6ae2415.png

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

pwd

操作结果如下:

f02041ffba73c089700b7feb6a967206.png

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

ll

操作结果如下:

621abbedbe5eb2fc60c75e67f95453ca.png

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

1.3提取mysql安装文件

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

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

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

操作结果如下:

65b24656cbcd514d98d488f94fbf410d.png

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

cd #

ll

操作结果如下:

8ba39309ccddc1c95ea23ee5e0f9d63a.png

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

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

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

2.1创建mysql用户组

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

groupadd mysql

操作结果如下:

a3dda9db5109a50b91597059f2da6d86.png

2.2创建mysql用户

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

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

指令含义:useradd 参数 用户名

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

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

操作结果如下:

9b0f3ca8fed8aa0bcb0db5198edaa222.png

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

操作结果如下:

5ca129e68dc861e9525196ab82f52fcb.png

3.1.2解压文件

指令:

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

ll

执行结果如下

42291db50c1bb33ad31292a6ccc6ea3d.png

可以看到,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

操作结果如下:

21c58c93813a3d6b2e717f736dc6270d.png

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

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

执行结果如下:

247674fd45ec57f7887f31c86e89668b.png

重复以上步骤,将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/

如图所示:

d2f0162a0e855a9d72cad4d0072f76cb.png

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

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

操作结果如下:

afaa521075ab676d5806de5c828da036.png

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

如图所示:

b5d4657142e552c9ab2a74bf7176a0f7.png

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。

如图:

8b5a88490714a3ed3ab44248539745f6.png

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

指令如下:

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

结果如下:

c63f0eb43ad72e888423ad6c89729468.png

重复以上操作,生成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

执行结果如下:

0e0c9020154c5f21a536d0ca98e5cbf7.png

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

使用指令如下:

netstat -an | grep LISTEN

结果如下:

cce4c87dd1ced3e7858f5468449d8421.png

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

使用指令:

lsof -i :3306

结果如下:

bd4d46fd2cf972674cd4958990b15282.png

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

结果如下:

bf55909436a062a328068fbc9cc4884e.png

可以看出,都是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文件]。

如图所示:

70bb15fe0f7ed197a25a895b29ca6bbb.png

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

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

执行,结果如图所示:

ba9b2d6101e9ec22471ac4dc66340d9f.png

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

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

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

show variables like '%port%';

执行结果如下:

566655c6f99fac53a2a37d28ae443015.png

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

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

show variables like '%dir%';

执行结果如下:

0891a7d9727189b3d7b174a7dd8c72aa.png

看输出结果的第一行和第四行,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

执行结果如下:

6e71e2cb1b2da6bc807c8623509a70c3.png

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

使用指令:

chkconfig --list

执行结果:

e8270474e1ead534d3a5defd1e5cb7ed.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值