ITPub博客

首页 > 数据库 > MySQL > MySQL多实例部署

MySQL多实例部署

原创 MySQL 作者:easydba 时间:2020-09-05 16:07:28 0 删除 编辑

一 MySQL多实例介绍

1.1 什么是MySQL多实例

MySQL多实例,简单理解就是在一台服务器 上, 服务开启多个不同的端口(如3306、3307,3308),运行多个服务进程。这些 mysql 服务进程通过不同的 socket 来监听不同的数据端口,进而互不干涉的提供各自的服务。


1.2 MySQL应用场景

1)在测试环境中,公司会需要多个数据库环境来测试业务,当使用强度又不是很高,在单机上部署多个实例是个不错选择。

2)公司业务访问量不是太大的时候,服务器的资源基本都是过剩状态。此时也适合 mysql 多实例的应用。


1.3 多实例实现的方式

mysql 多实例常规方法有两种

方法一:使用多个 my.cnf 配置文件启动不同的进程来实现多实例,这种方法逻辑简单,配置不容易出错。

方法二:使用官方自带的 mysqld_multi 来控制 my.cnf 配置文件,来实现多实例,配置相对复杂。(本文未涵盖)


1.4 在同一主机下安装多个 mysql 实例,需要处理以下问题

1)配置文件安装路径不能相同

2)数据库目录不能相同

3)启动脚本不能同名

4)端口不能相同

5)socket 文件生成路径不能相同


二 MySQL安装准备

2.1 二进制包下载



2.2 创建软件目录,解压迁移软件

[root@db03 tmp]# mkdir -p /opt/
[root@db03 tmp]# tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz -C /opt/
[root@db03 tmp]# cd /opt
[root@db03 opt]# ls
mysql-5.7.30-linux-glibc2.12-x86_64
[root@db03 opt]# mv mysql-5.7.30-linux-glibc2.12-x86_64/ mysql
[root@db03 opt]# ls
mysql


2.3 处理原始环境中的 mysql,并安装依赖库

如果以前安装过 mysql 需要停止服务,并关闭开机自启动,移走 /etc/my.cnf 配置文件。系统自带的 mariadb,也建议删除

[root@db03 ~]# killall mysqld
[root@db03 ~]# mv /etc/my.cnf /etc/my.cnf.bak
[root@db03 opt]# rpm -qa | grep mariadb
mariadb-libs-5.5.64-1.el7.x86_64
[root@db03 opt]# yum remove mariadb-libs.x86_64 -y
yum install -y libaio


2.4 创建 mysql 用户

[root@db03 opt]# groupadd -g 1002 mysql
[root@db03 opt]# useradd -u 1002 -g 1002 -M -s /sbin/nologin mysql
[root@db03 opt]# id mysql
uid=1002(mysql) gid=1002(mysql) groups=1002(mysql)


2.5 添加环境变量

echo 'export PATH=$PATH:/opt/mysql/bin' >>  /etc/profile 
source /etc/profile


三 MySQL多实例部署

3.1 准备多实例目录

[root@db03 ~]# mkdir -p /data/330{7,8,9}/data


3.2 准备多配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF
cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF
cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/opt/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF


3.3 初始化三套数据字典

mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/opt/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/opt/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/opt/mysql


3.4 systemd管理多实例,准备三个启动文件

cat >/etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF
[root@db03 ~]# cd /etc/systemd/system/
[root@db03 system]# cp mysqld3307.service mysqld3308.service 
[root@db03 system]# cp mysqld3307.service mysqld3309.service
vim mysqld3308.service
# 修改为:
ExecStart=/application/mysql/bin/mysqld  --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
# 修改为:
ExecStart=/application/mysql/bin/mysqld  --defaults-file=/data/3309/my.cnf
修改后的结果
[root@db03 system]# grep 'ExecStart' mysqld3307.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
[root@db03 system]# grep 'ExecStart' mysqld3308.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
[root@db03 system]# grep 'ExecStart' mysqld3309.service
ExecStart=/opt/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf


3.5 授权目录权限

[root@db03 ~]# chown -R mysql.mysql /opt/mysql
[root@db03 ~]# chown -R mysql.mysql /data/330*


3.6 启动多实例

[root@db03 ~]# systemctl start mysqld3307.service
[root@db03 ~]# systemctl start mysqld3308.service
[root@db03 ~]# systemctl start mysqld3309.service


3.7 验证多实例

[root@db03 ~]# netstat -lnp|grep 330
tcp6       0      0 :::3307                 :::*                    LISTEN      70516/mysqld        
tcp6       0      0 :::3308                 :::*                    LISTEN      70557/mysqld        
tcp6       0      0 :::3309                 :::*                    LISTEN      70594/mysqld        
unix  2      [ ACC ]     STREAM     LISTENING     194532   70516/mysqld         /data/3307/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     198752   70594/mysqld         /data/3309/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     198669   70557/mysqld         /data/3308/mysql.sock
[root@db03 ~]# mysql -S /data/3307/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           7 |
+-------------+
[root@db03 ~]# mysql -S /data/3308/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           8 |
+-------------+
[root@db03 ~]# mysql -S /data/3309/mysql.sock -e "select @@server_id"
+-------------+
| @@server_id |
+-------------+
|           9 |
+-------------+


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69982604/viewspace-2717297/,如需转载,请注明出处,否则将追究法律责任。

下一篇: MyCAT之读写分离
请登录后发表评论 登录
全部评论
个人博客首发:easydb.net 微信公众号:easydb

注册时间:2020-08-25

  • 博文量
    19
  • 访问量
    7960