MySQL 单机多实例部署 多配置文件 mysqld_multi 两种方案

MySQL 专栏收录该内容
16 篇文章 1 订阅


1-MySQL 多实例简介

1.1-MySQL 多实例是什么

MySQL多实例是在一台机器上通过开启多个不同的服务端口(如:3306 3307 3308…),运行多个MySQL服务进程,通过不同的socket监听不同的服务端口来提供各自的服务。

1.2-MySQL 多实例特点

  • 有效利用服务器资源:当单个服务器资源有剩余时,可以充分利用剩余的资源提供更多的服务
  • 资源互相抢占问题:当某个服务实例服务并发很高时或者开启慢查询时,会消耗更多的内存、CPU、磁盘IO资源,导致服务器上的其他实例提供服务的质量下降。

1.3-单机多实例部署注意事项

  • 配置文件中安装路径不能相同。
  • 数据库生成文件目录不能相同。
  • 数据库启动脚本不能同名。
  • 数据库启动端口号不能相同。
  • socket文件的生成路径不能相同。

1.4-MySQL 多实例两种部署方式

1.4.1-使用多个配置文件启动不同的进程来实现多实例

  • 优点:逻辑简单,配置简单。
  • 缺点:管理起来不太方便。

1.4.2-通过官方自带的 mysqld_multi 使用单独的配置文件来实现多实例

  • 优点:管理起来很方便,集中管理。
  • 缺点:定制每个实例的配置不太方面。

2-多配置文件方案

CentOS 下载 安装 MySQL 8.0

MySQL mysqld mysqld_safe mysql.server mysqld_multi 四种启动方式区别


3-mysqld_multi 方案

3.1-下载免编译包

CentOS 下载 安装 MySQL 8.0

3.2-查看系统版本

cat /etc/redhat-release

在这里插入图片描述

3.3-创建用户和用户组

# 自动创建用户 用户组
useradd mysql

# 设置用户密码
passwd mysql

在这里插入图片描述

3.4-解压免编译包

# 解压到 /data/opt/ 目录下
tar -xvf /data/targz/mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz -C /data/opt/

在这里插入图片描述

3.5-解压文件夹重命名

mv /data/opt/mysql-8.0.19-linux-glibc2.12-x86_64/ /data/opt/mysql-8.0.19

在这里插入图片描述
备注:

# 目录 A 重命名 B
mv A B
# 目录 A 移动到目录 B 下并重命名为 C
mv /A /B/C

3.6-解压文件夹软连接

ln -s /data/opt/mysql-8.0.19/ /usr/local/mysql-8.0.19

在这里插入图片描述

3.7-配置文件 my.cnf

my.cnf配置文件生效优先级(由高到低):

  • MySQL启动时指定的具体参数。
  • MySQL启动时指定位置的配置文件。
  • MySQL数据目录下的my.cnf文件。
  • MySQL读取/etc/my.cnf文件。
  • MySQL默认的参数。

multi.cnf

# 客户端设置:客户端的连接参数
[client]
# 连接 MySQL 使用的端口
port = 3308
# 连接 MySQL 使用的套接字文件
socket = /data/data/mysql/multi/mysql.sock
# 设置字符集
default-character-set = utf8mb4

# 服务端设置
[mysqld]
# 数据库默认编码(5.1以下 default-character-set)
character_set_server = utf8mb4
# 数据库默认比对规则、排序规则
collation_server = utf8mb4_bin
# 该目录为根目录(安装目录)
basedir = /data/opt/mysql-8.0.19

[mysqld_multi]
# mysqld命令位置,用于启动MySQL实例,也可以为mysqld_safe命令位置
mysqld = /data/opt/mysql-8.0.19/bin/mysqld_safe
# 用于停止MySQL实例
mysqladmin = /data/opt/mysql-8.0.19/bin/mysqladmin
# 调用mysqladmin时的账号
user = mysql
# 调用mysqladmin时的密码
password = password
# 日志
log = /data/data/mysql/multi/log/mysql_multi.log
 
# 3308数据库
[mysqld3308]
# 监听端口
port = 3308
# 服务id:可高可用时区分
server_id = 3308
# 数据库默认编码(5.1以下 default-character-set)
character_set_server = utf8mb4
# 数据库默认比对规则、排序规则
collation_server = utf8mb4_bin
# 该目录为根目录(安装目录)
basedir = /data/opt/mysql-8.0.19
# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/multi/8.0.19_3308/data
# 指定客户端程序与数据库间通讯的套接字文件
socket = /data/data/mysql/multi/8.0.19_3308/mysql3308.sock
# 数据库存放临时文件的目录(创建文件夹且文件夹中无文件)
tmpdir = /data/data/mysql/multi/8.0.19_3308/tmp
pid-file = /data/data/mysql/multi/8.0.19_3308/mysql3308.pid 
explicit_defaults_for_timestamp = true
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/data/mysql/multi/8.0.19_3308/log/slow.log
log-error = /data/data/mysql/multi/8.0.19_3308/log/error.log
binlog_format = mixed
log-bin = /data/data/mysql/multi/8.0.19_3308/log/mysql3308_bin

