封尘网

让学习成为一种习惯!

Mysql单机多实例

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

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'

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

提醒:本文最后更新于 1415 天前,文中所描述的信息可能已发生改变,请谨慎使用。