(一)MySQL多实例概述

实例是进程与内存的一个概述,所谓MySQL多实例,就是在服务器上启动多个相同的MySQL进程,运行在不同的端口(如3306,3307,3308),通过不同的端口对外提供服务。

由于MySQL在一个实例下面可以创建多个数据库,所以通常在一台服务器上只要安装一个MySQL实例即可满足使用。但在实际使用中,因为服务器硬件资源充足,或者业务需要(比如在一台服务器上创建开发数据库和测试数据库),往往会在一台服务器上创建多个实例。

(二)MySQL部署多实例的方法

MySQL多实例部署主要有以下两种方式:

使用官方自带的mysqld_multi来配置管理,特点是使用同一份MySQL配置文件,这种方式属于集中式管理,管理起来较为方便;

使用单独的MySQL配置文件来单独配置实例,这种方式逻辑简单,数据库之间没有关联。

本文将对第一种方式进行环境搭建学习。

(三)实验环境

操作系统   :CentOS Linux release 7.4.1708 (Core)

数据库版本:5.7.24-log

预计划安装4个MySQL实例,规划信息为:

实例1

实例2

实例3

实例4

basedir=/usr/local/mysql

datadir=/mysql/3306/data

port=3306

socket=/tmp/mysql_3306.sock

basedir=/usr/local/mysql

datadir=/mysql/3307/data

port=3307

socket=/tmp/mysql_3307.sock

basedir=/usr/local/mysql

datadir=/mysql/3308/data

port=3308

socket=/tmp/mysql_3308.sock

basedir=/usr/local/mysql

datadir=/mysql/3309/data

port=3309

socket=/tmp/mysql_3309.sock

(四)实验过程

(4.1)在安装MySQL之前,需要卸载服务器自带的MySQL包和MySQL数据库分支mariadb的包

[root@masterdb ~]# rpm -qa|grepmysql

[root@masterdb~]# rpm -qa |grepmariadb

mariadb-libs-5.5.56-2.el7.x86_64

[root@masterdb~]# rpm -e mariadb-libs-5.5.56-2.el7.x86_64 --nodeps

(4.2)依赖包安装

MySQL对libaio 库有依赖性。如果未在本地安装该库,则数据目录初始化和随后的服务器启动步骤将失败

# install library

[root@mysql mysql]#yum install libaio

对于MySQL 5.7.19和更高版本:通用Linux版本中增加了对非统一内存访问(NUMA)的支持,该版本现在对libnuma库具有依赖性 。

# install library

[root@mysql mysql]#yum install libnuma

(4.3)创建用户和用户组

[root@masterdb ~]# groupadd mysql

[root@masterdb~]# useradd -r -g mysql -s /bin/false mysql

(4.4)解压安装包

[root@masterdb ~]# cd /usr/local/[root@masterdb local]#tar xzvf /root/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

# 修改解压文件名,与前面定义的basedir相同

[root@masterdb local]#mv mysql-5.7.24-linux-glibc2.12-x86_64/ mysql

最终解压结果如下:

[root@masterdb mysql]# ls -l

total36drwxr-xr-x 2 root root 4096 Mar 28 13:48bin-rw-r--r-- 1 7161 31415 17987 Oct 4 2018COPYING

drwxr-xr-x 2 root root 55 Mar 28 13:48docs

drwxr-xr-x 3 root root 4096 Mar 28 13:48include

drwxr-xr-x 5 root root 230 Mar 28 13:48lib

drwxr-xr-x 4 root root 30 Mar 28 13:48 man

-rw-r--r-- 1 7161 31415 2478 Oct 4 2018README

drwxr-xr-x 28 root root 4096 Mar 28 13:48share

drwxr-xr-x 2 root root 90 Mar 28 13:48 support-files

(4.5)创建数据文件存放路径

[root@masterdb mysql]# mkdir -p /mysql/{3306,3307,3308,3309}/data

[root@masterdb mysql]#chown -R mysql:mysql /mysql

[root@masterdb mysql]# cd/mysql

