一、MySQL多实例介绍
1.1 什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务:;
1.2 MySQL多实例的特点有以下几点
(1)有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务。
(2)节约服务器资源
(3)资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降;
1.3 部署mysql多实例的两种方式
第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便;
第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理;
说明:本文的多实例安装方式是采用的第二种方式,针对于第一种方式,和单实例安装基础是没有区别;
1.4 同一开发环境下安装两个数据库,必须处理以下问题
(1)配置文件安装路径不能相同
(2)数据库目录不能相同
(3)启动脚本不能同名
(4)端口不能相同
(5)socket文件的生成路径不能相同
二、MySQL所实例安装部署
1、在/usr/local/mysql解压免编译的二进制包
[root@VM_2_13_centos mysql]# pwd /usr/local/mysql [root@VM_2_13_centos mysql]# ll total 309288 drwxr-xr-x 2 root root 4096 Mar 28 18:09 bin -rw-r--r-- 1 root root 17987 Mar 28 18:09 COPYING drwxr-xr-x 3 root root 4096 Mar 28 18:09 data drwxr-xr-x 2 root root 4096 Mar 28 18:09 docs drwxr-xr-x 3 root root 4096 Mar 28 18:09 include drwxr-xr-x 3 root root 4096 Mar 28 18:09 lib drwxr-xr-x 4 root root 4096 Mar 28 18:09 man drwxr-xr-x 13 mysql mysql 4096 Mar 28 17:57 mysql-5.6.36-linux-glibc2.5-x86_64 -rw-r--r-- 1 mysql mysql 316320366 Mar 28 17:54 mysql-5.6.36-linux-glibc2.5-x86_64.tar.gz drwxr-xr-x 10 root root 4096 Mar 28 18:09 mysql-test -rw-r--r-- 1 root root 2496 Mar 28 18:09 README drwxr-xr-x 2 root root 4096 Mar 28 18:09 scripts drwxr-xr-x 28 root root 4096 Mar 28 18:09 share drwxr-xr-x 4 root root 4096 Mar 28 18:09 sql-bench drwxr-xr-x 2 root root 4096 Mar 28 18:09 support-files
2、创建mysql组和mysql用户
[root@VM_2_13_centos mysql]# groupadd -g 500 mysql [root@VM_2_13_centos mysql]# useradd -u 501 -g mysql mysql [root@VM_2_13_centos mysql]# id mysql uid=501(mysql) gid=500(mysql) groups=500(mysql)
3、创建相关目录
[root@VM_2_13_centos mysql]# mkdir -p /data/mysql/{mysql_3306,mysql_3307} [root@VM_2_13_centos mysql]# mkdir /data/mysql/mysql_3306/{data,log,tmp} [root@VM_2_13_centos mysql]# mkdir /data/mysql/mysql_3307/{data,log,tmp}
4、修改目录相关权限
[root@VM_2_13_centos mysql]# chown -R mysql:mysql /data/mysql/ [root@VM_2_13_centos mysql]# chown -R mysql:mysql /usr/local/mysql/
5、添加环境变量
[root@VM_2_13_centos mysql]# echo 'export PATH=$PATH:/usr/local/mysql/bin' >> /etc/profile [root@VM_2_13_centos mysql]# source /etc/profile
6、复制my.cnf到/etc目录下
[root@VM_2_13_centos mysql]# cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
7、修改my.cnf文件
[root@VM_2_13_centos mysql]# vim /etc/my.cnf [client] port=3306 socket=/tmp/mysql.sock [mysqld_multi] mysqld = /usr/local/mysql/bin/mysqld_safe mysqladmin = /usr/local/mysql/bin/mysqladmin log = /data/mysql/mysqld_multi.log [mysqld] user=mysql basedir = /usr/local/mysql sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES [mysqld3306] mysqld=mysqld mysqladmin=mysqladmin datadir=/data/mysql/mysql_3306/data port=3306 server_id=3306 socket=/tmp/mysql_3306.sock log-output=file slow_query_log = 1 long_query_time = 1 slow_query_log_file = /data/mysql/mysql_3306/log/slow.log log-error = /data/mysql/mysql_3306/log/error.log binlog_format = mixed log-bin = /data/mysql/mysql_3306/log/mysql3306.bin [mysqld3307] mysqld=mysqld mysqladmin=mysqladmin datadir=/data/mysql/mysql_3307/data port=3307 server_id=3307 socket=/tmp/mysql_3307.sock log-output=file slow_query_log = 1 long_query_time = 1 slow_query_log_file = /data/mysql/mysql_3307/log/slow.log log-error = /data/mysql/mysql_3307/log/error.log binlog_format = mixed log-bin = /data/mysql/mysql_3307/log/mysql3307_bin
8、初始化3306的数据库
[root@VM_2_13_centos mysql]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf FATAL ERROR: please install the following Perl modules before executing /usr/local/mysql/scripts/mysql_install_db: Data::Dumper
在初始化的时候出现上面的报错信息:报错原因缺少autoconf的依赖包
[root@VM_2_13_centos mysql]# yum install autoconf
9、再次初始化3306数据库
[root@VM_2_13_centos ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3306/data --defaults-file=/etc/my.cnf
10、初始化3307数据库
[root@VM_2_13_centos ~]# /usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/mysql/mysql_3307/data --defaults-file=/etc/my.cnf
11、查看数据库是否初始化成功
端口为3306数据库
[root@VM_2_13_centos ~]# ll /data/mysql/mysql_3306/data/ -rw-rw---- 1 mysql mysql 56 Mar 28 18:45 auto.cnf -rw-rw---- 1 mysql mysql 12582912 Mar 29 16:07 ibdata1 -rw-rw---- 1 mysql mysql 50331648 Mar 29 16:07 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 Mar 28 18:24 ib_logfile1 drwx------ 2 mysql mysql 4096 Mar 28 18:25 mysql drwx------ 2 mysql mysql 4096 Mar 28 18:24 performance_schema drwx------ 2 mysql mysql 4096 Mar 28 18:19 test
端口为3307数据库
[root@VM_2_13_centos ~]# ll /data/mysql/mysql_3307/data/ -rw-rw---- 1 mysql mysql 56 Mar 28 18:29 auto.cnf -rw-rw---- 1 mysql mysql 12582912 Mar 29 11:38 ibdata1 -rw-rw---- 1 mysql mysql 50331648 Mar 29 11:38 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 Mar 28 18:26 ib_logfile1 drwx------ 2 mysql mysql 4096 Mar 28 18:26 mysql drwx------ 2 mysql mysql 4096 Mar 28 18:26 performance_schema drwx------ 2 mysql mysql 4096 Mar 28 18:26 test
12、设置启动文件
[root@VM_2_13_centos ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
14、启动全部实例
[root@VM_2_13_centos ~]# /usr/local/mysql/bin/mysqld_multi start [root@VM_2_13_centos ~]# mysqld_multi report Reporting MySQL servers MySQL server from group: mysqld3306 is running MySQL server from group: mysqld3307 is running
15、mysqld_multi进行多实例管理
启动全部实例:/usr/local/mysql/bin/mysqld_multi start
查看全部实例状态:/usr/local/mysql/bin/mysqld_multi report
启动单个实例:/usr/local/mysql/bin/mysqld_multi start 3306
停止单个实例:/usr/local/mysql/bin/mysqld_multi stop 3306
查看单个实例状态:/usr/local/mysql/bin/mysqld_multi report 3306
至此,MySQL 5.6版本的多实例安装全部就安装完成了;