mysql5.6多实例配置

 

多实例简述

在一台物理服务器上安装一套Mysql软件程序,创建多个Mysql实例,每个Mysql实例拥有各自独立的数据库、配置文件和启动脚本,多个Mysql实例共享服务器硬件资源(CPUMEM,磁盘,网络)。可以将多实例形像的理解成一个房子里的多个房间,在房子里的浴室、厨房和客厅是公用资源。

 

多实例优劣

优点:

    1、  充分利用服务器富余硬件资源,节约了硬件成本;

    2、  在业务量并不太大,并发度也不高的场景是不错的选择;

缺点:

    1、  共享硬件资源,容易造成资源争用;

    2、  并不适用于大规模高并发的应用场景;

 

多实例配置思路

一、安装Mysql软件 (省略,假定软件的安装目录/usr/local/mysql

二、创建库目录并授权

    mkdir –p /data{3306,3307}/data   (存放数据文件,二进制日志,sock和pid文件)    mkdir –p /data/{3306,3307}/logs  (存放错误日志和慢查询日志)    chown –R mysql.mysql /data

三、修改配置文件

    1、修改3306的配置文件

    vi /data/3306/my.cnf

[client] port = 3306socket = /data/3306/data/mysql.sock[mysqld]port=3306socket = /data/3306/data/mysql.sockpid-file = /data/3306/data/mysql.pidbasedir = /usr/local/mysqldatadir = /data/3306/dataserver-id=1log-bin=mysql-binlog-bin-index= mysql-bin.index# LOGGINGlog_error=/data/3306/logs/mysql-error.log   slow_query_log_file=/data/3306/logs/mysql-slow.logslow_query_log=1

 

    2、修改3307的配置文件

    vi /data/3307/my.cnf

[client]port = 3307socket = /data/3307/data/mysql.sock [mysqld]port=3307socket = /data/3307/data/mysql.sockpid-file = /data/3307/data/mysql.pidbasedir = /usr/local/mysqldatadir = /data/3307/dataserver-id=3log-bin=mysql-binlog-bin-index= mysql-bin.index# LOGGINGlog_error=/data/3307/logs/mysql-error.log   slow_query_log_file=/data/3307/logs/mysql-slow.logslow_query_log=1

 

其余配置文件参数可根据实际情况做修改

 

四、初始化数据库 

      cd /usr/local/mysql/scripts

       13306数据库初始化

      ./mysql_install_db --defaults-file=/data/3306/my.cnf--user=mysql  \      --basedir=/usr/local/mysql --datadir=/data/3306/data

 

23307数据库初始化

      ./mysql_install_db --defaults-file=/data/3307/my.cnf--user=mysql  \      --basedir=/usr/local/mysql --datadir=/data/3307/data

 

五、修改启动脚本

    可自行编写一个启动脚本,可参考/etc/init.d/portmap进行编写

    脚本思想:

    1、  启动mysql,使用mysqld_safe启动

   mysqld_safe--defaults-file=/data3306/my.cnf --user=mysql  \   --basedir=/usr/local/mysql--datadir=/data/3306/data  &

    2、  停止mysql,使用mysqladmin平滑停止

   mysqladmin –uroot –p123456 –S/data/3306/data/mysql.sock shutdown

    3、  重启mysql

    先停止,后启动。

    示例:

#!/bin/sh # This is an interactive program, we needthe current locale[ -f /etc/profile.d/lang.sh ] && ./etc/profile.d/lang.sh# We can't Japanese on normal console atboot time, so force.if [ "$LANG" = "ja" -o"$LANG" = "ja_JP.eucJP" ]; then   if [ "$TERM" = "linux" ] ; then       LANG=C   fifi # Source function library.. /etc/init.d/functions cmdPath="/usr/local/mysql/bin"myPath="/data/3307"softPath="/usr/local/mysql"socketfile="$myPath/data/mysql.sock"my_user="root"my_pass="123456" start(){        if [ ! -e "$socketfile" ];then                printf "Mysqldstarting......\n"                $cmdPath/mysqld_safe--defaults-file=$myPath/my.cnf --user=mysql \                --basedir=$softPath--datadir=$myPath/data &>/dev/null &                sleep 2       else                printf "Mysqld alreadyrunning\n" && exit 1       fi}  stop(){       if [ -e "$socketfile" ];then                printf "Mysqldstoping......\n"                $cmdPath/mysqladmin-u"$my_user" -p"$my_pass" \-S "$socketfile" shutdown &>/dev/null                [ $? -ne 0 ] && echo"error username or password!!!" && exit 1                sleep 3       else                printf "Mysqld alreadyclosed\n" && exit 1       fi}  restart(){       stop        start} case "$1" in       start)                start       ;;       stop)                stop       ;;       restart)                restart       ;;       status)                status mysqld       ;;       *)                echo "Usage: $0{start|stop|restart|status}"                exit 1esac

 

六、测试

      1、  查看进程

     ps –ef|grep mysqld |grep –v grep

      可以看到四个进程

 

       2、  查看端口

      netstat –nltup|grep 330

       可以看到33063307两个监听端口

 

       3、  测试mysql脚本

      /data/3306/data/mysql start      /data/3306/data/mysql stop      /data/3306/data/mysql restart      /data/3306/data/mysql xxxx

 

七、多实例本地及远程登陆

       1、本地登陆,一定要添加sock区别不同实例

      mysql –uroot –p123456 –S /data/3306/data/mysql.sock

2、远程登陆,与普通mysql连接一样,需要授权

      mysql –uroot –p123456 –h 192.168.31.200 –P 3307

 

八、多实例修改口令

       1、非交互式修改口令

      mysqladmin –uroot –p123456 password=’newpass’ –S/data/3306/data/mysql.sock

 

       2、root帐户连接到mysql,执行:

      mysql>set passwordfor root@’192.168.31.%’=password(‘newpass’);

 

       3、直接修改mysql.user表来实现:

       mysql>update userset password=password('newpass') where host="192.168.31.%"                      and user="root";       mysql>flush privileges;