[root@masterdb mysql]# tree

.

├──3306│   └── data

├──3307│   └── data

├──3308│   └── data

└──3309└── data

(4.6)创建MySQL参数配置文件

[root@masterdb mysql]# vim /etc/my.cnf

[mysqld]

user=mysql

basedir= /usr/local/mysql

[mysqld_multi]

mysqld=/usr/local/mysql/bin/mysqld_safe

mysqladmin=/usr/local/mysql/bin/mysqladmin

log=/usr/local/mysql/mysqld_multi.log

[mysqld3306]

mysqld=mysqld

mysqladmin=mysqladmin

datadir=/mysql/3306/data

port=3306server_id=3306socket=/tmp/mysql_3306.sock

log-error = /mysql/3306/error_3306.log

[mysqld3307]

mysqld=mysqld

mysqladmin=mysqladmin

datadir=/mysql/3307/data

port=3307server_id=3307socket=/tmp/mysql_3307.sock

log-error=/mysql/3307/error_3307.log

[mysqld3308]

mysqld=mysqld

mysqladmin=mysqladmin

datadir=/mysql/3308/data

port=3308server_id=3308socket=/tmp/mysql_3308.sock

log-error=/mysql/3308/error_3308.log

[mysqld3309]

mysqld=mysqld

mysqladmin=mysqladmin

datadir=/mysql/3309/data

port=3309server_id=3309socket=/tmp/mysql_3309.sock

log-error = /mysql/3309/error_3309.log

(4.7)初始化数据库

注意,初始化实例的最后一行记录了root的初始密码

# 初始化3306实例

[root@masterdb mysql]#/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql/ --datadir=/mysql/3306/data2020-03-28T06:10:28.484174Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for moredetails).2020-03-28T06:10:28.689102Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-03-28T06:10:28.723881Z 0[Warning] InnoDB: Creating foreign key constraint system tables.2020-03-28T06:10:28.781205Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: d29ad574-70ba-11ea-a38f-000c29fb6200.2020-03-28T06:10:28.782195Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed'cannot be opened.2020-03-28T06:10:28.783078Z 1 [Note] A temporary password is generated for root@localhost: YuJ6Bi=PtqCJ

# 初始化3307实例

[root@masterdb mysql]#/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql/ --datadir=/mysql/3307/data2020-03-28T06:10:45.598676Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for moredetails).2020-03-28T06:10:45.793277Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-03-28T06:10:45.829673Z 0[Warning] InnoDB: Creating foreign key constraint system tables.2020-03-28T06:10:45.886255Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: dcccdb2f-70ba-11ea-a565-000c29fb6200.2020-03-28T06:10:45.887571Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed'cannot be opened.2020-03-28T06:10:45.890477Z 1 [Note] A temporary password is generated for root@localhost: &s)nYg.e4qx#

[root@masterdb mysql]#

# 初始化3308实例

[root@masterdb mysql]#/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql/ --datadir=/mysql/3308/data2020-03-28T06:10:55.237714Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for moredetails).2020-03-28T06:10:55.442794Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-03-28T06:10:55.479012Z 0[Warning] InnoDB: Creating foreign key constraint system tables.2020-03-28T06:10:55.534839Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e28d1d57-70ba-11ea-a5c4-000c29fb6200.2020-03-28T06:10:55.535622Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed'cannot be opened.2020-03-28T06:10:55.536387Z 1 [Note] A temporary password is generated for root@localhost: Mz

[root@masterdb mysql]#

# 初始化3309实例

[root@masterdb mysql]#/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --basedir=/usr/local/mysql/ --datadir=/mysql/3309/data2020-03-28T06:11:05.644331Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for moredetails).2020-03-28T06:11:05.840498Z 0 [Warning] InnoDB: New log files created, LSN=45790

2020-03-28T06:11:05.879941Z 0[Warning] InnoDB: Creating foreign key constraint system tables.2020-03-28T06:11:05.936262Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: e8c03ed2-70ba-11ea-a8fb-000c29fb6200.2020-03-28T06:11:05.937179Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed'cannot be opened.2020-03-28T06:11:05.937877Z 1 [Note] A temporary password is generated for root@localhost: K.KLa30i-sv3

