如何单机部署多个 MySQL 8.0 实例 ?

在服务器资源有限的情况下,可利用该方案快速搭建各类 mysql 架构方案。各 MySQL 实例共享一个 mysqld 主程序,但各实例数据目录是独立的,存放在不同的文件夹中;好了、废话不多说,直接上干货,具体搭建步骤如下

原文链接

环境介绍

实例 主机 mysql port mysqlx port datadir
mysql1 192.168.31.100 3306 33060 /var/lib/mysql1/
mysql2 192.168.31.100 3307 33070 /var/lib/mysql2/
mysql3 192.168.31.100 3308 33080 /var/lib/mysql3/

部署 MySQL 主程序

1、通过官方二进制包解压安装

wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-el7-x86_64.tar.gz
tar xzf mysql-8.0.30-el7-x86_64.tar.gz
mv mysql-8.0.30-el7-x86_64 /usr/local/mysql

# vim /etc/profile 添加环境变量,执行 source /etc/profile 使配置在当前 shell 下生效
export PATH=$PATH:/usr/local/mysql/bin/

# 创建各 mysql 服务器实例的数据目录 datadir
useradd -r -M mysql -s /bin/false
mkdir -p /var/lib/mysql{1..3} && chown mysql.mysql /var/lib/mysql{1..3}

修改 MySQL 实例配置

设置各 mysql 实例的配置文件

cat > /etc/my.cnf << EOF
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = root
pass = root             # 后续变更各 mysql 实例 root 账号的初始随机密码为简单密码 root,因为停止各 mysql 实例时需使用此密码
log = /var/log/mysql_multi.log

# mysql 实例一
[mysqld1]
server-id = 1
socket = /var/lib/mysql1/mysql.sock
port = 3306
bind_address = 0.0.0.0
datadir = /var/lib/mysql1
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
skip_name_resolve = 1
log_error = error.log
pid-file = /var/lib/mysql1/mysql.pid
mysqlx = 1        # 设置 0 则禁用 mysqlx, 其默认监听端口 33060
mysqlx-port = 33060

# mysql 实例二
[mysqld2]
server-id = 2
socket = /var/lib/mysql2/mysql.sock
port = 3307
bind_address = 0.0.0.0
datadir = /var/lib/mysql2
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
skip_name_resolve = 1
log_error = error.log
pid-file = /var/lib/mysql2/mysql.pid
mysqlx = 1
mysqlx-port = 33070

# mysql 实例三
[mysqld3]
server-id = 3
socket = /var/lib/mysql3/mysql.sock
port = 3308
bind_address = 0.0.0.0
datadir = /var/lib/mysql3
user = mysql
performance_schema = off
innodb_buffer_pool_size = 32M
skip_name_resolve = 1
log_error = error.log
pid-file = /var/lib/mysql3/mysql.pid
mysqlx = 1
mysqlx-port = 33080
EOF

初始化 MySQL 实例

1、初始化 MySQL 实例,记录各实例的初始随机密码

/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql1
#> 2023-03-15T01:22:52.092218Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 15026
#> 2023-03-15T01:22:52.119703Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
#> 2023-03-15T01:22:55.237170Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
#> 2023-03-15T01:23:00.616679Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lqYujqcue7*_

# 同理,初始化其它 mysql 实例(mysql2、mysql3)
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql2
/usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql3

启动 mysql 实例

设置多实例启动程序

cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multid
chmod +x /etc/init.d/mysqld_multid

# 启动 各 mysql 实例
/etc/init.d/mysqld_multid start
chkconfig mysqld_multid on              # 可选,设置开机启动

/etc/init.d/mysqld_multid report        # 查看运行情况
#> Reporting MySQL servers
#> MySQL server from group: mysqld1 is running
#> MySQL server from group: mysqld2 is running
#> MySQL server from group: mysqld3 is running

netstat -ntlp | grep mysqld
#> Active Internet connections (only servers)
#> Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
#> tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      19867/mysqld
#> tcp        0      0 0.0.0.0:3307            0.0.0.0:*               LISTEN      19869/mysqld
#> tcp        0      0 0.0.0.0:3308            0.0.0.0:*               LISTEN      19876/mysqld
#> tcp6       0      0 :::33080                :::*                    LISTEN      19876/mysqld
#> tcp6       0      0 :::33060                :::*                    LISTEN      19867/mysqld
#> tcp6       0      0 :::33070                :::*                    LISTEN      19869/mysqld

# 停止 各 mysql 实例,需先更新 root 账号密码为 root,因为其实现原理是通过 mysqladmin 登录到各 mysql 实例执行 shutdown
/etc/init.d/mysqld_multid stop

更新 root 账号密码

1、使用初始随机密码登录各 MySQL 实例

mysql -u root -p -P3306 -S /var/lib/mysql1/mysql.sock
mysql -u root -p -P3307 -S /var/lib/mysql2/mysql.sock
mysql -u root -p -P3308 -S /var/lib/mysql3/mysql.sock

