Mysql单机多实例


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

MYSQL多实例的特点:

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

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

 

安装准备:

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

建立MYSQL帐号

  1. [root@mysql_master ~]# groupadd mysql 
  2.  
  3. [root@mysql_master ~]# useradd -s /sbin/nologin -g mysql -M mysql 
  4.  
  5. [root@mysql_master ~]# tail -1 /etc/passwd 
  6.  
  7. mysql:x:502:503::/home/mysql:/sbin/nologin 

把mysql利用lrzsz工具上传到目录:/tools下解压,编译:

 

  1. [root@mysql_master tools]# tar xvf mysql-5.1.73.tar.gz  
  2.  
  3. [root@mysql_master tools]# cd mysql-5.1.73 
  4.  
  5. [root@mysql_master tools]#./configure \ 
  6.  
  7. --prefix=/usr/local/mysql \ 
  8.  
  9. --with-unix-socket-path=/usr/local/mysql/tmp/mysql.scok \ 
  10.  
  11. --localstatedir=/data \ 
  12.  
  13. --enable-assembler \ 
  14.  
  15. --with-mysqld-ldflags=-all-static \ 
  16.  
  17. --with-client-ldflags=-all-static \ 
  18.  
  19. --enable-thread-safe-client \ 
  20.  
  21. --with-mysqld-user=mysql \ 
  22.  
  23. --with-big-tables \ 
  24.  
  25. --without-debug \ 
  26.  
  27. --with-pthread 
  28.  
  29. make && make install 

 

如果执行上面的编译时出错提示:configure: error: No curses/termcap library found

解决方法:安装上ncurses 和 ncurses-devel两个包文件:

 

  1. yum install ncurses ncurses-devel -y 

 

初始化数据库:

 

  1. [root@mysql_master support-files]#  /usr/local/mysql/bin/mysql_install_db --user=mysql  
  2.  
  3. [root@mysql_master support-files]# cp my-small.cnf /etc/my.cnf 

配置全局变量 :

 

  1. [root@mysql_master support-files]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile  
  2.  
  3. [root@mysql_master support-files]# source /etc/profile      
  4.  
  5.  
  6.  
  7. [root@mysql_master support-files]# cp mysql.server /etc/init.d/mysqld 
  8.  
  9. [root@mysql_master support-files]# chmod 700 /etc/init.d/mysqld      
  10.  
  11.  
  12.  
  13. [root@mysql_master support-files]# service mysqld start 
  14.  
  15. Starting MySQL. SUCCESS!  

上面操作把MYSQL安装到系统里,也就是单实例,因为多实例的环境也是要用到mysql的程序,所以我们把这个默认的MYSQL服务停止。不让它启动。我们要启动的是多实例;

 

结束、关闭mysql服务:(多实例使用就要把单实例停掉)

 

  1. [root@mysql_master ~]# killall mysqld 
  2.  
  3. [root@mysql_master ~]# killall mysqld 
  4.  
  5. mysqld: no process killed       #说明已经结束掉了。 

 

创建mysql多实例的数据目录

建立多实例存放数据目录,我们以不同的端口来作为二级目录,以区别不同的实例;

 

  1. [root@mysql_master support-files]# mkdir /data/{3306,3307}/data -p 
  2.  
  3. [root@mysql_master ~]# tree /data/ 
  4.  
  5. /data/ 
  6.  
  7. ├── 3306 
  8.  
  9. │  └── data 
  10.  
  11. ├── 3307 
  12.  
  13. │  └── data 

提示:mkdir -p /data/{3306,3307}/data 相当于mkdir -p /data/3306/data;mkdir -p /data/3307/data两条命令。

 

创建MYSQL多实例的配置文件

 

  1. vim /data/3306/my.cnf 
  2.  
  3. vim /data3307/my.cnf 

两个配置文件基本一样,只需要修改3306改成3307即可。

下面是/data/3306/my.cnf的内容;

 

  1. [client] 
  2.  
  3.                port = 3306 
  4.  
  5.                socket = /data/3306/mysql.sock 
  6.  
  7.                 
  8.  
  9.                [mysqld] 
  10.  
  11.                port=3306 
  12.  
  13.                socket = /data/3306/mysql.sock 
  14.  
  15.                pid-file = /data/3306/data/mysql.pid 
  16.  
  17.                basedir = /usr/local/mysql 
  18.  
  19.                datadir = /data/3306/data 
  20.  
  21. server-id=1
  22.  
  23.                #log-bin=mysql-bin 
  24.  
  25.                #log-bin-indexmysql-bin.index 
  26.  
  27.                 
  28.  
  29.                # LOGGING 
  30.  
  31.                log_error=/data/3306/log/mysql-error.log 
  32.  
  33.                slow_query_log_file=/data/3306/log/mysql-slow.log 
  34.  
  35.                slow_query_log=1 