(4.8)设置环境变量

添加了环境变量,操作系统才能够自己找到mysql、mysqld_multi等命令的位置

[root@masterdb mysql]# vim /etc/profile

# 在文件末尾添加下面信息

export PATH=/usr/local/mysql/bin:$PATH

#使环境变量生效

[root@masterdb mysql]# source/etc/profile

(4.9)使用mysqld_multi管理多实例

# 使用mysqld_multi启动3306端口的实例

[root@masterdb mysql]# mysqld_multi start3306# 使用mysqld_multi启动全部实例

[root@masterdb mysql]# mysqld_multi start

# 使用mysqld_multi查看实例状态

[root@masterdb mysql]# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

MySQL server from group: mysqld3308 is running

MySQL server from group: mysqld3309 is running

使用mysqld_multi关闭实例较为麻烦,需要配置密码,因此如何关闭各个实例,见后面章节:(六)关闭多实例数据库 。

(五)访问多实例数据库

(5.1)登录MySQL数据库

在安装完成并启动数据库后,需要去访问各个MySQL实例,这里非常有意思,经常会发现无法连接到数据库上,我们不妨看一下几种连接方式:

连接方式一:使用服务器IP地址,无法连接。这里还是比较好理解的,MySQL创建完成后,数据库账号root@localhost只允许本地连接,参数“-h”后面用服务器IP被认为了远程连接,因此无法登陆

[root@masterdb mysql]# mysql -uoot -p -h192.168.10.11 -P3306

Enter password:

ERROR1130 (HY000): Host 'masterdb' is not allowed to connect to this MySQL server

连接方式二:使用localhost访问数据库,无法连接。我觉得有些匪夷所思,可以看到,MySQL实例使用的socket文件不对

[root@masterdb mysql]# mysql -uroot -p -hlocalhost -P3306

Enter password:

ERROR2002 (HY000): Can't connect to local MySQL server through socket'/tmp/mysql.sock'(2)

连接方式三:使用127.0.0.1访问数据库,可以连接。有些难以理解,理论上127.0.0.1和localhost是对应的,127.0.0.1可以访问数据库,但是localhost却无法访问

[root@masterdb mysql]# mysql -uroot -p -h127.0.0.1 -P3306

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connectionid is 7Server version:5.7.24MySQL Community Server (GPL)

Copyright (c)2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type'help;' or '\h' for help. Type '\c' to clearthe current input statement.

mysql>exit

Bye

连接方式四:使用socket文件连接,可以正常访问

[root@masterdb mysql]# mysql -S /tmp/mysql_3306.sock -p

Enter password:

Welcome to the MySQL monitor. Commands end with ; or \g.

Your MySQL connectionid is 4Server version:5.7.24Copyright (c)2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type'help;' or '\h' for help. Type '\c' to clearthe current input statement.

mysql>

初次登陆MySQL数据库,需要修改root密码,否则无法正常使用

[root@masterdb mysql]# mysql -S /tmp/mysql_3306.sock -p

Enter password:

Welcometo the MySQL monitor. Commands end with ; or\g.

Your MySQL connection idis 4Server version:5.7.24Type'help;' or '\h' for help. Type '\c' to clear the currentinput statement.--无法查询

mysql>show databases;

ERROR1820 (HY000): You must reset your password using ALTER USERstatement before executing this statement.--修改root@localhost用户的密码

mysql> alter user root@localhost identified by '123456';

Query OK,0 rows affected (0.00sec)

mysql> flush privileges;

Query OK,0 rows affected (0.00sec)

mysql> exitBye

(六)关闭多实例数据库

(6.1)直接使用mysqld_multi来关闭实例

使用mysqld_multi关闭多实例数据库目前来看比较麻烦,需要在my.cnf文件的[mysqld_multi]模块里面配置用户密码,并且各个数据库的用户密码都需要相同,否则无法关闭。

