Linux下MySQL端口多实例的实现

前言

在学习过程中想要通过使用不同端口实现起多个MySQL实例,但是在网上搜寻一番后没能找到一个完整的案例,这是一个学习记录文章,记录我的实现过程和遇到的问题。


一、前置步骤

MySQL想要实现多案例有几种方式,这里记录我学习的一种,使用mysql压缩包的形式通过配置多个配置文件实现。
系统:Linux 版本:CentOS 镜像:Rocky8.6 虚拟机:VMware
MySQL包:mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
ps:本方法需要卸载原有mysql,不要原有my.cnf和mysql-server.cnf文件。

二、步骤

1.配置MySQL相关

1)下载MySQL包
因为使用的是本地虚拟机,所以直接在https://downloads.mysql.com/archives/community/网页选择Linux通用8.0.26版本压缩包,通过远程软件ssh传输进虚拟机

2)解压MySQL包
解压下载的mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz包并移动到/usr/local/mysql目录下:

tar -xf mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
mv mysql-8.0.26-linux-glibc2.12-x86_64 /usr/local/mysql 

3)创建MySQL组和用户
未安装过MySQL服务的主机是不会有mysql用户,需要自行创建

groupadd mysql
useradd  -r -g mysql -s /sbin/nologin mysql

ps:-r 创建系统用户 -g指定基本组 -s指定登陆器

4)修改mysql文件夹权限

chown mysql:mysql -R /usr/local/mysql
chmod 0775 -R /usr/local/mysql/

5)将MySQL命令路径永久加入到PATH变量

vim .bash_profile
在结尾export PATH上添加PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
***
PATH=$PATH:$HOME/bin
PATH=$PATH:$HOME/bin:/usr/local/mysql/bin
export PATH

保存后使用source加载配置文件
source .bash_profile
使用echo $PATH查询
echo $PATH

ps:在这里添加后可以输入mysql回车查看是否报错,我这里显示mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory,解决办法为使用yum查询后下载对应包:

yum provides /usr/lib64/libtinfo.so.5
yum -y install ncurses-compat-libs-6.1-9.20180224.el8.x86_64
也可以通过以下命令检查环境:
ldd /usr/local/mysql/bin/mysql

安装后在此运行mysql显示ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)为正常的,因为还没有写配置文件。

2.编写MySQL配置文件

在/etc下编写my.cnf文件:

# vim /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root

[mysqld1]
datadir = /sqldata/mysqld1
port = 3306
log-error = /sqldata/mysqld1/mysqld1.err
pid-file = /sqldata/mysqld1/mysqld1.pid
socket = /sqldata/mysqld1/mysqld1.sock

[mysqld2]
datadir = /sqldata/mysqld2
port = 3307
log-error = /sqldata/mysqld2/mysqld2.err
pid-file = /sqldata/mysqld2/mysqld2.pid
socket = /sqldata/mysqld2/mysqld2.sock

3.创建存放数据文件夹并初始化

ps:在这里需要注意一下系统语言环境是否为en_US.UTF-8,这对于后面获取密码很重要,若为zh_CN.UTF-8则获取不到密码。
ps的ps:实测对于初始化没影响,只是后面起服务时会出现

Wide character in print at /usr/local/mysql/bin/mysqld_multi line 684.

并不影响正常使用。

查询语言环境:
echo $LANG
修改为en_US.UTF-8
echo 'LANG=en_US.UTF-8' > /etc/default/locale
加载配置文件
source /etc/default/locale

1)创建文件夹

 mkdir -p /sqldata/mysqld{1,2}

2)初始化目录
ps:初始化目录需要使用mysqld命令,运行是可能会出现mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory缺少libaio.so.1,使用yum查找/usr/lib64/libaio.so.1并安装对应包。

yum provides /usr/lib64/libaio.so.1
yum -y install libaio-0.3.112-1.el8.x86_64

初始化使用mysqld --initailize --console 因为是自定义数据目录,所以需要使用–datadir指定数据目录,用–user指定用户这样初始化的目录拥有者和属组都为mysql防止因为权限不够而起不了服务。

记录最后一行的密码,若没有显示密码本文后面会给出解决方案
mysqld --initialize --console --datadir=/sqldata/mysqld1 --user=mysql

ps:这里要记住最后一行输出的密码比如:

[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: UQ*TyHyMk3wi

后面的root@localhost: UQTyHyMk3wi分别为登陆用户:root,登陆ip:localhost,和登陆密码:UQTyHyMk3wi

4.起服务

1)起第一个实例服务
ps:新建虚拟机可能没有perl环境,用yum下载个包就行,且因为前文将/usr/local/mysql/bin放入默认环境,所以可以直接使用mysqld_multi命令。

/usr/local/mysql/bin/mysqld_multi start 1
或
mysqld_multi start 1
通过socket连接
mysql -uroot -p'上条命令给出的密码' -S /sqldata/mysqld1/mysqld1.sock

2)起第二个实例服务

/usr/local/mysql/bin/mysqld_multi start 2
或
mysqld_multi start 2
通过socket连接
mysql -uroot -p'上条命令给出的密码' -S /sqldata/mysqld2/mysqld2.sock

3)查询端口
查询端口是否有3306和3307

ss -antulp | grep mysql

4)停止实例

mysqld_multi --user root --password 密码 stop 1
mysqld_multi --user root --password 密码 stop 2

ps:不知道密码解决方式:
先查询端口对应pid

ss -antulp | grep mysql

直接杀死进程

kill 对应PID

修改配置文件/etc/my.cnf添加skip-grant-tables

[mysqld1]
skip-grant-tables
***
[mysqld2]
skip-grant-tables
***

起服务

/usr/local/mysql/bin/mysqld_multi start 1
/usr/local/mysql/bin/mysqld_multi start 2

修改后可以直接无密码登录

mysql -uroot  -S /sqldata/mysqld1/mysqld1.sock

查看存放密码的表头名

desc  mysql.user ;

把mysql库下user表中 用户root的密码设置为无

update mysql.user set authentication_string="" where user="root";

修改后退出登录将修改的my.cnf中的skip-grant-tables注释掉或者删掉就可以了,之后按上述停服务步骤去掉密码重起一遍服务就可以正常使用,可根据需求重设或不设密码。

总结

本文记录了我通过使用不同端口起多个MySQL实例实现过程和遇到的问题,如果能有效帮助其他人就挺不错的·。

  • 8
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值