如何单机部署多个 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 8.0 实例 ?的更多相关文章
- Clickhouse单机部署以及从mysql增量同步数据
背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...
- CentOS 7.x下安装部署MySQL 8.0实施手册
MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一. Mysql8.0版本相比之前版本的一些特性 1) ...
- 使用yum源的方式单机部署MySQL8.0.13
使用yum源的方式单机部署MySQL8.0.13 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 基本上开源的软件都支持三种安装方式,即rmp方式安装,源码安装和二进制方式安装.在 ...
- 使用二进制安装包的方式单机部署MySQL8.0.13
使用二进制安装包的方式单机部署MySQL8.0.13 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于MySQL的介绍我这里就不多做赘述了,如何下载MySQL详情请参考:MySQ ...
- 通过 Docker 部署 Mysql 8.0 主从模式
文章转载自:http://www.mydlq.club/article/106/ 系统环境: Mysql 版本:8.0.23 Docker 版本:19.03.13 一.为什么需要 Mysql 主从复制 ...
- Win10 下 hadoop3.0.0 单机部署
前言 因近期要做 hadoop 有关的项目,需配置 hadoop 环境,简单起见就准备进行单机部署,方便开发调试.顺便记录下采坑步骤,方便碰到同样问题的朋友们. 安装步骤 一.下载 hadoop-XX ...
- kubernetes集群部署mysql 8.0
参考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1 集群内安装mysql并添加相应存储(PVC) ...
- 基于yum的方式安装Cloudera Manager Server(使用Mysql 8.0版本)
基于yum的方式安装Cloudera Manager Server(使用Mysql 8.0版本) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装和配置元数据库 1>. ...
- 服务器之Apollo单机部署(快速安装)
部署Apollo apollo单机部署(快速安装) Apollo官网:https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 官 ...
- linux部署不同版本mysql
测试环境部署过程中经常会遇到同一个服务器上部署两个不同版本的mysql数据库,在部署过程中也会有各种各样的问题,现将部署多版本mysql的方法总结如下: 1.下载mysql版本 http://down ...
随机推荐
- arm开发环境搭建
1.smaba 在Linux PC安装smaba sudo apt-get install samba编辑/etc/samba/smb.conf配置:[yz]path = /home/yzv ...
- python 判断一个字符串中是否存在另一个字串中的元素
如 判断str是否包含str_list中的元素 str = "this is string example....wow!!!" str_list = ['aa','bb','st ...
- SpringBatch生成的DB表SQL
SQL: -- Autogenerated: do not edit this file DROP TABLE IF EXISTS BATCH_STEP_EXECUTION_CONTEXT; DROP ...
- a标签做锚点定位,有部分内容被置顶头部遮挡的解决方法
被遮挡的元素添加如下样式: /**这里假定头部高度是100px*/ position: relative;top: 100px;/**关键样式如下,我这里上面有加定位,如果没用定位,下面的数值需根据实 ...
- element select多选选项卡页面抖动问题
最近做项目是有个功能需要下拉框多选,然后碰到了一个问题就是选择选项的时候出现频繁抖动的情况 问题描述: 页面选择到三个选项时长度为三的时候就会开始抖动,其他长度没有问题,检索elements是发现选择 ...
- SpringBoot加载相关注解
springBoot加载 @Configuration 表明该类是一个配置类常常配合@Bean使用,让容器管理对象 @Configuration(proxyBeanMethods = true) pr ...
- homework1(1)
来自桂林理工大学物联网工程2019届的April 没参与过什么比赛项目但是课程学习能力还行,主要是快速学习之后很快就会忘记,接下来应该好好的总结并熟练记住运用知识完成对生活等各种的实践. 对课程的希望 ...
- 探秘ThreadLocal
一 类结构 主要是set(T), get(), remove()方法 二 TheadLocal是什么时候创建的 threadLocal的初始化, lazy creating, 用到的时候(get 或 ...
- C# 动态操作 控件位置绑定 [ Anchor ] 属性
注: 1.此类属于非常用类,只因本人需要编写的...顺便刷贴一下 2.对于初学,其中的枚举使用可以为你加深一点印象 以下为操作类代码: public class AchCtrer { #region ...
- bigNumber.js的简单使用
sum 计算传入的参数和,参数类型可以是 String,Number // 两数之和 var x = BigNumber.sum('11', 23) x.toNumber() // 34 // 多个参 ...