# 3309数据库
[mysqld3309]
# 监听端口
port = 3309
# 服务id:可高可用时区分
server_id = 3309
# 数据库默认编码(5.1以下 default-character-set)
character_set_server = utf8mb4
# 数据库默认比对规则、排序规则
collation_server = utf8mb4_bin
# 该目录为根目录(安装目录)
basedir = /data/opt/mysql-8.0.19
# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/multi/8.0.19_3309/data
# 指定客户端程序与数据库间通讯的套接字文件
socket = /data/data/mysql/multi/8.0.19_3309/mysql3309.sock
# 数据库存放临时文件的目录(创建文件夹且文件夹中无文件)
tmpdir = /data/data/mysql/multi/8.0.19_3309/tmp
pid-file = /data/data/mysql/multi/8.0.19_3309/mysql3309.pid 
explicit_defaults_for_timestamp = true
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/data/mysql/multi/8.0.19_3309/log/slow.log
log-error = /data/data/mysql/multi/8.0.19_3309/log/error.log
binlog_format = mixed
log-bin = /data/data/mysql/multi/8.0.19_3309/log/mysql3309_bin

# 3310数据库
[mysqld3310]
# 监听端口
port = 3310
# 服务id:可高可用时区分
server_id = 3310
# 数据库默认编码(5.1以下 default-character-set)
character_set_server = utf8mb4
# 数据库默认比对规则、排序规则
collation_server = utf8mb4_bin
# 该目录为根目录(安装目录)
basedir = /data/opt/mysql-8.0.19
# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/multi/8.0.19_3310/data
# 指定客户端程序与数据库间通讯的套接字文件
socket = /data/data/mysql/multi/8.0.19_3310/mysql3310.sock
# 数据库存放临时文件的目录(创建文件夹且文件夹中无文件)
tmpdir = /data/data/mysql/multi/8.0.19_3310/tmp
pid-file = /data/data/mysql/multi/8.0.19_3310/mysql3310.pid 
explicit_defaults_for_timestamp = true
log-output = file
slow_query_log = 1
long_query_time = 1
slow_query_log_file = /data/data/mysql/multi/8.0.19_3310/log/slow.log
log-error = /data/data/mysql/multi/8.0.19_3310/log/error.log
binlog_format = mixed
log-bin = /data/data/mysql/multi/8.0.19_3310/log/mysql3310_bin

3.8-安装文件权限

# 设置安装文件所属 用户和用户组
chown -R mysql:mysql /data/opt/mysql-8.0.19/

# 设置安装文件调用权限
chmod -R 755 /data/opt/mysql-8.0.19/

# 查看设置结果
ll /data/opt/mysql-8.0.19/

在这里插入图片描述
备注:

# 通配符匹配
chown -R mysql:mysql /usr/local/mysql*
chmod -R 755 /usr/local/mysql*

3.9-创建运行数据文件夹

mkdir -p /data/data/mysql/multi/log/
mkdir -p /data/data/mysql/multi/8.0.19_3308/data
mkdir -p /data/data/mysql/multi/8.0.19_3308/log
mkdir -p /data/data/mysql/multi/8.0.19_3308/tmp
mkdir -p /data/data/mysql/multi/8.0.19_3309/data
mkdir -p /data/data/mysql/multi/8.0.19_3309/log
mkdir -p /data/data/mysql/multi/8.0.19_3309/tmp
mkdir -p /data/data/mysql/multi/8.0.19_3310/data
mkdir -p /data/data/mysql/multi/8.0.19_3310/log
mkdir -p /data/data/mysql/multi/8.0.19_3310/tmp

在这里插入图片描述

3.10-设置运行数据文件夹权限

chown -R mysql:mysql /data/data/mysql/multi
chmod -R 755 /data/data/mysql/multi

在这里插入图片描述

3.11-初始化 MySQL

MySQL 5.7.2及以上版本与以前版本不同,很多资料上使用命令../scripts/mysql_install_db。而在MySQL 5.7.2mysql_install_db的指令在bin目录下,官网说使用mysqld --initialize进行初始化。

3.11.1-切换至 mysql 用户

su mysql

3.11.2-初始化数据库 3308、3309、3310

