您现在的位置是:网站首页> 编程资料编程资料
Linux下MySQL多实例部署及安装指南_Mysql_
2023-05-26
330人已围观
简介 Linux下MySQL多实例部署及安装指南_Mysql_
什么是MySQL多实例
- 简单地说,Mysql多实例就是在一台服务器上同时开启多个不同的服务端口(3306、3307),同时运行多个Mysql服务进程,这些服务进程通过不同的socket监听不同的服务端口来提供服务。
- 这些Mysql多实例公用一套Mysql安装程序,使用不同的my.cnf(也可以相同)配置文件,启动程序(也可以相同)和数据文件。在提供服务时,多实例 Mysql在逻辑上看来是各自独立的,它们根据配置文件的对应设定值,获得服务器相应数量的硬件资源。
- 打个比方,Mysql多实例就相当于房子的多个卧室,每个实例可以看作一间卧室,整个服务器就是一套房子,服务器的硬件资源(cpu、mem、disk)、软件资源(centos操作系统)可以看作房子的卫生间、客厅,是房子的公用资源。

MySQL多实例优缺点:
1、有效利用服务器资源:当单个服务器资源有空剩余时,可以充分利用剩余的资源创建更多的MySQL实例提供更多的服务。2、节约服务器资源:当公司资金紧张,但是数据库又需要多个并且需各自尽量独立提供服务或者需要主从同步等,MySQL多实例就再好不过了。
3、资源相互争抢问题:当某个服务实例并发很高或者有慢查询时,整个实例会消耗更多的内存、CPU、磁盘、IO资源,导致服务器上的其它实例提供服务的质量下降,这就相当于大家在一个房子的不同卧室(MySQL实例),需要上厕所(硬件的CPU、内存、磁盘的IO资源)时,一个占用了厕所,其他人都要等待。
Mysql多实例安装指南:
具体详细参考官网 (https://dev.mysql.com/doc/refman/5.7/en/installing.html)
- mysql的安装方法有多种,如二进制安装、源码编译安装、yum安装;
- yum安装都是默认路径,安装相对简单;
- 源码安装编译的过程比较长,若没有对源码进行修改且要求使用mysql较高版本;
准备环境。
[root@mysql-multi ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@mysql-multi ~]# uname -r 3.10.0-862.el7.x86_64 [root@mysql-multi ~]# hostname -I 172.16.70.37 [root@mysql-multi ~]# getenforce Permissive [root@mysql-multi ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) Jul 23 14:36:11 mysql-multi systemd[1]: Starting firewalld - dynamic firewall daemon... Jul 23 14:36:12 mysql-multi systemd[1]: Started firewalld - dynamic firewall daemon. Jul 23 15:09:10 mysql-multi systemd[1]: Stopping firewalld - dynamic firewall daemon... Jul 23 15:09:11 mysql-multi systemd[1]: Stopped firewalld - dynamic firewall daemon. # CentOS 7 版本的系统默认自带安装了MariaDB,需要先清理 [root@mysql-multi ~]# rpm -qa |grep mariadb mariadb-libs-5.5.56-2.el7.x86_64 或 [root@mysql-multi ~]# yum list installed | grep mariadb mariadb-libs.x86_64 1:5.5.56-2.el7 @anaconda # 卸载 [root@mysql-multi ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64 或 [root@mysql-multi ~]# yum -y remove mariadb-libs.x86_64
安装并配置MySQL多实例
YUM源安装方式如下:
官网rpm包下载:https://downloads.mysql.com/archives/community,选择下载适合的版本。

# 将rpm包上传至服务器 [root@mysql-multi ~]# yum install libaio lrzsz tree net-tools -y [root@mysql-multi ~]# ls mysql-community-client-5.7.34-1.el7.x86_64.rpm mysql-community-libs-5.7.34-1.el7.x86_64.rpm mysql-community-common-5.7.34-1.el7.x86_64.rpm mysql-community-server-5.7.34-1.el7.x86_64.rpm # 必须按照顺序执行安装操作 [root@mysql-multi ~]# rpm -ivh mysql-community-common-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-libs-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-client-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# rpm -ivh mysql-community-server-5.7.34-1.el7.x86_64.rpm [root@mysql-multi ~]# yum list installed | grep mysql mysql-community-client.x86_64 5.7.34-1.el7 installed mysql-community-common.x86_64 5.7.34-1.el7 installed mysql-community-libs.x86_64 5.7.34-1.el7 installed mysql-community-server.x86_64 5.7.34-1.el7 installed # 创建实例目录 [root@mysql-multi ~]# mkdir -p /data/app/mysql/{3306,3307} [root@mysql-multi ~]# mkdir -p /data/app/mysql/3306/{data,binlog,logs} [root@mysql-multi ~]# mkdir -p /data/app/mysql/3307/{data,binlog,logs} [root@mysql-multi ~]# tree /data/app/mysql/ /data/app/mysql/ ├── 3306 │ ├── binlog │ ├── data │ └── logs └── 3307 ├── binlog ├── data └── logs # 设置目录属主属组 [root@mysql-multi ~]# chown -R mysql:mysql /data/app/mysql [root@mysql-multi ~]# ls -ld /data/app/mysql drwxr-xr-x. 4 mysql mysql 30 Jul 29 18:39 /data/app/mysql [root@mysql-multi ~]# ls -ld /data/app drwxr-xr-x. 3 root root 19 Jul 29 18:39 /data/app # 新增配置文件my3306.cnf [root@mysql-multi ~]# mv /etc/my.cnf /etc/my.cnf_bak [root@mysql-multi ~]# cat /etc/my3306.cnf [mysqld] user = mysql port = 3306 server_id = 3306 datadir = /data/app/mysql/3306/data socket = /data/app/mysql/3306/mysql3306.sock symbolic-links = 0 log-error = /data/app/mysql/3306/logs/mysqld3306.log pid-file = /data/app/mysql/3306/mysqld3306.pid # 新增配置文件my3307.cnf [root@mysql-multi ~]# cp /etc/my3306.cnf /etc/my3307.cnf [root@mysql-multi ~]# sed -i 's/3306/3307/g' /etc/my3307.cnf [root@mysql-multi ~]# cat /etc/my3307.cnf [mysqld] user = mysql port = 3307 server_id = 3307 datadir = /data/app/mysql/3307/data socket = /data/app/mysql/3307/mysql3307.sock symbolic-links = 0 log-error = /data/app/mysql/3307/logs/mysqld3307.log pid-file = /data/app/mysql/3307/mysqld3307.pid # 备份mysql启动服务文件 [root@mysql-multi ~]# mv /usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/mysqld.service_bak # 新增mysqld3306.service启动文件 [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3306.service [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 Type=forking PIDFile=/data/app/mysql/3306/mysqld3306.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3306 3306 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # 新增mysqld3307.service启动文件 [root@mysql-multi ~]# cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# sed -i 's/3306/3307/g' /usr/lib/systemd/system/mysqld3307.service [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3307.service [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 Type=forking PIDFile=/data/app/mysql/3307/mysqld3307.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3307 3307 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # 初始化多实例3306,3307 [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3306.cnf --initialize --user=mysql --datadir=/data/app/mysql/3306/data [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3307.cnf --initialize --user=mysql --datadir=/data/app/mysql/3307/data # 启动多实例3306,3307 [root@mysql-multi ~]# systemctl start mysqld3306 [root@mysql-multi ~]# systemctl start mysqld3307 [root@mysql-multi ~]# netstat -nutpl | grep mysql tcp6 0 0 :::3306 :::* LISTEN 128270/mysqld tcp6 0 0 :::3307 :::* LISTEN 128328/mysqld [root@mysql-multi ~]# ps -ef | grep mysql mysql 128270 1 1 11:43 ? 00:00:00 /usr/sbin/mysqld --defaults-file=/etc/my3306.cnf --daemonize --pid-file=/data/app/mysql/3306/mysqld3306.pid mysql 128328 1 1 11:43 ? 00:00:00 /usr/sbin/mysqld --defaults-file=/etc/my3307.cnf --daemonize --pid-file=/data/app/mysql/3307/mysqld3307.pid root 128373 949 0 11:43 pts/0 00:00:00 grep --color=auto mysql ======================================== 【 再新增一MySQL实例 】=================================================================== # 创建目录,设置属主属组 [root@mysql-multi ~]# mkdir -p /data/app/mysql/3308/{data,binlog,logs} [root@mysql-multi ~]# chown -R mysql:mysql /data/app/mysql/3308 [root@mysql-multi ~]# ls -ld /data/app/mysql/3308 drwxr-xr-x. 5 mysql mysql 44 Aug 5 14:45 /data/app/mysql/3308 # 新增配置文件my3308.cnf [root@mysql-multi ~]# cp /etc/my3306.cnf /etc/my3308.cnf [root@mysql-multi ~]# sed -i 's/3306/3308/g' /etc/my3308.cnf [root@mysql-multi ~]# cat /etc/my3308.cnf [mysqld] user = mysql port = 3308 server_id = 3308 datadir = /data/app/mysql/3308/data socket = /data/app/mysql/3308/mysql3308.sock symbolic-links = 0 log-error = /data/app/mysql/3308/logs/mysqld3308.log pid-file = /data/app/mysql/3308/mysqld3308.pid # 新增mysqld3308.service启动文件 [root@mysql-multi ~]# cp /usr/lib/systemd/system/mysqld3306.service /usr/lib/systemd/system/mysqld3308.service [root@mysql-multi ~]# sed -i 's/3306/3308/g' /usr/lib/systemd/system/mysqld3308.service [root@mysql-multi ~]# cat /usr/lib/systemd/system/mysqld3308.service [Unit] Description=MySQL Server 3308 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 Type=forking PIDFile=/data/app/mysql/3308/mysqld3308.pid TimeoutSec=0 PermissionsStartOnly=true #ExecStartPre=/usr/bin/mysqld_pre_systemd_3308 3308 ExecStart=/usr/sbin/mysqld --defaults-file=/etc/my3308.cnf --daemonize --pid-file=/data/app/mysql/3308/mysqld3308.pid $MYSQLD_OPTS EnvironmentFile=-/etc/sysconfig/mysql LimitNOFILE = 5000 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false # 初始化多实例3308 [root@mysql-multi ~]# mysqld --defaults-file=/etc/my3308.cnf --initialize --user=mysql --datadir=/data/app/mysql/3308/data # 启动多实例3308 [root@mysql-multi ~]# systemctl start mysqld3308 [root@mysql-multi ~]# netstat -nutpl | grep mysql tcp6 0 0 :::3306 :::* LISTEN 5062/mysqld tcp6 0 0 :::3307 :::* LISTEN 5098/mysqld tcp6 0 0 :::3308 :::* LISTEN 5189/mysqld [root@mysql-multi ~]# ps -ef |grep mysql mysql 5062 1 0 14:43 ? 00:00:01 /usr/sbin/mysqld --defaults-file=/etc/my3306.cnf -
相关内容
- docker 部署mysql详细过程(docker部署常见应用)_Mysql_
- MySQL之information_schema数据库详细讲解_Mysql_
- MySql分页时使用limit+order by会出现数据重复问题解决_Mysql_
- SQL insert into语句写法讲解_Mysql_
- mysql回表致索引失效案例讲解_Mysql_
- mysql IS NULL使用索引案例讲解_Mysql_
- mysql中TIMESTAMPDIFF案例详解_Mysql_
- 实操MySQL+PostgreSQL批量插入更新insertOrUpdate_Mysql_
- MYSQL row_number()与over()函数用法详解_Mysql_
- MySQL隐式类型转换导致索引失效的解决_Mysql_
点击排行
本栏推荐