利用sed修改3307的my.cnf配置文件和启动脚本mysql

 

  1. [root@mysql_master ~]# sed -i 's/3306/3307/g' /data/3307/my.cnf                    

授权目录权限,和执行脚本700权限。

 

  1. [root@mysql_master ~]# chown -R mysql.mysql /data 
  2.  
  3. [root@mysql_master ~]# find /data -type f -name mysql -exec chmod 700 {} \; 
  4.  
  5.  
  6.  
  7. [root@mysql_master ~]# ls -l /data/{3306,3307} 
  8.  
  9. /data/3306: 
  10.  
  11. total 12 
  12.  
  13. drwxr-xr-x 2 mysql mysql 4096 Oct  2 13:11 data 
  14.  
  15. -rw-r--r-- 1 mysql mysql 1881 Oct  2 13:58 my.cnf 
  16.  
  17.  
  18.  
  19. /data/3307: 
  20.  
  21. total 12 
  22.  
  23. drwxr-xr-x 2 mysql mysql 4096 Oct  2 13:11 data 
  24.  
  25. -rw-r--r-- 1 mysql mysql 1881 Oct  2 14:00 my.cnf 

配置MYSQL全局全路径意义

如果不配置MYSQL全局路径,就无法直接敲mysql命令。也只能/usr/local/mysql/bin/mysql 这样执行命令。

配置方法:

 

  1. [root@mysql_master ]# echo "export PATH=$PATH:/usr/local/mysql/bin" >>/etc/profile   
  2.  
  3. [root@mysql_master ]# source /etc/profile   

 

 

初始化MYSQL多实例数据文件

 

  1. [root@mysql_master ~]# mysql_install_db --datadir=/data/3306/data --user=mysql 
  2.  
  3. Installing MySQL system tables... 
  4.  
  5. 151002 14:25:32 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead. 
  6.  
  7. OK 
  8.  
  9. Filling help tables... 
  10.  
  11. 151002 14:25:32 [Warning] '--skip-locking' is deprecated and will be removed in a future release. Please use '--skip-external-locking' instead. 
  12.  
  13. OK 
  14.  
  15. [root@mysql_master ~]# mysql_install_db --datadir=/data/3307/data --user=mysql 

出现两个OK即可以了。

接下来就是启动多实例mysql了;可以把下面的命令写到文件,再执行即。

 

  1. [root@mysql_master]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null & 
  2.  
  3. [root@mysql_master]# /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null & 

查看端口情况:说明已经启动了;

 

  1. [root@mysql_master 3306]# netstat -lnt|grep 330 
  2. tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN       
  3. tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN       

也可以反查端口是哪个程序占用:

  1. [root@mysql_master 3306]# lsof -i:3307          
  2. COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME 
  3. mysqld  59366 mysql    3u  IPv4  64155      0t0  TCP *:opsession-prxy (LISTEN) 
  4. [root@mysql_master 3306]# lsof -i:3306 
  5. COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME 
  6. mysqld  59268 mysql    3u  IPv4  64074      0t0  TCP *:mysql (LISTEN) 

 

 

 

登陆多实例的mysql要指定sock 文件路径;

 

  1. [root@mysql_master 3306]# mysql -S /data/3306/mysql.sock  
  2. Welcome to the MySQL monitor.  Commands end with ; or \g. 
  3. Your MySQL connection id is 1 
  4. Server version: 5.1.73-log Source distribution 
  5.  
  6. Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. 
  7.  
  8. Oracle is a registered trademark of Oracle Corporation and/or its 
  9. affiliates. Other names may be trademarks of their respective 
  10. owners. 
  11.  
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. 
  13.  
  14. mysql>  

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

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

 

  1. [root@mysql_master ]# mysqladmin -uroot -S /data/3306/mysql.sock password '123456' 
  2.  
  3. [root@mysql_master ]# mysqladmin -uroot -S /data/3307/mysql.sock password '123321' 

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