LInux 下配置MySQL多实例[mysqld_multi]

一、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  ## 创建`mysql`用户组 
shell> useradd -r -g mysql -s /bin/false mysql ## 创建 `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 #创建3306实例目录
shell> mkdir data/mysql_3307 #创建3307实例目录

shell> chown mysql:mysql data/mysql_3306 -R #更改目录权限
shell> chown mysql:mysql data/mysql_3307 -R #更改目录权限

说明:此处分别为实例 33063307创建了两个目录,用了存放数据库表文件,同时把目前权限更为给了 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] 中的userpass分别为数据库示例的登录用户名和密码,多实例直接要配置相同,否则 执行 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

执行上述命令后,如下图所示,红色框中为初始化密码,要记住
在这里插入图片描述
3. 初始化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. 方式一 通过指定 ipport登录
   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]模块中配置的 userpass属性是否跟数据库实例用户名密码一致。
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文件的权限,给用户分配权限即可。

2.2.5 mysqld_safe mysqld from pid file /data/mysql3306/xxx.pid ended

此问题一般是由于 某个文件权限不够,请检查 所有的目录或文件 mysql 用户是否有权限

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Linux系统下,可以通过多个实例来运行多个MySQL服务器,每个实例可以拥有独立的配置文件、数据目录和日志文件等。这样可以方便地管理多个不同的MySQL实例,提高系统的可靠性和稳定性。下面简单介绍一下在LinuxMySQL实例安装的过程。 1. 安装MySQL 首先需要安装MySQL,可以通过命令行或者图形界面进行安装。以Ubuntu系统为例,可以使用以下命令进行安装: ``` sudo apt-get update sudo apt-get install mysql-server ``` 2. 创建新的MySQL实例目录 在Linux系统下,每个MySQL实例需要有独立的数据目录和日志文件等。可以使用以下命令创建一个新的MySQL实例目录: ``` sudo mkdir /var/lib/mysql2 ``` 3. 复制MySQL配置文件 每个MySQL实例需要有独立的配置文件,可以通过复制默认配置文件来创建新的配置文件。以Ubuntu系统为例,可以使用以下命令复制默认配置文件: ``` sudo cp /etc/mysql/my.cnf /etc/mysql/my2.cnf ``` 4. 修改新的配置文件 修改新的配置文件,使其指向新的数据目录和日志文件等。以Ubuntu系统为例,可以使用以下命令编辑新的配置文件: ``` sudo vi /etc/mysql/my2.cnf ``` 在文件中修改以下内容: ``` [client] port = 3307 socket = /var/run/mysqld/mysqld2.sock [mysqld_safe] pid-file = /var/run/mysqld/mysqld2.pid socket = /var/run/mysqld/mysqld2.sock [mysqld] user = mysql pid-file = /var/run/mysqld/mysqld2.pid socket = /var/run/mysqld/mysqld2.sock port = 3307 basedir = /usr datadir = /var/lib/mysql2 tmpdir = /tmp log_error = /var/log/mysql/error2.log ``` 其中,需要修改的内容主要是端口号、数据目录、日志文件等。 5. 初始化新的MySQL实例 使用以下命令初始化新的MySQL实例: ``` sudo mysqld --defaults-file=/etc/mysql/my2.cnf --initialize-insecure --user=mysql ``` 其中,--defaults-file参数指定使用新的配置文件,--initialize-insecure参数表示不设置root密码,--user参数表示启动MySQL进程的用户。 6. 启动新的MySQL实例 使用以下命令启动新的MySQL实例: ``` sudo systemctl start mysql@2.service ``` 其中,2表示新的MySQL实例的编号。 至此,多实例MySQL服务器已经成功安装。可以通过以下命令查看多个MySQL实例的状态: ``` sudo systemctl status mysql@*.service ``` 其中,*表示所有的MySQL实例

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值