热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

LInux下安装及配置MySQL多实例[mysqld_multi]

点击蓝字关注我吧  一、MySQL多实例介绍1.1. 什么是MySQL多实例MySQL多实例就是在一台机器上开启多个不同的服务端口(如:3306,3


点击蓝字关注我吧



 一、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.1.安装MySQL


说明:此处使用的是面编译的二进制包安装,版本为 mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz


2.1.1 创建用户


shell> groupadd mysql
shell> useradd -r -g mysql -s bin/false mysql


2.1.2 解压文件


shell> cd /usr/local 
shell> tar zxvf mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz
shell> ln -s mysql-5.7.27-linux-glibc2.12-x86_64.tar.gz mysql


2.1.3 创建相关目录并分配权限


shell> cd mysql
shell> mkdir data/mysql_3306
shell> mkdir data/mysql_3307

shell>
 chown mysql:mysql data/mysql_3306 -R
shell> chown mysql:mysql data/mysql_3307 -R


说明:此处分别为实例 3306和3307创建了两个目录,用了存放数据库表文件,同时把目前权限更为给了 mysql用户。


2.1.4 配置环境变量


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



注意:
切记需要把mysql 加入到环境变量中,否则 在启动时出现如下错误:
WARNING: my_print_defaults command not found.
Please make sure you have this command available and
in your path. The command is available from the latest
MySQL distribution.
ABORT: Can't find command 'my_print_defaults'.
This command is available from the latest MySQL
distribution. Please make sure you have the command
in your PATH.


2.1.5 更改配置文件

创建文件 etc/my.cnf 内容如下所示:


[mysqld_multi]
mysqld = usr/local/mysql/bin/mysqld_safe
mysqladmin = usr/local/mysql/bin/mysqladmin
user = root
pass = root@123
log = usr/local/mysql/log/mysql_multi.log

[mysqld3306]

basedir = usr/local/mysql
datadir = usr/local/mysql/data/mysql_3306
socket = tmp/mysql_3306.sock
port = 3306
pid-file = usr/local/mysql/data/mysql_3306/mysql.pid
user = mysql
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = usr/local/mysql/log/3306/slow.log
log-error = usr/local/mysql/log/3306/error.log
binlog_format = mixed
server_id = 1
log_bin = mysql-bin

[mysqld3307]

basedir = usr/local/mysql
datadir = usr/local/mysql/data/mysql_3307
socket = tmp/mysql_3307.sock
port = 3307
pid-file = usr/local/mysql/data/mysql_3307/mysql.pid
user = mysql
server_id = 2
slow_query_log = 1
long_query_time = 1
slow_query_log_file = usr/local/mysql/log/3307/slow.log
log-error = usr/local/mysql/log/3307/error.log


说明:

  1. 可以通过命令 mysqld_multi --example 查看多实例配置文件示例。

  2. [mysqld_multi] 中的user和pass分别为数据库示例的登录用户名和密码,多实例直接要配置相同,否则 执行 mysqld_multi stop 命令是无法停止服务。

  3. [mysqldN] 表示示例组,必须以msyqld开通后面的N为整数。

  4. socket 指定的最好指定到 tmp 目录下。


2.1.6 初始化数据库

  1. 初始化3306实例


bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/mysql_3306


执行上述命令后,如下图所示,红色框中为初始化密码,要记住

  • 初始化3307

    实例3307实例与3306实例类似,只是把 --datadir 属性改为 3307实例的路径即可


bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/mysql_3307


注意:
在初始化是需要把参数 --defaults-file=/etc/my.cnf 放到所有参数的前面,否则会报如下错误初始化失败。unknown variable 'defaults-file=/etc/my.cnf'


2.1.7 启动实例

  1. 查看实例状态

mysqld_multi report

Reporting MySQL servers
MySQL server from group: mysqld3306 is not running
MySQL server from group: mysqld3307 is not running

输出结果:


配置了两个组,都处于 not running 状态


  1. 启动全部实例


mysqld_multi start


出现如下,说明启动成功:


Reporting MySQL servers
MySQL server from group: mysqld3306 is running
MySQL server from group: mysqld3307 is running


说明:
如果此处还为 not running 说明启动失败,可以查看[mysqld_multi]中log属性指定的日志文件。


  1. 停止所有服务


mysqld_multi stop


  1. 其他命令


mysqld_multi start 3306   # 启动单个服务
mysqld_multi report 3306  # 查看单个服务状态
mysqld_multi stop 3306   # 停止单个服务


2.1.8 登录服务

  1. 方式一 通过指定 ip 和port登录


mysql -uroot -p'XXXXX' -h127.0.0.1 -P3306


  1. 方式二通过指定sock 文件登录


mysql -uroot -p'XXXXX' -S /tmp/mysql_3306.sock


说明:其中-p 中替换为 2.1.6 初始化数据库中生成的随机密码。


2.1.9 更改初始密码

登录服务后,执行如下命令更改 root用户密码


ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';


或者


set password for root@'localhost'=password('new_password');
flush privileges;



2.2 常见问题


2.2.1 ABORT: Can’t find command ‘my_print_defaults’.

此问题是没有把mysql加入到环境变量中。参考 2.1.4 配置环境变量

2.2.2 unknown variable ‘defaults-file=/etc/my.cnf’

此问题是在初始化时,需要把 --defaults-file 放到所有参数的最前面。

2.2.3 mysqld_multi stop 无效问题

  1. 把配置文件/etc/my.cnf中的[mysqld_multi] 模块中password改为pass

  2. 查看配置文件/etc/my.cnf中的[mysqld_multi]模块中配置的 user 和pass属性是否跟数据库实例用户名和密码一致。

2.2.4 No groups to be reported (check your GNRs)

  1. 查看配置文件my.cnf是否在/etc目录下。如果不在目录下可以指定文件位置。如下:

mysqld_multi --defaults-file=/usr/local/mysql/my.cnf [start|report]


  1. 检查配置文件my.cnf配置是否存在错误

2.2.4 ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock’

此问题是由于连接mysql服务的用户,没有访问mysqld.sock文件的权限,给用户分配权限即可



end





推荐阅读
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Python瓦片图下载、合并、绘图、标记的代码示例
    本文提供了Python瓦片图下载、合并、绘图、标记的代码示例,包括下载代码、多线程下载、图像处理等功能。通过参考geoserver,使用PIL、cv2、numpy、gdal、osr等库实现了瓦片图的下载、合并、绘图和标记功能。代码示例详细介绍了各个功能的实现方法,供读者参考使用。 ... [详细]
  • 利用Visual Basic开发SAP接口程序初探的方法与原理
    本文介绍了利用Visual Basic开发SAP接口程序的方法与原理,以及SAP R/3系统的特点和二次开发平台ABAP的使用。通过程序接口自动读取SAP R/3的数据表或视图,在外部进行处理和利用水晶报表等工具生成符合中国人习惯的报表样式。具体介绍了RFC调用的原理和模型,并强调本文主要不讨论SAP R/3函数的开发,而是针对使用SAP的公司的非ABAP开发人员提供了初步的接口程序开发指导。 ... [详细]
  • 服务器上的操作系统有哪些,如何选择适合的操作系统?
    本文介绍了服务器上常见的操作系统,包括系统盘镜像、数据盘镜像和整机镜像的数量。同时,还介绍了共享镜像的限制和使用方法。此外,还提供了关于华为云服务的帮助中心,其中包括产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、常见问题和视频帮助等技术文档。对于裸金属服务器的远程登录,本文介绍了使用密钥对登录的方法,并提供了部分操作系统配置示例。最后,还提到了SUSE云耀云服务器的特点和快速搭建方法。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了三种方法来实现在Win7系统中显示桌面的快捷方式,包括使用任务栏快速启动栏、运行命令和自己创建快捷方式的方法。具体操作步骤详细说明,并提供了保存图标的路径,方便以后使用。 ... [详细]
  • 本文讨论了在openwrt-17.01版本中,mt7628设备上初始化启动时eth0的mac地址总是随机生成的问题。每次随机生成的eth0的mac地址都会写到/sys/class/net/eth0/address目录下,而openwrt-17.01原版的SDK会根据随机生成的eth0的mac地址再生成eth0.1、eth0.2等,生成后的mac地址会保存在/etc/config/network下。 ... [详细]
  • 本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ... [详细]
  • 本文讨论了在使用sp_msforeachdb执行动态SQL命令时,当发生错误时如何捕获数据库名称。提供了两种解决方案,并介绍了如何正确使用'?'来显示数据库名称。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
author-avatar
小阳
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有