一、mysql多实例的原理

mysql多实例,简单的说,就是在一台服务器上开启多个不同的mysql服务端口(如3306,3307),运行多个mysql服务进程。这些服务进程通过不同的socket监听不同的服务端口,来提供各自的服务。

这些mysql实例共用一套mysql安装程序,使用不同的my.cnf配置文件、启动程序、数据文件。在提供服务时,mysql多实例在逻辑上看来是各自独立的,各个实例之间根据配置文件的设定值,来取得服务器的相关硬件资源。

二、mysql多实例的特点

2.1 有效的利用服务器资源

当单个服务器资源有剩余时,可以充分利用剩余的服务器资源来提供更多的服务。

2.2 节约服务器资源

当公司资金紧张,但是数据库需要各自提供独立服务,而且需要主从同步等技术时,使用多实例就最好了。

2.3 出现资源互相抢占问题

当某个实例服务并发很高或者有慢查询时,会消耗服务器更多的内存、CPU、磁盘IO等资源,这时就会导致服务器上的其它实例提供访问的质量下降,出现服务器资源互相抢占的现象。

三、mysql多实例应用场景

3.1 资金紧张型公司的选择

当公司业务访问量不太大,又舍不得花钱,但同时又希望不同业务的数据库服务各自独立,而且需要主从同步进行等技术提供备份或读写分离服务时,使用多实例是最好不过的。

3.2 并发访问不是特别大的业务

当公司业务访问量不太大,服务器资源基本闲置的比较多,这是就很适合多实例的应用。如果对SQL语句优化的好,多实例是一个很值得使用的技术。即使并发很大,只要合理分配好系统资源,也不会有太大问题。

四MySQL5.7部署方法

第一种方法我们可以把各个实例的配置文件分开,管理比较方便。

第二种方法就是把多个实例都放到一个配置文件中,这个管理不是很方便。

注:在此我们选择第一种方法,而且以下实验我们全部是在此方法下进行的。

五MySQL5.7多实例部署

1、首先源码安装、

系统环境:centos7.2 x86_64

因为 centos7.2 默认安装了 mariadb-libs,

所以先要卸载掉 查看是否安装 mariadb

rpm -qa | grep mariadb 卸载 mariadb rpm -e --nodeps mariadb-libsMySQL5.7

2、安装依赖包
注: 相关依赖包的作用
cmake:由于从 MySQL5.5 版本开始弃用了常规的 configure 编译方法,所以需要 CMake 编译
器,用于设置 mysql 的编译参数。如:安装目录、数据存放目录、字符编码、排序规则等。
Boost #从 MySQL 5.7.5 开始 Boost 库是必需的,mysql 源码中用到了 C++的 Boost 库,要求
必须安装 boost1.59.0 或以上版本
GCC 是 Linux 下的 C 语言编译工具,mysql 源码编译完全由 C 和 C++编写,要求必须安装
GCC
bison:Linux 下 C/C++语法分析器
ncurses:字符终端处理库
1)安装文件准备
下载 cmake-3.5.tar.gz http://www.cmake.org/download/
下载 ncurses-5.9.tar.gz ftp://ftp.gnu.org/gnu/ncurses/
下载 bison-3.0.4.tar.gz http://ftp.gnu.org/gnu/bison/
下载 mysql-5.7.13.tar.gz
wget http://cdn.mysql.com/Downloads/MySQL-5.7/mysql-5.7.13.tar.gz
下载 Boost_1_59_0.tar.gz
wget http://nchc.dl.sourceforge.net/project/boost/boost/1.59.0/boost_1_59_0.tar.gz

2)安装 CMAKE 及必要的软件
安装 cmake
cmake –version ---查看 cmake 版本
安装 ncurses---------./bootstrap && gmake && gmake install
安装 ncurses---------./configure && make && make install
安装 bison-----------./configure && make && make install
安装 bootst-----------mv boost_1_59_0 /usr/local/boost
3)创建 mysql 用户和用户组及目录
# groupadd -r mysql && useradd -r -g mysql -s /bin/false -M mysql ---新建 msyql 组和 msyql 用
户禁止登录 shell
#mkdir /usr/local/mysql ---创建目录
#mkdir /usr/local/mysql/data ---数据库目录

3、编译安装 mysql 解压 mysql 源码包

cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/usr/local/mysql/data -DSYSCONFDIR=/etc -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIBE_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1 -DWITH_SYSTEMD=1 -DWITH_BOOST=/usr/local/boost && make && make install

注 1:配置解释:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql [MySQL 安装的根目录] 
-DMYSQL_DATADIR=/usr/local/mysql /data [MySQL 数据库文件存放目录]
-DSYSCONFDIR=/etc [MySQL 配置文件所在目录]
-DWITH_MYISAM_STORAGE_ENGINE=1 [添加 MYISAM 引擎支持 ]
-DWITH_INNOBASE_STORAGE_ENGINE=1 [添加 InnoDB 引擎支持 ]

-DWITH_ARCHIVE_STORAGE_ENGINE=1 [添加 ARCHIVE 引擎支持 ]
-DMYSQL_UNIX_ADDR=/usr/local/mysql /mysql.sock [指定 mysql.sock 位置 ]
-DWITH_PARTITION_STORAGE_ENGINE=1 [安装支持数据库分区 ]
-DEXTRA_CHARSETS=all [使 MySQL 支持所有的扩展字符]
-DDEFAULT_CHARSET=utf8 [设置 MySQL 的默认字符集为utf8] 
-DDEFAULT_COLLATION=utf8_general_ci [设置默认字符集校对规则 ]
-DWITH-SYSTEMD=1 [可以使用 systemd 控制 mysql 服务]
-DWITH_BOOST=/usr/local/boost [指向 boost 库所在目录]
更多参数执行 cmake . –LH

4、设置权限并初始化 MySQL 系统授权表
# cd /usr/local/mysql
# chown -R mysql:mysql . ---更改所有者,属组,注意是 mysql .
# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
注 1:以 root 初始化操作时要加--user=mysql 参数,生成一个随机密码(注意保存登录时用)
注 2:MySQL 5.7.6 之前的版本执行这个脚本初始化系统数据库
/usr/local/mysql/bin/mysql_install_db --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
# 5.7.6 之后版本初始系统数据库脚本(本文使用此方式初始化)
#/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
注意:如果使用–initialize 参数初始化系统 数据库 之后,会生成 root 用户的一个临时密码,
5、创建配置文件
# cd /usr/local/mysql/support-files ---进入 MySQL 安装目录支持文件目录
# cp my-default.cnf /etc/my.cnf ---复制模板为新的配置文件,
#vim /etc/my.cnf
[mysqld]
user = mysql
basedir = /usr/local/mysql
port = 3306
server-id = 3306
datadir = /usr/local/mysql/data
socket = /usr/local/mysql/mysql.sock
log-error = /usr/local/mysql/data/mysql.err
pid-file = /usr/local/mysql/data/mysqld.pid
[mysql]
auto-rehash
[client]
socket = /usr/local/mysql/mysql.sock
#cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system
#systemctl enable mysqld(自动启动)
#systemctl start mysqld(启动成功)
#ss -anput |grep mysqld
#mysql -u 用户 -p 密码 登录即可

到这安装完成

6、部署多实例

# mkdir -pv /usr/local/mysql3307/data
#chown mysql:mysql /usr/local/mysql3307/data/
#vim /etc/my3307.cnf
[mysqld]
user = mysql
server-id = 3307
port = 3307
basedir = /usr/local/mysql
datadir = /usr/local/mysql3307/data
socket = /usr/local/mysql3307/mysql3307.sock
log-error = /usr/local/mysql3307/data/mysql3307.err
pid-file = /usr/local/mysql3307/data/mysqld3307.pid
[mysql]
auto-rehash
[client]
port = 3307
socket = /usr/local/mysql3307/mysql3307.sock
#mysqld --defaults-file=/etc/my3307.cnf --initialize --user=mysql --basedir=/usr/local/mysql
#mysqld --defaults-file=/etc/my3307.cnf
#ss -anput |grep mysqld
    tcp    LISTEN     0      80       :::3306                 :::*                   users:(("mysqld",pid=5355,fd=31))
    tcp    LISTEN     0      80       :::3307                 :::*                   users:(("mysqld",pid=5528,fd=20))
#mysql -h 127.0.0.1 -u root -P3307 -p

到这就大功告成

验证一下吧:1:登录3307创建个库,表。2:登录3306查看如果没有你在3307所创建的表说明成功。