2、设置 MySQL root 账号为简单密码 root,且允许从任意主机访问数据库

-- 做任何操作前,需按照默认安全策略配置一个密码,才允许后续操作
alter user user() identified by 'Admin@123';
-- 设置密码策略,否则报错提示不满足现有密码策略,如 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
show global variables like "validate_password%";
set global validate_password.policy=0;              -- validate_password_policy 设置 0 低级 1 中级 2 高级
set global validate_password.length=4;
set global validate_password.check_user_name = 0
set global validate_password.mixed_case_count = 0;
set global validate_password.number_count=0;
set global validate_password.special_char_count=0;

-- 修改 root 账号为简单密码 root
alter user user() identified by 'root';
update mysql.user set host='%' where user='root';
flush privileges;
exit;

参考

MySQL-5.7.x 二进制包,官方下载地址

原文链接:https://www.cnblogs.com/ywjsbang/p/17262761.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何单机部署多个 MySQL 8.0 实例 ? - Python技术站

(0)
上一篇 2023年4月18日
下一篇 2023年4月18日

相关文章

  • mysql 创建root用户和普通用户及修改删除功能

    下面是 mysql 创建和管理用户的攻略: 创建 root 用户 以 root 身份登录 mysql: bash mysql -u root -p 创建新用户并授权: sql CREATE USER ‘newuser’@’localhost’ IDENTIFIED BY ‘password’; GRANT ALL PRIVILEGES ON *.* TO ‘…

    MySQL 2023年5月18日
    00
  • MySQL日志设置及查看方法

    MySQL是一个开源的关系型数据库管理系统,它可以在不同的操作系统中运行。MySQL提供了多种日志记录工具,使得数据库管理员可以更好地了解MySQL数据库的运行情况。 本文介绍了MySQL日志设置及查看方法,包括以下内容: 设置MySQL日志 General Query Log General Query Log 是 MySQL 记录所有 SQL 语句执行时…

    MySQL 2023年5月18日
    00
  • MYSQL大表改字段慢问题如何解决

    本文小编为大家详细介绍“MYSQL大表改字段慢问题如何解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“MYSQL大表改字段慢问题如何解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 MYSQL的ALTER TABLE操作的性能对大表来说是个大问题。MYSQL执行大部分修改表结构操作的方法是用新的表结构创建一个空表,从旧表中查…

    MySQL 2023年4月10日
    00
  • mysql 查询重复的数据的SQL优化方案

    当我们需要查询数据库中重复的数据时,在传统的方法中,我们可以使用GROUP BY函数或者DISTINCT函数进行实现,但是这种方式的缺点在于运行效率低下,特别是对于大数据量的查询。因此,我们需要一些更加高效的SQL优化方案。 下面是mysql查询重复数据的SQL优化方案的完整攻略: 1. 通过使用HAVING子句和COUNT函数来查询 第一种方法是使用HAV…

    MySQL 2023年5月19日
    00
  • 第五部分(二) 数据存储(关系型数据库:MySQL存储方式)

    一 关系型数据库存储关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合,而实体之间存在联系,这就需要表与表之间的关联关系来体现,如主键外键的关联关系。多个表组成一个数据库,也就是关系型数据库。关系型数据库有多种,如SQLite、MySQL、Orac…

    MySQL 2023年4月13日
    00
  • 通过node-mysql搭建Windows+Node.js+MySQL环境的教程

    以下是通过node-mysql搭建Windows+Node.js+MySQL环境的完整攻略: 准备工作 安装MySQL:首先从官网下载MySQL的安装文件,并根据提示进行安装。 安装Node.js:从Node.js官网下载对应平台的安装文件并安装。 创建示例项目 创建一个新的文件夹,并在此文件夹下创建一个package.json文件,用于记录项目中需要安装的…

    MySQL 2023年5月18日
    00
  • MySQL架构设计思想详解

    MySQL架构设计思想详解 MySQL是一种流行的关系型数据库系统,广泛应用于网站开发、商业应用、科研领域等各个领域。本文将详细讲解MySQL架构设计的思想,包括数据存储、数据访问、事务处理等方面。 数据存储 MySQL的数据存储是基于表的,一个表包含多行数据,每行数据是由多个列组成。在设计MySQL数据库时,需要考虑以下几个方面: 1. 数据类型选择 My…

    MySQL 2023年5月19日
    00
  • redhat如何安装php和mysql

    本文小编为大家详细介绍“redhat如何安装php和mysql”,内容详细,步骤清晰,细节处理妥当,希望这篇“redhat如何安装php和mysql”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 redhat安装php和mysql的方法:1、通过“yum install httpd”安装Apache2并启动;2、使用“yum in…

    MySQL 2023年4月12日
    00
合作推广
合作推广
分享本页
返回顶部