MYSQL多实例,就是在同一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MYSQL服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供各自的服务。mysql多实例共用一套MYSQL安装程序,使用不同的my.cnf配置文件,启动程序,数据文件。每个实例都是各自独立的。

mysql 多实例重启 mysql单机多实例_mysql单机三实例

MYSQL多实例的特点:

优点:最大化有效的利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。

不足之处:如果服务器上某个实例占用过多资源(CPU、内存、磁盘、IO)就会导致其它实例缓慢。不过一般根据情况不要太多,一般生产环境中建议也就2-3个实例。

安装准备:

首先在机器上安装好mysql服务:

建立MYSQL帐号

[root@mysql_master ~]# groupadd mysql
[root@mysql_master ~]# useradd -s /sbin/nologin -g mysql -M mysql
[root@mysql_master ~]# tail -1 /etc/passwd
mysql:x:502:503::/home/mysql:/sbin/nologin
把mysql利用lrzsz工具上传到目录:/tools下解压,编译:
[root@mysql_master tools]# tar xvf mysql-5.1.73.tar.gz
[root@mysql_master tools]# cd mysql-5.1.73
[root@mysql_master tools]#./configure \
--prefix=/usr/local/mysql \
--with-unix-socket-path=/usr/local/mysql/tmp/mysql.scok \
--localstatedir=/data \
--enable-assembler \
--with-mysqld-ldflags=-all-static \
--with-client-ldflags=-all-static \
--enable-thread-safe-client \
--with-mysqld-user=mysql \
--with-big-tables \
--without-debug \
--with-pthread
make && make install
如果执行上面的编译时出错提示:configure: error: No curses/termcap library found
解决方法:安装上ncurses 和 ncurses-devel两个包文件:
yum install ncurses ncurses-devel -y
初始化数据库:
[root@mysql_master support-files]# /usr/local/mysql/bin/mysql_install_db --user=mysql
[root@mysql_master support-files]# cp my-small.cnf /etc/my.cnf
配置全局变量 :
[root@mysql_master support-files]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@mysql_master support-files]# source /etc/profile
[root@mysql_master support-files]# cp mysql.server /etc/init.d/mysqld
[root@mysql_master support-files]# chmod 700 /etc/init.d/mysqld
[root@mysql_master support-files]# service mysqld start
Starting MySQL. SUCCESS!
上面操作把MYSQL安装到系统里,也就是单实例,因为多实例的环境也是要用到mysql的程序,所以我们把这个默认的MYSQL服务停止。不让它启动。我们要启动的是多实例;
结束、关闭mysql服务:(多实例使用就要把单实例停掉)
[root@mysql_master ~]# killall mysqld
[root@mysql_master ~]# killall mysqld
mysqld: no process killed #说明已经结束掉了。
创建mysql多实例的数据目录
建立多实例存放数据目录,我们以不同的端口来作为二级目录,以区别不同的实例;
[root@mysql_master support-files]# mkdir /data/{3306,3307}/data -p
[root@mysql_master ~]# tree /data/
/data/
├── 3306
│ └── data
├── 3307
│ └── data
提示:mkdir -p /data/{3306,3307}/data 相当于mkdir -p /data/3306/data;mkdir -p /data/3307/data两条命令。
创建MYSQL多实例的配置文件
vim /data/3306/my.cnf
vim /data3307/my.cnf
两个配置文件基本一样,只需要修改3306改成3307即可。
下面是/data/3306/my.cnf的内容;
[client]
port = 3306
socket = /data/3306/mysql.sock
[mysqld]
port=3306
socket = /data/3306/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/log/mysql-error.log
slow_query_log_file=/data/3306/log/mysql-slow.log
slow_query_log=1
利用sed修改3307的my.cnf配置文件和启动脚本mysql
[root@mysql_master ~]# sed -i 's/3306/3307/g' /data/3307/my.cnf
授权目录权限,和执行脚本700权限。
[root@mysql_master ~]# chown -R mysql.mysql /data
[root@mysql_master ~]# find /data -type f -name mysql -exec chmod 700 {} \;
[root@mysql_master ~]# ls -l /data/{3306,3307}
/data/3306:
total 12
drwxr-xr-x 2 mysql mysql 4096 Oct 2 13:11 data
-rw-r--r-- 1 mysql mysql 1881 Oct 2 13:58 my.cnf
/data/3307:
total 12
drwxr-xr-x 2 mysql mysql 4096 Oct 2 13:11 data
-rw-r--r-- 1 mysql mysql 1881 Oct 2 14:00 my.cnf
配置MYSQL全局全路径意义
如果不配置MYSQL全局路径,就无法直接敲mysql命令。也只能/usr/local/mysql/bin/mysql 这样执行命令。
配置方法:
[root@mysql_master ]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile
[root@mysql_master ]# source /etc/profile
初始化MYSQL多实例数据文件
[root@mysql_master ~]# mysql_install_db --datadir=/data/3306/data --user=mysql
Installing MySQL system tables...
151002 14:25:32 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK
Filling help tables...
151002 14:25:32 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead.
OK[root@mysql_master ~]# mysql_install_db --datadir=/data/3307/data --user=mysql
出现两个OK即可以了。
接下来就是启动多实例mysql了;可以把下面的命令写到文件,再执行即。
[root@mysql_master]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
[root@mysql_master]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &
查看端口情况:说明已经启动了;
[root@mysql_master 3306]# netstat -lnt|grep 330
tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
也可以反查端口是哪个程序占用:
[root@mysql_master 3306]# lsof -i:3307
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 59366 mysql 3u IPv4 64155 0t0 TCP *:opsession-prxy (LISTEN)
[root@mysql_master 3306]# lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 59268 mysql 3u IPv4 64074 0t0 TCP *:mysql (LISTEN)
登陆多实例的mysql要指定sock 文件路径;
[root@mysql_master 3306]# mysql -S /data/3306/mysql.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.73-log Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>

可以看到,成功登陆到mysql了,因为我们装好MYSQL后是没有设置密码,所以直接可以登陆。

接下来修改密码,也要指定sock文件,要不然系统不知道你是操作哪个;

[root@mysql_master ]# mysqladmin -uroot -S /data/3306/mysql.sock password '123456'

[root@mysql_master ]# mysqladmin -uroot -S /data/3307/mysql.sock password '123321'

只要根据上面的操作方法可以配置多个实例,但是要根据机器的情况添加。到此,单机多实例就已经配置完成了。