mysql 多实例配置记录(多配置文件)

什么是MySQL多实例?

 

  简单地说,MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306/3307)同时运行多个MySQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。

  这些MySQL多实例共用一套MySQL安装程序,使用不同的my.cnf(也可以相同)配置文件、启动程序(也可以相同)和数据文件。在提供服务时,多实例MySQL在逻辑上看来是各自独立的,他们根据配置文件对应设定值,获得服务器响应数量的资源。

MySQL多实例的作用与问题

有效利用服务器资源

  当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务,且可以实现资源的逻辑隔离

节约服务器资源

  当公司资金紧张,但是数据库又需要各自尽量独立地提供服务,而且,需要主从复制等技术时,多实例就再好不过了

  MySQL多实例有它的好处,但也有弊端,比如,会存在资源互相抢占的问题。当某个数据库实例并发很高或者有SQL慢查询时,整个实例会消耗大量的系统CPU、磁盘I/O等资源,导致服务器上的其他数据库实例提供服务的质量一起下降。

多实例配置思路

1     多套配置文件
2     多套 数据
3     多个socket
4     多个端口
5     多个日志文件
6     多个启动程序

多实例配置过程

一、安装数据库

正常编译安装,安装配置完成后先不启动

第一个里程碑:多实例配置文件准备

[root@db02 /]# tree /data/
/data/
├── 3306
│   ├── my.cnf
│   └── mysql
└── 3307
    ├── my.cnf
    └── mysql

3306端口my.cnf配置文件

[root@db02 /]# cat data/3306/my.cnf 
[client]
port            = 3306
socket          = /data/3306/mysql.sock

[mysqld]
user    = mysql
port    = 3306
socket  = /data/3306/mysql.sock
basedir = /application/mysql
datadir = /data/3306/data
log-bin = /data/3306/mysql-bin
server-id = 6

[mysqld_safe]
log-error=/data/3306/mysql_3306.err
pid-file=/data/3306/mysqld.pid

3307端口my.cnf配置文件

[root@db02 /]# cat  /data/3307/my.cnf 
[client]
port            = 3307
socket          = /data/3307/mysql.sock

[mysqld]
user    = mysql
port    = 3307
socket  = /data/3307/mysql.sock
basedir = /application/mysql
datadir = /data/3307/data
log-bin = /data/3307/mysql-bin
server-id = 7

[mysqld_safe]
log-error=/data/3307/mysql_3307.err
pid-file=/data/3307/mysqld.pid

编写管理脚本3306

#!/bin/sh
  #3306 start scripts
  #init
  port=3306
  mysql_user="root"
  CmdPath="/application/mysql/bin"
  mysql_sock="/data/${port}/mysql.sock"
  mysqld_pid_file_path=/data/3306/3306.pid
 start(){
     if [ ! -e "$mysql_sock" ];then
          printf "Starting MySQL...\n"
         sleep 3
     else
         printf "MySQL is running...\n"
         exit 1
     fi
 }
 stop(){
     if [ ! -e "$mysql_sock" ];then
         printf "MySQL is stopped...\n"
         exit 1
     else
         printf "Stoping MySQL...\n"
         mysqld_pid=`cat "$mysqld_pid_file_path"`
          if (kill -0 $mysqld_pid 2>/dev/null)
            then
              kill $mysqld_pid
              sleep 2
          fi
     fi
 }

 restart(){
     printf "Restarting MySQL...\n"
     stop
     sleep 2
     start
 }

 case "$1" in
     start)
         start
     ;;
     stop)
         stop
     ;;
     restart)
         restart
     ;;
     *)
         printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
 esac

编写管理脚本3307

#!/bin/sh
  #3307 start scripts
  #init
  port=3307
  mysql_user="root"
  CmdPath="/application/mysql/bin"
  mysql_sock="/data/${port}/mysql.sock"
  mysqld_pid_file_path=/data/3307/3307.pid
 start(){
     if [ ! -e "$mysql_sock" ];then
          printf "Starting MySQL...\n"
         /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
         sleep 3
     else
         printf "MySQL is running...\n"
         exit 1
     fi
 }
 stop(){
     if [ ! -e "$mysql_sock" ];then
         printf "MySQL is stopped...\n"
         exit 1
     else
         printf "Stoping MySQL...\n"
         mysqld_pid=`cat "$mysqld_pid_file_path"`
          if (kill -0 $mysqld_pid 2>/dev/null)
            then
              kill $mysqld_pid
              sleep 2
          fi
     fi
 }
 
 restart(){
     printf "Restarting MySQL...\n"
     stop
     sleep 2
     start
 }
 
 case "$1" in
     start)
         start
     ;;
     stop)
         stop
     ;;
     restart)
         restart
     ;;
     *)
         printf "Usage: /data/${port}/mysql {start|stop|restart}\n"
 esac

注意脚本要给继续权限才能够正常使用  chmod 777 -R  目录

 第二个里程碑:创建数据目录并授权

[root@db02 /]# mkdir /data/{3306,3307}/data -p
[root@db02 /]# chown -R mysql.mysql /data/

第三个里程碑:初始化数据

cd /application/mysql/scripts  && \
./mysql_install_db  --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql
./mysql_install_db  --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql

第四个里程碑:创建日志文件

touch /data/3306/mysql_3306.err
touch /data/3307/mysql_3307.err

第五个里程碑:启动多实例

[root@db02 scripts]# /data/3306/mysql start
Starting MySQL...
[root@db02 scripts]# /data/3307/mysql start
Starting MySQL...

注:遇到问题1、启动提示没权限被拒绝 chmod 777 -R /data

                      2、给权限之后启动失败提示Warning: World-writable config file '/data/3306/my.cnf' is ignored

原因及解决方法:/data/mysql/3306/my.cnf 权限777,任何一个用户都可以改my.cnf,存在很大的安全隐患.,修改权限

chmod 664 /data/mysql/3306/my.cnf 再次启动就成功了

检查mysql状态

[root@db02 scripts]# ps -ef |grep [my]sql 
root       4341      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf --pid-file=/data/3306/3306.pid
mysql      4526   4341 13 16:46 pts/1    00:00:03 /application/mysql/bin/mysqld --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3306/mysql_3306.err --pid-file=/data/3306/3306.pid --socket=/data/3306/mysql.sock --port=3306
root       4549      1  0 16:46 pts/1    00:00:00 /bin/sh /application/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf --pid-file=/data/3307/3307.pid
mysql      4734   4549 51 16:46 pts/1    00:00:08 /application/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --plugin-dir=/application/mysql/lib/plugin --user=mysql --log-error=/data/3307/mysql_3307.err --pid-file=/data/3307/3307.pid --socket=/data/3307/mysql.sock --port=3307

检查端口信息

[root@db02 scripts]# netstat  -lntup |grep mysql 
tcp        0      0 :::3306                     :::*                        LISTEN      4526/mysqld         
tcp        0      0 :::3307                     :::*                        LISTEN      4734/mysqld

至此mysql多实例搭建配置完成

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值