/data/opt/mysql-8.0.19/bin/mysqld --defaults-file=/data/opt/mysql-8.0.19/multi.cnf --datadir=/data/data/mysql/multi/8.0.19_3308/data --initialize
/data/opt/mysql-8.0.19/bin/mysqld --defaults-file=/data/opt/mysql-8.0.19/multi.cnf --datadir=/data/data/mysql/multi/8.0.19_3309/data --initialize
/data/opt/mysql-8.0.19/bin/mysqld --defaults-file=/data/opt/mysql-8.0.19/multi.cnf --datadir=/data/data/mysql/multi/8.0.19_3310/data --initialize

在这里插入图片描述

3.11.3-记录临时密码(后面登录使用)

A temporary password is generated for root@localhost: c!&BvFql4<hB
A temporary password is generated for root@localhost: WS#3kj7NxYlz
A temporary password is generated for root@localhost: RiVG/TyhN3HQ

3.11.4-查看初始化成功产生文件

在这里插入图片描述

3.12-添加系统环境变量

# 需要切换 root 执行
echo 'export PATH=$PATH:/data/opt/mysql-8.0.19/bin' >> /etc/profile 
source /etc/profile

在这里插入图片描述

3.13-启动 MySQL

3.13.1-查看 MySQL 状态

/data/opt/mysql-8.0.19/bin/mysqld_multi --defaults-file=/data/opt/mysql-8.0.19/multi.cnf report

在这里插入图片描述

3.13.2-启动 mysqld3308、mysqld3309、mysqld3310

/data/opt/mysql-8.0.19/bin/mysqld_multi --defaults-file=/data/opt/mysql-8.0.19/multi.cnf start 3308
/data/opt/mysql-8.0.19/bin/mysqld_multi --defaults-file=/data/opt/mysql-8.0.19/multi.cnf start 3309
/data/opt/mysql-8.0.19/bin/mysqld_multi --defaults-file=/data/opt/mysql-8.0.19/multi.cnf start 3310

在这里插入图片描述

3.13.3-再次查看 MySQL 状态

# 稍等十几秒查看 保证 MySQL 已完全启动
/data/opt/mysql-8.0.19/bin/mysqld_multi --defaults-file=/data/opt/mysql-8.0.19/multi.cnf report

在这里插入图片描述
在这里插入图片描述

3-连接 MySQL

