mysql多实例配置

一、安装MySQL。步骤请参考安装文档

安装完mysql之后先不要进行初始化。在配置完双实例之后再进行数据库的初始化。

二、双实例配置

1、创建实例的数据目录

mkidr -p /data/3306/data
mkidr -p /data/3307/data
mkdir -p /data/3306/binlog       
chown -R mysql:mysql /data

2、添加环境变量

echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile        # 如果系统自带mysql或者没卸载感觉,path写的顺序有可能出现问题
source /etc/profile

3、编写两个实例的配置文件

###################   3306实例的配置文件  ############################
[
client] port = 3306 socket = /data/3306/mysql.sock [mysqld] port = 3306 socket = /data/3306/mysql.sock basedir = /usr/local/mysql datadir = /data/3306/data open_files_limit = 1024 pid-file = /data/3306/mysqld.pid log-bin = /data/3306/binlog/mysqld-bin expire_logs_days = 7 server-id = 1 [mysqldump] quick max_allowed_packet = 2M [mysqld_safe] log-error = /data/3306/mysql3306.err #提前创建,否则初始化报错 pid-file = /data/3306/mysqld.pid
###################   3307实例的配置文件  ############################


 [client]
 port = 3307
 socket = /data/3307/mysql.sock

 [mysqld]
 port = 3307
 socket = /data/3307/mysql.sock
 basedir = /usr/local/mysql
 datadir = /data/3307/data
 open_files_limit = 1024
 pid-file = /data/3307/mysqld.pid

 # log-bin = /data/3307/binlog/mysqld-bin
 # expire_logs_days = 7

 server-id = 3


 [mysqldump]
 quick
 max_allowed_packet = 2M

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

###################################################################

4、编写自定义启动脚本,即自定义mysqld。模板为3306实例的服务,3307的请自行修改。修改成属主mysql。可执行权限

#!/bin/bash
#
#
#
#init
port=3306
mysql_user="root"
mysql_pwd="111111"
CmdPath="/usr/local/mysql/bin"
mysql_sock="/data/${port}/mysql.sock"
 
#startup function
function_start_mysql(){
    if [ ! -e "$mysql_sock" ];then
      printf "Starting MySQL...
"
      /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 >/dev/null &
    else
      printf "MySQL is running ... 
"
      exit
    fi
}
 
#stop function
function_stop_mysql(){
    if [ ! -e "$mysql_sock" ];then
      printf "MySQL is stopped ... 
"
      exit
    else
      printf "Stopping MySQL ... 
"
      ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown
    fi
}
 
#restart function
function_restart_mysql(){
    printf "Restarting MySQL ... 
"
    function_stop_mysql
    sleep 2
    function_start_mysql
}
 
case $1 in
start)
    function_start_mysql
    ;;
stop)
    function_stop_mysql
    ;;
restart)
    function_restart_mysql
    ;;
*)
    printf "Usage: /data/${port}/mysql {start|stop|restart} 
"
esac

5、对两个实例进行初始化(初始化的过程会生成两个临时的密码。需要记住以方便后边登陆并对密码进行修改)

cd /usr/local/mysql
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3306/data/
./bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data/

 6、启动双实例

./data/3306/mysqld start
./data/3307/mysqld start

7、查看连个端口的运行状态 

netstat -tunlp | grep 330*

[root@mysql2 3306]# netstat -tunlp|grep 330*
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1331/sshd           
tcp        0      0 :::3307                     :::*                        LISTEN      58215/mysqld        
tcp        0      0 :::22                       :::*                        LISTEN      1331/sshd           
tcp        0      0 :::3306                     :::*                        LISTEN      57820/mysqld  

8、登陆两个实例并配置数据库

mysql -u root -p -S /data/3307/mysql.sock
mysql -u root -p -S /data/3307/mysql.sock
# 分别执行
SET PASSWORD = PASSWORD("new password");
ALTER USER ‘root’@‘localhost’ PASSWORD EXPIRE NEVER;
flush privileges; 

9、双实例配置完成,如果要增加实例。按照上述步骤继续添加即可

多实例的优点:

(1)、有效利用服务器资源。当单个服务器资源过剩时,可以充分利用剩余的资源提供更多的服务

(2)、节约服务器资源,当公司资金紧张,但数据库又需要数据库之间各自提供服务时,并且还想使用主从同步等技术,此时多实例就再好不过了

(3)、方便后期架构扩展,某个项目才启动时,启动初期并不一定有很大的用户量,因此可以先用一组物理数据库服务器,在上面部署多个实例,方便后续架构扩展、迁移

多实例的缺点:

(1)、资源互相抢占问题当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU和IO资源,这将导致服务器上的其它实例提供服务的质量下降。这就比如说合租房的各个租客,每当早晨上班时,都会洗漱,此时卫生间的占用率就大,各个租客总会发生等待。

原文地址:https://www.cnblogs.com/jkin/p/10154062.html