[toc]
mysql多实例-5.6.40
1.mysql多实例介绍
1.1 什么是MySQL多实例
MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3307),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务
1.2 MySQL多实例的特点有以下几点
1:有效利用服务器资源,当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务
2:节约服务器资源
3:资源互相抢占问题,当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降
1.3 部署mysql多实例的两种方式
第一种是使用多个配置文件启动不同的进程来实现多实例,这种方式的优势逻辑简单,配置简单,缺点是管理起来不太方便
第二种是通过官方自带的mysqld_multi使用单独的配置文件来实现多实例,这种方式定制每个实例的配置不太方面,优点是管理起来很方便,集中管理
1.4 同一开发环境下安装两个数据库,必须处理以下问题
- 配置文件安装路径不能相同
- 数据库目录不能相同
- 启动脚本不能同名
- 端口不能相同
- socket文件的生成路径不能相同
2.mysql多实例安装路径说明
mysql安装路径
第一个实例:/data/mysql3306
第二个实例:/data/mysql3307
第三个实例:/data/mysql3308
3.安装部署过程
3.1 安装依赖包
yum -y install gcc gcc-c++ autoconf bison-devel ncurses-devel libaio-devel
3.2 创建mysql用户和组
groupadd mysql && useradd -g mysql -s /sbin/nologin mysql
3.3 下载mysql-5.6.40二进制包
wget https://downloads.mysql.com/archives/get/file/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
3.4 解压缩并修改目录名称
tar xf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz && \
mv mysql-5.6.40-linux-glibc2.12-x86_64/ mysql-5.6.40
3.5 修改目录所有者为mysql
chown -R mysql.mysql mysql-5.6.40
3.6 创建3个mysql安装目录
mkdir -p /data/mysql330{6..8}
3.7 将mysql包分别拷贝到3个安装目录
for i in {6..8};do cp -rp mysql-5.6.40 /data/mysql330$i ;done
3.8 做软连接
for i in {6..8};do ln -s /data/mysql330$i/mysql-5.6.40 /data/mysql330$i/mysql;done
3.9 编辑配置文件
basedir、datadir、log-error、port、socket文件位置不同,如果要做主从,serverid要不同
//备份原有/etc/my.cnf
mv /etc/my.cnf /etc/my.cnf.old
//编辑第一个实例配置文件
cat >/etc/my-3306.cnf<<EOF
[mysqld]
user=mysql
basedir=/data/mysql3306/mysql
datadir=/data/mysql3306/mysql/data
log-error=/data/mysql3306/mysql/data/error.log
port=3306
socket=/data/mysql3306/mysql/mysql.sock
server_id=3306
EOF
//编辑第二个实例配置文件
cat >/etc/my-3307.cnf<<EOF
[mysqld]
user=mysql
basedir=/data/mysql3307/mysql
datadir=/data/mysql3307/mysql/data
log-error=/data/mysql3307/mysql/data/error.log
port=3307
socket=/data/mysql3307/mysql/mysql.sock
server_id=3307
EOF
//编辑第三个实例配置文件
cat >/etc/my-3308.cnf<<EOF
[mysqld]
user=mysql
basedir=/data/mysql3308/mysql
datadir=/data/mysql3308/mysql/data
log-error=/data/mysql3308/mysql/data/error.log
port=3308
socket=/data/mysql3308/mysql/mysql.sock
server_id=3308
EOF
3.10 拷贝启动脚本
//分别拷贝3个实例启动脚本
for i in {6..8};do cp mysql-5.6.40/support-files/mysql.server /etc/init.d/mysqld330$i ;done
//修改文件
sed -i.bak 's#/usr/local#/data/mysql3306#g' /etc/init.d/mysqld3306 /data/mysql3306/mysql/bin/mysqld_safe
sed -i.bak 's#/usr/local#/data/mysql3307#g' /etc/init.d/mysqld3307 /data/mysql3307/mysql/bin/mysqld_safe
sed -i.bak 's#/usr/local#/data/mysql3308#g' /etc/init.d/mysqld3308 /data/mysql3308/mysql/bin/mysqld_safe