Mysql多实例

发布时间: 2023-11-21 13:23 阅读: 文章来源:1MUMB5173PS

一、mysql多实例介绍

1.1概念

mysql多实例就是在一台物理主机上运行多个数据库服务

1.2作用

节约运维成本,提高硬件利用率

1.3 原理

通过安装支持mysql多实例的软件包,实现在一台机器上开启多个不同的服务端口(如3306,3307);

运行多个mysql服务进程,这些进程通过不同的socket监听不同的服务端口来提供各自的服务,在提供服务时,多实例mysql在逻辑上是各自独立的,多个实例的本身是根据配置文件对应的设定值,来获得服务器的相关硬件资源多少;

启动服务都是通过软件实现各自独立启动的。

二、搭建mysql多实例

2.1 总搭建步骤:

1)安装支持多实例服务的软件包

2)修改主配置文件

3)根据主配置文件做相应的设置

4)初始化授权库

5)启动服务

6)客户端访问验证

2.2安装支持多实例服务的软件包

1)安装以及解压软件:mysql-5.7.20-linux-glibc2.12

mysql下载地址: https://dev.mysql.com/downloads/mysql/, 选择linux通用版本: Linux - Generic (glibc 2.5) (x86, 64-bit), Compressed TAR Archive

[root@proxy 08.dba-1]# tar -zxf mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz

[root@proxy 08.dba-1]# ls mysql-5.7.20-linux-glibc2.12-x86_64

bin COPYING docs include lib man README share support-files

//主要的执行程序就放在bin目录下

2)修改目录名

[root@proxy 08.dba-1]# mv mysql-5.7.20-linux-glibc2.12-x86_64 /usr/local/mysql

//由于软件包已编译安装好,因此实际上只需要解压即可以使用,修改目录名是为了更方便我们辨识,不是必要操作;

3)修改PATH变量以方便执行相关命令

[root@proxy 08.dba-1]# echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile

[root@proxy ~]# source /etc/profile

[root@proxy ~]# echo $PATH

/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin

将目录/usr/local/mysql/bin加入到bash路径,使得执行软件命令时无需输入绝对路径,非必要操作;

2.3修改主配置文件

1)备份配置文件

[root@proxy ~]# mv /etc/my.cnf /etc/my.cnf.bak

2)修改配置文件

[root@proxy ~]# vim /etc/my.cnf

//自行建立配置文件

[mysqld_multi]

mysqld=/usr/local/mysql/bin/mysqld_safe

mysqladmin=/usr/local/mysql/bin/mysqladmin

user=root

//定义启用多实例

//mysqld:指定进程文件的路径为mysqld_safe

//mysqladmin:指定管理命令路径

//user:指定调用进程的用户

[mysqld1]

port=3307

datadir=/dir3307

socket=/dir3307/mysql.sock

pid-file=/dir3307/mysql.pid

log-error=/dir3307/mysql.log

//实例进程名称为mysqld1,1表示实例名称

//port:定义端口号

//datadir:数据库目录,要手动创建

//socket:定义socket文件的路径和名称

//进程pid号文件位置

//错误日志位置

[mysqld2]

port=3308

datadir=/dir3308

socket=/dir3308/mysql.sock

pid-file=/dir3308/mysql.pid

log-error=/dir3308/mysql.log

//定义实例2

3)创建对应的数据库目录

[root@proxy ~]# mkdir /dir3307 /dir3308

2.4分别初始化授权库

1)[root@proxy ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dir3307 --initialize

2018-06-29T03:17:02.027367Z 1 [Note] A temporary password is generated for root@localhost: 0?:dBy.Bhqiz

[root@proxy ~]# mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/dir3308 --initialize

2018-06-29T02:22:41.935900Z 1 [Note] A temporary password is generated for root@localhost: Sx#J?LVRl1MA

//结果会生成初始密码,用于一会首次登陆数据库

2.5启动服务

1)起服务,查状态

[root@proxy ~]# mysqld_multi start 1

[root@proxy ~]# mysqld_multi start 2

[root@proxy ~]# netstat -ntulp | grep mysql

2)通过初始密码登陆数据库,修改管理员密码

[root@proxy ~]# mysql -uroot -p‘0?:dBy.Bhqiz‘ -S /dir3307/mysql.sock

//登陆时需要指定sock文件以区分是登陆哪个数据库

mysql> alter user user() identified by ‘123456‘;

[root@proxy ~]# mysql -uroot -p‘123456‘ -S /dir3307/mysql.sock

//重新登陆确认密码修改成功

[root@proxy ~]# mysql -uroot -p‘Sx#J?LVRl1MA‘ -S /dir3308/mysql.sock

mysql> alter user user() identified by ‘123456‘;

[root@proxy ~]# mysql -uroot -p‘123456‘ -S /dir3308/mysql.sock

2.6客户端访问验证

1)数据库授权客户端访问用户

mysql> grant all on *.* to client@‘%‘ identified by ‘123456‘;

2)客户端通过指定不同的端口访问

[root@host50 ~]# mysql -h192.168.4.15 -uclient -p123456 -P3307

2.7停止服务

[root@proxy ~]# mysqld_multi --user=root --password=123456 stop 1

[root@proxy ~]# mysqld_multi --user=root --password=123456 stop 2

//密码为登陆数据库密码,非系统管理员密码

[root@proxy ~]# ss -ntulp | grep mysqld

2.8注意事项

1)关于初始化授权库:

-mysqld --user=mysql --basedir=软件安装目录 --datadir=要初始化的数据库目录 --initialize

//由于本人之前已安装过其他版本的mysql,因此用户mysql已存在,没有的朋友可自己创建用户并设置初始化数据库目录所有者为mysql;

//初始化完成后在最后一行会显示出初始密码,若忘记了可以重新初始化生成一次,当密码显示出来后,并不代表初始化完成,等到密令行重新出现才算完成

//初始化完成后可以看到数据库的所有者为mysql用户

//初始化成功后,可以看到数据库目录下有8个文件:

auto.cnf ibdata1 ib_logfile1 sys

ib_buffer_pool ib_logfile0 mysql performance_schema

2)关于启动服务:

//服务启动成功多出5个文件:

ibtmp1 mysql.log mysql.pid mysql.sock mysql.sock.lock

//初始化没报错,但服务启动没成功,则会出现.err报错日志文件,根据提示信息排错;

3)关于命令

本实例中执行的命令均是在程序添加到PATH路径下再执行的,若没添加要使用绝对路径执行命令;

•••展开全文