在服务器资源有限的情况下,可利用该方案快速搭建各类 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、通过官方二进制包解压安装

  1. wget https://cdn.mysql.com/archives/mysql-8.0/mysql-8.0.30-el7-x86_64.tar.gz
  2. tar xzf mysql-8.0.30-el7-x86_64.tar.gz
  3. mv mysql-8.0.30-el7-x86_64 /usr/local/mysql
  4. # vim /etc/profile 添加环境变量,执行 source /etc/profile 使配置在当前 shell 下生效
  5. export PATH=$PATH:/usr/local/mysql/bin/
  6. # 创建各 mysql 服务器实例的数据目录 datadir
  7. useradd -r -M mysql -s /bin/false
  8. mkdir -p /var/lib/mysql{1..3} && chown mysql.mysql /var/lib/mysql{1..3}

修改 MySQL 实例配置

设置各 mysql 实例的配置文件

  1. cat > /etc/my.cnf << EOF
  2. [mysqld_multi]
  3. mysqld = /usr/local/mysql/bin/mysqld_safe
  4. mysqladmin = /usr/local/mysql/bin/mysqladmin
  5. user = root
  6. pass = root # 后续变更各 mysql 实例 root 账号的初始随机密码为简单密码 root,因为停止各 mysql 实例时需使用此密码
  7. log = /var/log/mysql_multi.log
  8. # mysql 实例一
  9. [mysqld1]
  10. server-id = 1
  11. socket = /var/lib/mysql1/mysql.sock
  12. port = 3306
  13. bind_address = 0.0.0.0
  14. datadir = /var/lib/mysql1
  15. user = mysql
  16. performance_schema = off
  17. innodb_buffer_pool_size = 32M
  18. skip_name_resolve = 1
  19. log_error = error.log
  20. pid-file = /var/lib/mysql1/mysql.pid
  21. mysqlx = 1 # 设置 0 则禁用 mysqlx, 其默认监听端口 33060
  22. mysqlx-port = 33060
  23. # mysql 实例二
  24. [mysqld2]
  25. server-id = 2
  26. socket = /var/lib/mysql2/mysql.sock
  27. port = 3307
  28. bind_address = 0.0.0.0
  29. datadir = /var/lib/mysql2
  30. user = mysql
  31. performance_schema = off
  32. innodb_buffer_pool_size = 32M
  33. skip_name_resolve = 1
  34. log_error = error.log
  35. pid-file = /var/lib/mysql2/mysql.pid
  36. mysqlx = 1
  37. mysqlx-port = 33070
  38. # mysql 实例三
  39. [mysqld3]
  40. server-id = 3
  41. socket = /var/lib/mysql3/mysql.sock
  42. port = 3308
  43. bind_address = 0.0.0.0
  44. datadir = /var/lib/mysql3
  45. user = mysql
  46. performance_schema = off
  47. innodb_buffer_pool_size = 32M
  48. skip_name_resolve = 1
  49. log_error = error.log
  50. pid-file = /var/lib/mysql3/mysql.pid
  51. mysqlx = 1
  52. mysqlx-port = 33080
  53. EOF

初始化 MySQL 实例

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

  1. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql1
  2. #> 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
  3. #> 2023-03-15T01:22:52.119703Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
  4. #> 2023-03-15T01:22:55.237170Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
  5. #> 2023-03-15T01:23:00.616679Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: lqYujqcue7*_
  6. # 同理,初始化其它 mysql 实例(mysql2、mysql3)
  7. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql2
  8. /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/var/lib/mysql3

启动 mysql 实例

设置多实例启动程序

  1. cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multid
  2. chmod +x /etc/init.d/mysqld_multid
  3. # 启动 各 mysql 实例
  4. /etc/init.d/mysqld_multid start
  5. chkconfig mysqld_multid on # 可选,设置开机启动
  6. /etc/init.d/mysqld_multid report # 查看运行情况
  7. #> Reporting MySQL servers
  8. #> MySQL server from group: mysqld1 is running
  9. #> MySQL server from group: mysqld2 is running
  10. #> MySQL server from group: mysqld3 is running
  11. netstat -ntlp | grep mysqld
  12. #> Active Internet connections (only servers)
  13. #> Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  14. #> tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 19867/mysqld
  15. #> tcp 0 0 0.0.0.0:3307 0.0.0.0:* LISTEN 19869/mysqld
  16. #> tcp 0 0 0.0.0.0:3308 0.0.0.0:* LISTEN 19876/mysqld
  17. #> tcp6 0 0 :::33080 :::* LISTEN 19876/mysqld
  18. #> tcp6 0 0 :::33060 :::* LISTEN 19867/mysqld
  19. #> tcp6 0 0 :::33070 :::* LISTEN 19869/mysqld
  20. # 停止 各 mysql 实例,需先更新 root 账号密码为 root,因为其实现原理是通过 mysqladmin 登录到各 mysql 实例执行 shutdown
  21. /etc/init.d/mysqld_multid stop

更新 root 账号密码

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

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

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

  1. -- 做任何操作前,需按照默认安全策略配置一个密码,才允许后续操作
  2. alter user user() identified by 'Admin@123';
  3. -- 设置密码策略,否则报错提示不满足现有密码策略,如 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
  4. show global variables like "validate_password%";
  5. set global validate_password.policy=0; -- validate_password_policy 设置 0 低级 1 中级 2 高级
  6. set global validate_password.length=4;
  7. set global validate_password.check_user_name = 0
  8. set global validate_password.mixed_case_count = 0;
  9. set global validate_password.number_count=0;
  10. set global validate_password.special_char_count=0;
  11. -- 修改 root 账号为简单密码 root
  12. alter user user() identified by 'root';
  13. update mysql.user set host='%' where user='root';
  14. flush privileges;
  15. exit;