3.1-登录 MySQL

  • 端口登陆
    # 格式 mysql -u用户名 -p -hIP地址 -P端口`
    mysql -uroot -p -h127.0.0.1 -P3308`
    
  • sock登陆(multi.cnf中配置)
    [mysqld3308]
    socket = /data/data/mysql/multi/8.0.19_3308/mysql3308.sock
    
    [mysqld3309]
    socket = /data/data/mysql/multi/8.0.19_3309/mysql3309.sock
    
    [mysqld3310]
    socket = /data/data/mysql/multi/8.0.19_3310/mysql3310.sock
    

3.1.1-端口登陆 MySQL

  • mysql -uroot -p -h127.0.0.1 -P3308

    A temporary password is generated for root@localhost: c!&BvFql4<hB
    在这里插入图片描述

  • mysql -uroot -p -h127.0.0.1 -P3309

    A temporary password is generated for root@localhost: WS#3kj7NxYlz
    在这里插入图片描述

  • mysql -uroot -p -h127.0.0.1 -P3310

    A temporary password is generated for root@localhost: RiVG/TyhN3HQ
    在这里插入图片描述

3.1.2-sock 登陆 MySQL

  • mysql -S /data/data/mysql/multi/8.0.19_3308/mysql3308.sock -p

    A temporary password is generated for root@localhost: c!&BvFql4<hB
    在这里插入图片描述

  • mysql -S /data/data/mysql/multi/8.0.19_3309/mysql3309.sock -p

    A temporary password is generated for root@localhost: WS#3kj7NxYlz
    在这里插入图片描述

  • mysql -S /data/data/mysql/multi/8.0.19_3310/mysql3310.sock -p

    A temporary password is generated for root@localhost: RiVG/TyhN3HQ
    在这里插入图片描述

3.2-修改 MySQL 密码

# 格式:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';  
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

在这里插入图片描述


4-常见问题

4.1-初始化 MySQL 失败

--initialize specified but the data directory has files in it. Aborting

# 数据库初始化数据存放目录(创建文件夹且文件夹中无文件)
datadir = /data/data/mysql/8.0.19_3306/data

删除/data/data/mysql/8.0.19_3306/data文件夹下所有文件

4.2-启动 MySQL 错误

  • /usr/bin/perl: 坏的解释器: 没有那个文件或目录
    yum install perl gcc kernel-devel
    
  • mysqld33xx数据库启动失败:可查看启动日志或错误日志(multi.cnf中配置)
    [mysqld_multi]
    # 日志
    log=/data/mysql/multi/log/mysql_multi.log
    
    # 3308数据库
    [mysqld3308]
    log-error=/data/mysql/multi/3308_8.0.x/log/error.log
    

4.3-无法远程登录 MySQL

客户端无法连接到MySQL服务器(网络不通)
在这里插入图片描述

4.3.1-是否启动成功

  • 查看MySQL进程:
    ps -ef|grep mysql-8.0.19
    
    在这里插入图片描述
  • 命令登录MySQL
    mysql -uroot -p -h127.0.0.1 -P3308
    
    在这里插入图片描述

4.3.2-是否占用系统 3308 端口

# yum install net-tools -y
netstat -lnp|grep 3308

在这里插入图片描述

4.3.3-是否可以 ping 通服务器

在这里插入图片描述

4.3.4-关闭防火墙

CentOS 7默认使用 firewall作为防火墙

# 防火墙状态
firewall-cmd --state

# 停止 firewall
systemctl stop firewalld.service

# 禁止 firewall 开机启动
systemctl disable firewalld.service 

在这里插入图片描述
备注:

# 查看已开放端口
firewall-cmd --list-ports

# 开启端口:--zone #作用域  --add-port=80/tcp #添加端口(端口/通讯协议) --permanent #永久生效(无此参数重启后失效)
firewall-cmd --zone=public --add-port=80/tcp --permanent

# 关闭 selinux:将 etc/selinux/config 文件中 SELINUX=enforcing 改为 SELINUX=disabled
vi /etc/selinux/config

4.3.5-再次远程登录 MySQL

客户端请求MySQL服务器被拒绝(网络通,被拒绝)
在这里插入图片描述

4.3.6-授权用户远程访问

MySQL 命令行 创建数据库 添加用户 用户授权

# 登录 3308 MySQL
mysql -uroot -p -h127.0.0.1 -P3308

# mysql db 中存储了用户信息(user 表)
use mysql

# 表格中 root 用户的 host 应该显示 localhost(只支持服务器访问,不支持远程)
select host, user, authentication_string, plugin from user;

在这里插入图片描述

# 创建远程登陆用户 密码
CREATE USER 'root'@'%' IDENTIFIED BY 'password';

# 用户登录的加密规则修改为 mysql_native_password*
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

# 授予用户(root)远程访问权限  GRANT ALL(所有权限) %(通配所有 host,可访问远程)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

# MySQL 权限放在 cache(grant表)中,所以必须重新重新加载
flush privileges;

# 表格中 root 用户的 host 已经变成 %(修改成功,可远程访问)
select host, user, authentication_string, plugin from user;

在这里插入图片描述

4.3.7-远程登录 MySQL 成功

在这里插入图片描述

4.4-用户授权报错 1064 (42000)

MySQL 8.0 用户授权报错 1064 (42000)

4.5-Navicat 连接 MySQL 报 2059 错误

MySQL 8.0版本与MySQL5.0版本加密规则不一致,而现有的可视化工具只支持旧的加密方式。两种解决方法:

  • 升级Navicat驱动。
  • MySQL用户登录的加密规则修改为mysql_native_password**

第二种解决方法:

# 修改加密规则(password 当前密码)
ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;

# 修改 root 用户密码(password 设置新密码)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password';

# 刷新权限
flush privileges;

  • 20
    点赞
  • 1
    评论
  • 41
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
《PHP5+MySQL 网站开发实例精讲》全面、详细地介绍了基于PHP和MySQL的动态网络开发技术的原理和基础编程知识。全书共分为四篇18章,以&ldquo;PHP基础知识→MySQL数据库基础知识→PHP高级开发→常用模块编程与综合案例开发”为线索具体展开,不仅包括PHP开发环境的搭建、PHP的基本语法、PHP中的常用函数、在MySQL中创建数据库和数据表,以及对MySQL数据库进行查询、删除、更新和排序等基础开发知识,还包括在PHP中创建图像、使用会话等较深入的开发内容,并在&ldquo;常用模块编程和综合案例开发”篇中给出了常用模块(如通信录模块、计数器模块、文件上传模块、图片浏览模块和聊天室模块等)的开发方法,以及文件管理系统、投票系统、影碟管理系统、新闻发布系统和网上购物商城5个综合案例的开发全过程。  全书内容由浅入深,充分考虑了PHP学习者的特点,并在配套光盘中提供了书中实例的全部源代码,以方便读者举一反三,编写出适合自己的程序。 《PHP5+MySQL 网站开发实例精讲》不仅合适PHP技术的初学者,还能够帮助有一定编程经验的PHP开发人员解决开发过程中遇到的实际问题。《PHP5+MySQL 网站开发实例精讲》可作为广大PHP学习者的自学用书,或高等院校相关专业的教材和辅导用书。 显示更 显示更少 --------------------------------------------------------------------------------
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值