我们可以看一下使用mysqld_multi来关闭数据库实例的日志:

[root@masterdb mysql]# cat /usr/local/mysql/mysqld_multi.log

# 当执行:mysqld_multi report时,显示所有数据库均在运行

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

MySQL server from group: mysqld3308 is running

MySQL server from group: mysqld3309 is running

mysqld_multi logfile version 2.16; run: Sat Mar 28 14:55:16 2020

# 当执行:mysqld_multi stopt时,mysqld_multi会调用mysqladmin去关闭数据库,使用的是[mysqld_multi]里面配置的账号密码,此时3306的密码是正确的,

# 其它都是错误的,因此3306关闭成功,而其它端口的实例因为密码错误而连接数据库失败,自然没有关闭数据库

Stopping MySQL servers

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

mysqladmin: [Warning] Using a password on the command line interface can be insecure.

mysqladmin: connect to server at'localhost'failed

error:'Access denied for user'root'@'localhost'(using password: YES)'mysqladmin: [Warning] Using a password on the command line interface can be insecure.

mysqladmin: connect to server at'localhost'failed

error:'Access denied for user'root'@'localhost'(using password: YES)'mysqladmin: [Warning] Using a password on the command line interface can be insecure.

mysqladmin: connect to server at'localhost'failed

error:'Access denied for user'root'@'localhost'(using password: YES)'mysqld_multi logfile version 2.16; run: Sat Mar 28 14:55:21 2020# 结果:仅仅关闭了密码正确的3306端口数据库

Reporting MySQL servers

MySQL server from group: mysqld3306 is not running

MySQL server from group: mysqld3307 is running

MySQL server from group: mysqld3308 is running

MySQL server from group: mysqld3309 is running

mysqld_multi logfile version 2.16; run: Sat Mar 28 14:58:07 2020

既然知道了mysqld_multi是调用mysqladmin来关闭数据库的,那最好的办法还是直接使用mysqladmin来关闭各个数据库了,下面演示使用mysqladmin来关闭数据库实例。

(6.2)使用mysqladmin来关闭实例

[root@masterdb mysql]# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld3306 is running

MySQL server from group: mysqld3307 is running

MySQL server from group: mysqld3308 is running

MySQL server from group: mysqld3309 is running

[root@masterdb mysql]#

[root@masterdb mysql]#

[root@masterdb mysql]# cd

[root@masterdb~]# mysqladmin -h127.0.0.1 -uroot -p -P3306 shutdown

Enter password:

[root@masterdb~]#

[root@masterdb~]# mysqladmin -h127.0.0.1 -uroot -p -P3307 shutdown

Enter password:

[root@masterdb~]# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld3306 is not running

MySQL server from group: mysqld3307 is not running

MySQL server from group: mysqld3308 is running

MySQL server from group: mysqld3309 is running

最终关闭了3306和3307数据库。

【结束】

相关文档集合:

1.在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式

