mysql5.6多实例配置

来源:互联网 发布:linux拷贝当前目录 编辑:程序博客网 时间:2024/06/09 20:17
多实例简述
在一台物理服务器上安装一套Mysql软件程序,创建多个Mysql实例,每个Mysql实例拥有各自独立的数据库、配置文件和启动脚本,多个Mysql实例共享服务器硬件资源(CPU,MEM,磁盘,网络)。可以将多实例形像的理解成一个房子里的多个房间,在房子里的浴室、厨房和客厅是公用资源。
 
多实例优劣
优点:
    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 = 3306
socket = /data/3306/data/mysql.sock
 
[mysqld]
port=3306
socket = /data/3306/data/mysql.sock
pid-file /data/3306/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3306/data
server-id=1
log-bin=mysql-bin
log-bin-index= mysql-bin.index
 
# LOGGING
log_error=/data/3306/logs/mysql-error.log   
slow_query_log_file=/data/3306/logs/mysql-slow.log
slow_query_log=1


2、修改3307的配置文件
    vi /data/3307/my.cnf

[client]
port = 3307
socket = /data/3307/data/mysql.sock
  
[mysqld]
port=3307
socket = /data/3307/data/mysql.sock
pid-file = /data/3307/data/mysql.pid
basedir = /usr/local/mysql
datadir = /data/3307/data
server-id=3
log-bin=mysql-bin
log-bin-index= mysql-bin.index
 
# LOGGING
log_error=/data/3307/logs/mysql-error.log   
slow_query_log_file=/data/3307/logs/mysql-slow.log
slow_query_log=1


其余配置文件参数可根据实际情况做修改
 
四、初始化数据库 

cd /usr/local/mysql/scripts


1、3306数据库初始化


      ./mysql_install_db --defaults-file=/data/3306/my.cnf--user=mysql  \
      --basedir=/usr/local/mysql --datadir=/data/3306/data
 
2、3307数据库初始化


      ./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
   fi
fi
  
# 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 1
esac
 
六、测试
      1、  查看进程


     ps –ef|grep mysqld |grep –v grep
      可以看到四个进程
 
       2、  查看端口


      netstat –nltup|grep 330
       可以看到3306与3307两个监听端口
 
       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;

原创粉丝点击