mysql5.7.39部署多实例

多实例学习

  • 多实例就是在一台服务器上同时开启多个不同的数据库服务端口(例如3306、3307),同时运行多个MYSQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
  • 这些MySQL实例共用一个Mysql数据库安装程序,使用不同的my.cnf配置文件启动,在提供服务时,多实例MySQL在逻辑上看,是各自独立的,他们根据配置文件的设定来获得服务器相应数量的资源。

MySQL多实例的优缺点

  • 多实例优点:
  1. 可以有效利用服务器资源,当单个服务器资源富裕时,可以充分利用资源提供更多的服务。
  2. 节约服务器资源,若公司资金不是充裕,又想数据库能独立提供服务,还想用主从复制等技术
  • 多实例缺点
  • 存在资源互享抢占的问题,当某个数据库实例并发很高且SQL查询耗时,那整个实例会消耗大量的系统资源,包括CPU、磁盘IO等,导致同一个服务器的其它数据库实例可能响应慢,毕竟它不会像虚拟机一样做到完全隔离。
  • MySQL多实例的应用场景

(1)中小型公司的选择:公司业务访问量不大,希望不同的业务使用不同的数据库服务而互相不受影响,建于资金不足,可食用多实例,比如可以通过3台服务器部署9-15个实例,交叉做主从复制、数据备份及读写分离,这样也能达到多个服务器只装1个数据库的效果。

(2)并发访问不是很大的业务:当业务访问量不大,服务器资源基本都是空闲的,这时很适合多实例应用,如果对sql语句优化较好,多实例是一个很值得使用技术,即使并发打,合理分配资源以及搭配号服务,问题也不大。

(2)门户网站应用:门户网站通常会使用多实例,因为配置硬件好的服务器,可以节省IDC机柜空间,同时运行多个实例可以减少资源浪费情况,例如一个pc服务器,16核CPU,内存128G内存,可运行3-4个实例绰绰有余。

  • MySQL多实例的部署方案

有三种方式:

  1. mysqld_safe --defaults-file=/etc/my.cnf &
  2. mysqld --defaults-file=/etc/my.cnf &
  3. mysqld_multi

下面重点介绍mysqld_multi

mysqld_multi 是perl实现的通过mysqld_safe或mysqld来启动实例;通过调用mysqladmin实现多实例启动关闭的一组脚本程序

需要在配置文件中声明:[mysqld_multi] ,[mysqldN],其中[mysqldN]这部分定义会覆盖[mysqld]

mysqld_multi启动的实例N的参数是[mysqld] + [mysqldN]两部分的组合

rpm -qa|grep mysql
  1. CentOS7下还需要查找是否存在mariadb包:
rpm -qa|grep mariadb
  1. 如果输入上述两个命令后都输出存在有包,则需要执行删除命令。
rpm -e --nodeps mysql-libs-5.1.73-1.el6.x86_64
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
  1. 检查依赖
rpm -qa|grep libaio
rpm -qa|grep net-tools
  1. 准备安装mysql
    mysql5.7.39
    链接:https://pan.baidu.com/s/1ZPzh8NwRNTHgB664g_FPOw?pwd=1005
    提取码:1005
tar zxvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz -C /usr/local
whereis mysql

mysql: /usr/local/mysql /usr/share/mysql

  1. 创建用户和组
groupadd mysql
useradd -r -g mysql mysql

7.修改my.cnf

#vi /etc/my.cnf
[mysqld_multi]       #启动多实例
mysqld     = /usr/local/mysql/bin/mysqld_safe   #指定进程文件路径
mysqladmin = /usr/local/mysql/bin/mysqladmin    #指定管理命令路径
user       = root    #指定进程用户

[mysqld3306]     #实例进程名称,3306是服务编号
socket     = /tmp/mysql.sock1   #指定sock文件的路径和名称
port       = 3306    #指定端口 
pid-file   = /data/3306/mysqld.pid   #进程文件pid号文件按位置 
datadir    = /data/3306    #数据库目录,最好提前创建 
log-error  = /data/3306/mysqld.log    #错误日志位置 

[mysqld3307]
socket     = /tmp/mysql.sock2
port       = 3307
pid-file   = /data/3307/mysqld.pid
datadir    = /data/3307
log-error  = /data/3307/mysqld.log

[mysqld3308]
socket     = /tmp/mysql.sock3
port       = 3308
pid-file   = /data/3308/mysqld.pid
datadir    = /data/3308
log-error  = /data/3308/mysqld.log
  1. 创建目录并授权
mkdir -p /data/330{6..8}
chown -R mysql:mysql /data/330{6,8}
  1. 初始化服务
[root@localhost ~]# mysqld --initialize --datadir=/data/3306 --basedir=/usr/local/mysql --user=mysql
CeCCp2K2>r0

[root@localhost ~]# mysqld --initialize --datadir=/data/3307 --basedir=/usr/local/mysql --user=mysql
wqE!fRaFw4ou

[root@localhost ~]# mysqld --initialize --datadir=/data/3308 --basedir=/usr/local/mysql --user=mysql
 )Eo()IDks9g4
  1. 启动多实例
mysqld_multi start 3306
mysqld_multi start 3307
mysqld_multi start 3308
  1. 初始化登录实例 -S跟上socket路径
mysql -uroot -p'wqE!fRaFw4ou' -S /tmp/mysql.sock2

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '99wuhan_mysql';

新密码登录实例

mysql -uroot -p'99wuhan_mysql' -S /tmp/mysql.sock2

初始化登录实例- S跟上socket路径

mysql -uroot -p')Eo()IDks9g4' -S /tmp/mysql.sock3

修改密码

ALTER USER 'root'@'localhost' IDENTIFIED BY '99wuhan_mysql';

新密码登录实例

mysql -uroot -p'99wuhan_mysql' -S /tmp/mysql.sock3

查看mysql服务

ps -ef |grep mysql

MySQL多实例创建不了MYSQL服务 mysql多实例部署_linux

停止实例

[root@localhost ~]# mysqld_multi stop 3307,3308