一台服务器可以安装多个mysql数据库_在一台Linux服务器上安装多个MySQL实例(一)--使用mysqld_multi方式...相关推荐

  1. 安卓studio访问mysql数据库_小白通过JDBC在AndroidStudio一步步来访问MYSQL数据库-Go语言中文社区...

    许久没来写博客了,不是因为没有时间,而是把时间拿来敲一些设计模式,数据结构了,毕业不是科班出身,还是得练习下基本功. 今天突然想玩玩JDBC,说做就做,这里记录我的整个操作过程,数据的流程参与互联网上 ...

  2. mediawiki修改用mysql数据库_修改MediaWiki的动态页面列表DPL设置降低MySQL负载

    最近一直在为降低MySQL服务器负载努力,Drupal网站中主要是排查Views引起的性能问题,而MediaWiki中也有一个与Drupal的Views对应的工具:Dynamic Page List ...

  3. mcbbs mysql数据库_[娱乐|RPG]WEpicInventory —— 史诗背包!无限拓展!高度自由!MYSQL支持![1.12.2]...

    background: 'file:WEpicInventory/主界面/背景2.png' x: -1 y: -1 w: 205 h: 166 slotLeft: 6 slotTop: 86 # # ...

  4. linux riot密码,在Linux系统上安装Riot的方法

    本文介绍在Linux操作系统上安装Riot的方法,支持Ubuntu.Debian.Arch Linux等系统,也能使用Snap或Flatpak命令安装. 简介 Riot是一个由Matrix提供支持的通 ...

  5. linux重装eclipse_如何在Linux系统上安装Eclipse

    如何在Linux系统上安装Eclipse 作为Java程序员,需要在Linux系统上安装Eclipse,很多人不知要如何安装,在安装Eclipse前,还需安装JDK,下面小编就给大家介绍下Linux如 ...

  6. 音乐服务器 linux,在 Ubuntu Linux 桌面上安装 spotify在线听音乐的步骤

    如何在 Ubuntu Linux 桌面上安装 spotify 来在线听音乐? Spotify 是一个可让你访问大量歌曲的数字音乐流服务.你可以免费收听或者购买订阅,可以创建播放列表.订阅用户可以免广告 ...

  7. 将sql数据导入mysql数据库_将sql导入mysql数据库

    MYSQL导入导出.sql文件 MYSQL导入导出.sql文件 一.MYSQL的命令行模式的设置:桌面->我的电脑->属性->环境变量->新建->PATH=": ...

  8. 服务器之间数据文件推送,数据库数据推送到另外服务器

    数据库数据推送到另外服务器 内容精选 换一换 该方案优点是简单,容易上手,缺点是停机时间较长.因此它适用于数据量不大,或者允许停机的时间较长,并且在这个时间范围内能够完成的数据.由于云数据库RDS服务 ...

  9. Redis进阶实践之二如何在Linux系统上安装安装Redis

    2019独角兽企业重金招聘Python工程师标准>>> Redis进阶实践之二如何在Linux系统上安装安装Redis 一.引言 上一篇文章写了"如何安装VMware Pr ...

最新文章

  1. Redirecting to /bin/systemctl restart sshd.service
  2. iOS再现安全漏洞 “1970变砖”问题仍未解决
  3. 【WebRTC---入门篇】(四)WebRTC设备管理
  4. mysql oracle 备份数据库备份_完整备份Oracle数据库
  5. listary什么意思_listary使用心得
  6. 设置android 触摸灵敏,3D Press触屏灵敏度设置教程 魅族PRO 6 3D Press触控力度怎么调...
  7. linux命令stat,查看文件详细信息
  8. 别被忽悠了!阿里内部人士:我们正悄悄地拆掉中台,你还在建?
  9. 仅20行代码,实现文件自动化上传。
  10. ACM-ICPC竞赛算法类型
  11. .net HTML编码解析
  12. distri.lua的web运维工具
  13. 【最优化】最优化理论的基本概念
  14. 王利杰:我做天使投资的心路历程
  15. tomcat下的temp文件夹
  16. 什么是动态编程Python示例
  17. 马哲概述 如何理解商品的使用价值与价值以及货币,纸币
  18. 计算机无法安装蓝牙设备,笔记本蓝牙无法添加设备解决方法
  19. 基于matlab的步进电机转速控制仿真,matlab步进电机转速控制仿真(课程设计).doc
  20. 如何布局您的PC站和移动站,并表达两者之间内容的对应关系

热门文章

  1. c语言中 n的意义,\n\n在c语言中是什么意思?_后端开发
  2. 【离散椭圆弧】将椭圆弧按弧长等分为一定数量弧上点
  3. linux cfs时间,Linux调度的实现(CFS)——虚拟时间计算
  4. 面试-vue组件间通信
  5. mysql数据类型、字段类型
  6. 【Python】Python实现N级台阶,一次可以走1步,2步,3步,一共多少种上楼梯方法
  7. 研二导师画大饼,不给时间实习,咋办
  8. harrynull过关之路(11-20)
  9. 译|深入理解Metaspace
  10. Graphviz绘制模型树1——软件配置与XGBoost树的绘制