参考

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

如何单机部署多个 MySQL 8.0 实例 ?的更多相关文章

  1. Clickhouse单机部署以及从mysql增量同步数据

    背景: 随着数据量的上升,OLAP一直是被讨论的话题,虽然druid,kylin能够解决OLAP问题,但是druid,kylin也是需要和hadoop全家桶一起用的,异常的笨重,再说我也搞不定,那只能 ...

  2. CentOS 7.x下安装部署MySQL 8.0实施手册

    MySQL 8 正式版 8.0.11 已发布,官方表示 MySQL 8 要比 MySQL 5.7 快 2 倍,还带来了大量的改进和更快的性能! 一.  Mysql8.0版本相比之前版本的一些特性 1) ...

  3. 使用yum源的方式单机部署MySQL8.0.13

    使用yum源的方式单机部署MySQL8.0.13 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 基本上开源的软件都支持三种安装方式,即rmp方式安装,源码安装和二进制方式安装.在 ...

  4. 使用二进制安装包的方式单机部署MySQL8.0.13

    使用二进制安装包的方式单机部署MySQL8.0.13 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 关于MySQL的介绍我这里就不多做赘述了,如何下载MySQL详情请参考:MySQ ...

  5. 通过 Docker 部署 Mysql 8.0 主从模式

    文章转载自:http://www.mydlq.club/article/106/ 系统环境: Mysql 版本:8.0.23 Docker 版本:19.03.13 一.为什么需要 Mysql 主从复制 ...

  6. Win10 下 hadoop3.0.0 单机部署

    前言 因近期要做 hadoop 有关的项目,需配置 hadoop 环境,简单起见就准备进行单机部署,方便开发调试.顺便记录下采坑步骤,方便碰到同样问题的朋友们. 安装步骤 一.下载 hadoop-XX ...

  7. kubernetes集群部署mysql 8.0

    参考:https://blog.csdn.net/sealir/article/details/81177747?utm_source=blogxgwz1 集群内安装mysql并添加相应存储(PVC) ...

  8. 基于yum的方式安装Cloudera Manager Server(使用Mysql 8.0版本)

    基于yum的方式安装Cloudera Manager Server(使用Mysql 8.0版本) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装和配置元数据库 1>. ...

  9. 服务器之Apollo单机部署(快速安装)

    部署Apollo apollo单机部署(快速安装) Apollo官网:https://www.apolloconfig.com/#/zh/deployment/quick-start-docker 官 ...

  10. linux部署不同版本mysql

    测试环境部署过程中经常会遇到同一个服务器上部署两个不同版本的mysql数据库,在部署过程中也会有各种各样的问题,现将部署多版本mysql的方法总结如下: 1.下载mysql版本 http://down ...

随机推荐

  1. 29 Django自定义模板功能

    在相应的app文件夹中,创建templatetags文件夹,必须是templatetags文件夹命名: 注意:templatetags文件夹中必须要有__init__.py文件 jd.py: from ...

  2. 【LeetCode】——分割回文串II

    继续与动态规划斗智斗勇... 132. 分割回文串 II - 力扣(LeetCode) (leetcode-cn.com) 分析:记f[i]表示将字符串s[0:i]分割的最小次数.我们需要将列举出在[ ...

  3. 【Android报错】FileNotFoundException open failed:文件路径 EPERM (Operation not permitted)外部存储至根目录报错,Android外部存储权限动态获取问题

    报错:FileNotFoundException open failed: XXXXXXX EPERM (Operation not permitted) 查了下,大概原因是因为权限的问题.(小白学A ...

  4. Jndi结合DynamicDataSource实现多数据源配置

    首先注意本框架是SSM,配置主要在两个地方.第一个是applicationContext.xml,第二个文件是Tomcat下面的context.xml里面 1.context.xml文件配置的代码如下 ...

  5. python学习笔记5--正则表达式

    正则表达式: 语法: import re #导入模块名 p = re.compile("^[0-9]") #生成要匹配的正则对象 , ^代表从开头匹配,[0-9]代表匹配0至9的任 ...

  6. Shell写脚本关于ssh执行jar包,需要刷新JDK路径的问题

    比如脚本中下面这一段 ssh $i "java -jar /applog/$PROJECT/$APPNAME --server.port=$SERVER_PORT >/dev/null ...

  7. 使用TLS/SSL传输层安全机制实现web项目的通信安全

    自己的web项目在内网ip访问时,浏览器会提示不安全 原因就是因为没有证书,而传输层的TLS/SSL协议,会告诉我们本地客户端的浏览器,我现在访问的web项目的ip地址可能存在安全风险 要解决这个通信 ...

  8. 单调栈应用--视野总和 go版本

    1.视野总和描叙:有n个人站队,所有的人全部向右看,个子高的可以看到个子低的发型,给出每个人的身高,问所有人能看到其他人发现总和是多少.输入:4 3 7 1输出:2解释:个子为4的可以看到个子为3的发 ...

  9. Java数据类型基础

    Java 数据类型基础 数据类型 强类型语言 要求变量的使用要严格符合规定,所有变量必须先定义后使用 Java数据分为两大类 基本类型(primitive type) 数值类型 整数类型 byte(1 ...

  10. C语言基础题 22年5月

    (十六进制 %x  20.0f是%f  long 是%ld  unsigned int %#o  ) 编程题: 整数浮点数的上溢下溢 strcpy函数代码 int search(char *s, ch ...