MySQL多实例

MySQL多实例

实例:实例并不是指数据库,一个实例对应的是一个数据库,多实例实际上是在一台服务器上部署多个数据库,这些数据库共享使用同一台机器的硬件资源

部署MySQL多实例

多实例安装与二进制安装步骤大致相同,前面相同的步骤此处省略,完整安装步骤请参考(https://blog.csdn.net/m0_63013378/article/details/129166406?spm=1001.2014.3001.5501)

#前面步骤省略,创建数据目录时需要创建多个,有几个实例创建几个,属主属组全改为MySQL用户
[root@test1 mysql]# mkdir -p /opt/data/{3306,3307,3308}
[root@test1 mysql]# ls /opt/data/
3306  3307  3308
[root@test1 mysql]# chown -R mysql.mysql /opt/data/
[root@test1 mysql]# ll /opt/data/
total 0
drwxr-xr-x 2 mysql mysql 6 Feb 27 11:53 3306
drwxr-xr-x 2 mysql mysql 6 Feb 27 11:53 3307
drwxr-xr-x 2 mysql mysql 6 Feb 27 11:53 3308
[root@test1 mysql]# 

初始化3306实例

[root@test1 mysql]# mysqld --initialize --user mysql --datadir /opt/data/3306

......

localhost: UA#M)NWsy04i
[root@test1 mysql]# echo 'UA#M)NWsy04i' > 3306password

初始化3307实例

[root@test1 ~]# mysqld --initialize --user mysql --datadir /opt/data/3307

.....

root@localhost: fc?nZiw>w8%w
[root@test1 ~]# echo 'fc?nZiw>w8%w' > 3307password

初始化3308实例

[root@test1 ~]# mysqld --initialize --user mysql --datadir /opt/data/3308

.......

root@localhost: .)d>f24loOfR
[root@test1 ~]# echo '.)d>f24loOfR' > 3308password

安装依赖perl和libncurses.so.5

[root@test1 ~]# yum -y install perl
[root@test1 ~]# export LC_ALL=C  //设置标准语言环境
[root@test1 ~]# yum -y install libncurses.so.5

手动生成MySQL配置文件

[root@test1 ~]# vim /etc/my.cnf 
[root@test1 ~]# cat /etc/my.cnf 
[mysqld_multi]   #多实例启动命令
mysqld = /usr/local/mysql/bin/mysqld_safe  #命令存放目录
mysqladmin = /usr/local/mysql/bin/mysqladmin  #命令存放目录

[mysqld3306]   #实例名,用来区分不同的实例
datadir = /opt/data/3306   #数据存放目录
port = 3306       #使用端口
socket = /tmp/mysql3306.sock  #套接字存放目录
pid-file = /opt/data/3306/mysql_3306.pid  #pid进程存放目录
log-error = /var/log/3306.log  #错误日志存放目录

[mysqld3307]
datadir = /opt/data/3307
port = 3307
socket = /tmp/mysql3307.sock
pid-file = /opt/data/3307/mysql_3307.pid
log-error = /var/log/3307.log

[mysqld3308]
datadir = /opt/data/3308
port = 3308
socket = /tmp/mysql3308.sock
pid-file = /opt/data/3308/mysql_3308.pid
log-error = /var/log/3308.log
[root@test1 ~]# 

启动多实例

启动方法1(一般不使用):

#只能启动,不能停止
[root@test1 ~]# mysqld_multi stop 3306
[root@test1 ~]# mysqld_multi stop 3307
[root@test1 ~]# mysqld_multi stop 3308
#只能通过杀死进程的方式停止
[root@test1 ~]# ps -ef | grep 3306 | grep -v grep | awk '{print$2}' |xargs kill -9

启动方法2:

#通过systemctl管理
[root@test1 ~]# cp /usr/lib/systemd/system/sshd.service .
[root@test1 ~]# vim sshd.service 
[root@test1 ~]# mv sshd.service mysqld3306.service
[root@test1 ~]# cat mysqld3306.service 
[Unit]
Description=mysqld3306 server daemon
After=network.target sshd-keygen.target

[Service]
Type=forking
ExecStart=/usr/local/mysql/bin/mysqld_multi start 3306
ExecStop=ps -ef | grep 3306 | grep -v grep | awk '{print$2}' |xargs kill -9
ExecReload=/bin/kill -HUP $MAINPID

[Install]
WantedBy=multi-user.target

[root@test1 ~]# cp mysqld3306.service mysqld3307.service 
[root@test1 ~]# cp mysqld3306.service mysqld3308.service 
[root@test1 ~]# vim mysqld3307.service #把3306改为3307
[root@test1 ~]# vim mysqld3308.service #把3306改为3308
[root@test1 ~]# mv mysqld3306.service mysqld3307.service mysqld3308.service /usr/lib/systemd/system/
[root@test1 ~]# systemctl daemon-reload 
[root@test1 ~]# systemctl start mysqld3306.service
#这里直接启动会报错,查看提示后显示警告:WARNING: my_print_defaults command not found.
#意思是找不到my_print_defaults命令,解决方法是做软链接,链到/usr/bin下
[root@test1 ~]# which my_print_defaults
/usr/local/mysql/bin/my_print_defaults
[root@test1 ~]# ln -sv /usr/local/mysql/bin/my_print_defaults /usr/bin/my_print_defaults
'/usr/bin/my_print_defaults' -> '/usr/local/mysql/bin/my_print_defaults'
[root@test1 ~]# 
[root@test1 ~]# 
[root@test1 ~]# systemctl start mysqld3306.service 
[root@test1 ~]# ss -anlt
State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
LISTEN        0             128                        0.0.0.0:22                      0.0.0.0:*                          
LISTEN        0             80                               *:3306                          *:*                          
LISTEN        0             128                           [::]:22                         [::]:*                          
[root@test1 ~]# systemctl stop mysqld3306.service 
[root@test1 ~]# ss -anlt
State         Recv-Q        Send-Q               Local Address:Port               Peer Address:Port        Process        
LISTEN        0             128                        0.0.0.0:22                      0.0.0.0:*                          
LISTEN        0             128                           [::]:22                         [::]:*                          
[root@test1 ~]# 
#可以正常关闭和启动

修改实例的密码

#由于是多实例,登录时需要指定套接字的路径
[root@test1 ~]# cat 3307password 
fc?nZiw>w8%w
[root@test1 ~]# mysql -uroot -p'fc?nZiw>w8%w' -S /tmp/mysql3307.sock -e "set password = password('sakura');" --connect-expired-password
[root@test1 ~]# mysql -uroot -psakura -S /tmp/mysql3307.sock 
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.7.34 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值