18.MYSQL数据库(1)

MySQL 数据库

本章内容

  • 关系型数据库基础
  • 安装MySQL
  • 管理数据库和表
  • 用户和权限管理
  • 函数,存储过程,触发器和事件
  • MySQL架构
  • 存储引擎
  • 服务器选项,系统和状态变量
  • 优化查询和索引管理
  • 锁和事务管理
  • 日志管理
  • 备份还原(重点掌握)
  • MySQL集群
  • 压力测试

1 数据库原理

1.1 数据的时代

  • 涉及的数据量大
  • 数据不随程序的结束而消失
  • 数据被多个应用程序共享
  • 大数据

数据的分类:

  • 结构化的数据:即有固定格式和有限长度的数据。例如填的表格就是结构化的数据,国籍:中华人
    民共和国,民族:汉,性别:男,这都叫结构化数据
  • 非结构化的数据:非结构化的数据越来越多,就是不定长、无固定格式的数据,例如: 网页,图片文
    件,有时候非常大,有时候很小;例如语音,视频都是非结构化的数据
  • 半结构化数据:比如:XML或者HTML的格式的数据

1.2 数据库的发展史

1.2.1 文件管理系统的缺点

  • 编写应用程序不方便
  • 不支持对文件的并发访问
  • 无安全控制功能
  • 难以按用户视图表示数据
  • 数据间联系弱
  • 数据冗余不可避免
  • 应用程序依赖性

1.2.2 数据库系统发展阶段

  • 萌芽阶段:文件系统
    使用磁盘文件来存储数据
  • 初级阶段:第一代数据库
    出现了网状模型、层次模型的数据库
  • 中级阶段:第二代数据库
    关系型数据库和结构化查询语言
  • 高级阶段:新一代数据库
    “关系-对象”型数据库

1.3 DBMS 数据库管理系统

  • Database:数据库是数据的汇集,它以一定的组织形式存于存储介质上
  • DBMS:Database Management System, 是管理数据库的系统软件,它实现数据库系统的各种功能。是数据库系统的核心
  • DBA:Database Administrator:数据库管理员,负责数据库的规划、设计、协调、维护和管理等工作
  • Applicatoin:应用程序,指以数据库为基础的应用程序

1.4 数据库管理系统的优点

  • 程序与数据相互独立
  • 保证数据的安全、可靠
  • 最大限度地保证数据的正确性
  • 数据可以并发使用并能同时保证一致性
  • 相互关联的数据的集合
  • 较少的数据冗余

1.5 数据库管理系统的基本功能

  • 数据定义
  • 数据处理
  • 数据安全
  • 数据备份

1.6 数据库系统的架构

  • 单机架构
  • 大型主机/终端架构
  • 主从式架构(C/S)
  • 分布式架构

1.7 各种数据库管理系统

1.7.1 层次数据库

在这里插入图片描述
分层结构由IBM在20世纪60年代开发,并在早期大型机DBMS中使用。记录的关系形成了一个树状模
型。这种结构简单,但缺乏灵活性,因为这种关系仅限于一对多关系。
代表数据库:IBM IMS(信息管理系统)

1.7.2 网状数据库

在这里插入图片描述
1964年通用电气GE公司的 Charles Bachman 成功地开发出世界上第一个网状数据库IDS(集成数据存
储),IDS 具有数据模式和日志的特征,只能在GE主机运行

1.7.3 RDBMS 关系型数据库

Relational Database Management System,关系模型最初由IBM公司的英国计算机科学家埃德加·科德
(Edgar F. Codd)于1969年描述,1974年,IBM开始开发系统R,这是一个开发RDBMS原型的研究项目。
然而,第一个商业上可用的RDBMS是甲骨文,于1979年由关系软件(现为甲骨文公司)发布

1.7.3.1 关系统型数据库相关概念
  • 关系Relational :关系就是二维表,其中:表中的行、列次序并不重要
  • 行row:表中的每一行,又称为一条记录record
  • 列column:表中的每一列,称为属性,字段,域field
  • 主键Primary key:PK ,一个或多个字段的组合, 用于惟一确定一个记录的字段,一张表只有一个主
    键, 主键字段不能为空NULL
  • 唯一键Unique key: 一个或多个字段的组合,用于惟一确定一个记录的字段,一张表可以有多个UK,而
    且UK字段可以为NULL
  • 域domain:属性的取值范围,如,性别只能是’男’和’女’两个值,人类的年龄只能0-150
1.7.3.2 常用关系数据库
  • MySQL: MySQL, MariaDB, Percona Server
  • PostgreSQL: 简称为pgsql,EnterpriseDB
  • Oracle
  • MSSQL Server
  • DB2
1.7.3.3 数据库排名

https://db-engines.com/en/ranking

在这里插入图片描述

1.8 关系型数据库理论

1.8.1 实体-联系模型E-R

  • 实体Entity:客观存在并可以相互区分的客观事物或抽象事件称为实体,在E-R图中用矩形框表示实
    体,把实体名写在框内
  • 属性:实体所具有的特征或性质
  • 联系:联系是数据之间的关联集合,是客观存在的应用语义链
    • 实体内部的联系:指组成实体的各属性之间的联系。如职工实体中,职工号和部门经理号之间有一种关联关系
    • 实体之间的联系:指不同实体之间联系。例:学生选课实体和学生基本信息实体之间
    • 实体之间的联系用菱形框表示

1.8.2 联系类型

  • 一对一联系(1:1)
  • 一对多联系(1:n):外键
  • 多对多联系(m:n):增加第三张表

1.8.3 数据的操作

开发工程师 CURD (Create,Update,Read,Delete)

  • 数据提取:在数据集合中提取感兴趣的内容。SELECT
  • 数据更新:变更数据库中的数据。INSERT、DELETE、UPDATE

1.8.4 数据库规划流程

  1. 收集数据,得到字段
    收集必要且完整的数据项
    转换成数据表的字段
  2. 把字段分类,归入表,建立表的关联
    关联:表和表间的关系
    分割数据表并建立关联的优点
    节省空间
    减少输入错误
    方便数据修改
  3. 规范化数据库

1.8.5 数据库的正规化分析

数据库规范化,又称数据库或资料库的正规化、标准化,是数据库设计中的一系列原理和技术,以减少数据库中数据冗余,增进数据的一致性。关系模型的发明者埃德加·科德最早提出这一概念,并于1970年代初定义了第一范式、第二范式和第三范式的概念

设计关系数据库时,遵从不同的规范要求,设计出合理的关系型数据库,不同的规范要求被称为不同范式,各种范式呈递次规范,越高的范式数据库冗余越小

目前关系数据库有六种范式:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、巴德斯科范式(BCNF)、第四范式(4NF)和第五范式(5NF,又称完美范式)。满足最低要求的范式是第一范式(1NF)。在第一范式的基础上进一步满足更多规范要求的称为第二范式(2NF),其余范式以次类推。一般数据库只需满足第三范式(3NF)即可

规则是死的,人是活的,所以范式是否必须遵守,要看业务需要而定

掌握范式的目的是为了在合适的场景下违反范式

1.8.5.1 第一范式:1NF

无重复的列,每一列都是不可分割的基本数据项,同一列中不能有多个值,即实体中的某个属性不能有多个值或者不能有重复的属性,确保每一列的原子性。除去同类型的字段,就是无重复的列。

说明:第一范式(1NF)是对关系模式的基本要求,不满足第一范式(1NF)的数据库就不是关系数据库。

1.8.5.2 第二范式:2NF

第二范式必须先满足第一范式,属性完全依赖于主键,要求表中的每个行必须可以被唯一地区分,通常为表加上每行的唯一标识PK,非PK的字段需要与整个PK有直接相关性,即非PK的字段不能依赖于部分主键。
在这里插入图片描述

1.8.5.3 第三范式:3NF

满足第三范式必须先满足第二范式属性,非主键属性不依赖于其它非主键属性。第三范式要求一个数据表中不包含已在其它表中已包含的非主关键字信息,非PK的字段间不能有从属关系。

在这里插入图片描述

1.8.6 SQL 结构化查询语言简介

SQL:Structure Query Language,结构化查询语言是1974年由Boyce和Chamberlin提出的一个通用的、功能极强的关系性数据库语言

SQL解释器:将SQL语句解释成机器语言

数据存储协议:应用层协议,C/S

  • S:server, 监听于套接字,接收并处理客户端的应用请求
  • C:Client

客户端程序接口

  • CLI
  • GUI

应用编程接口

  • ODBC:Open Database Connectivity
  • JDBC:Java Data Base Connectivity

1.8.7 SQL 基本概念

  • 约束:constraint,表中的数据要遵守的限制
  • 主键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;必须提供数据,即
    NOT NULL,一个表只能有一个
  • 惟一键:一个或多个字段的组合,填入的数据必须能在本表中唯一标识本行;允许为NULL,一个
    表可以存在多个
  • 外键:一个表中的某字段可填入的数据取决于另一个表的主键或唯一键已有的数据
  • 检查:字段值在一定范围内
  • 索引:将表中的一个或多个字段中的数据复制一份另存,并且按特定次序排序存储

1.8.8 关系运算

  • 选择:挑选出符合条件的行
  • 投影:挑选出需要的字段
  • 连接:表间字段的关联

1.8.9 数据抽象

  • 物理层:数据存储格式,即RDBMS在磁盘上如何组织文件
  • 逻辑层:DBA角度,描述存储什么数据,以及数据间存在什么样的关系
  • 视图层:用户角度,描述DB中的部分数据

1.8.10 关系模型的分类

  • 关系模型
  • 基于对象的关系模型
  • 半结构化的关系模型:XML数据

2 MySQL安装和基本使用

2.1 MySQL 介绍

在这里插入图片描述

2.1.1 MySQL 历史

1979年:TcX公司 Monty Widenius,Unireg
1996年:发布MySQL1.0,Solaris版本,Linux版本
1999年:MySQL AB公司,瑞典
2003年:MySQL 5.0版本,提供视图、存储过程等功能
2008年:Sun公司 以10亿美元收购MySQL
2009年:Oracle公司以 75 亿美元收购 sun 公司
2009年:Monty成立MariaDB

2.2.2 MySQL系列

2.2.2.1 MySQL 的三大主要分支
  • mysql
  • mariadb
  • percona Server
2.2.2.2 官方网址

https://www.mysql.com/

http://mariadb.org/

https://www.percona.com/

2.2.2.3 官方文档

https://dev.mysql.com/doc/

https://mariadb.com/kb/en/

https://www.percona.com/software/mysql-database/percona-server

2.2.2.4 版本演变

MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.1 -->5.5 -->10.0–> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5
MySQL主流5.6,5.7版本,8.0也有企业在使用。

MySQL被Sun收购后,搞了个过渡的6.0版本,没多久就下线了,后来被Oracle收购后,终于迎来了像样的
5.6版本,之后就是5.7、8.0版本。由于6.0版本号已被用过,7.x系列版本专用于NDB Cluster,因而新
版本号从8.0开始。

2.2.3 MySQL的特性

  • 开源免费
  • 插件式存储引擎:也称为“表类型”,存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择,Mysql5.5.5开始innoDB引擎是MYSQL默认引擎
MyISAM ==> Aria
InnoDB ==> XtraDB
  • 单进程,多线程
  • 诸多扩展和新特性
  • 提供了较多测试组件

2.2 MySQL 安装方式介绍和快速安装

MySQL server端端口号为3306

2.2.1 安装方式介绍

  • 程序包管理器管理的程序包
  • 源代码编译安装
  • 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用

2.2.2 RPM包安装MySQL

CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/

CentOS 8:安装光盘直接提供

  • mysql-server:8.0
  • mariadb-server : 10.3.17
[root@centos8 ~]#yum install mysql-server			#安装
[root@centos8 ~]#systemctl enable --now mysqld		#第一次启动时,会自动把系统数据初始化放在所在目录里
Created symlink /etc/systemd/system/multi-user.target.wants/mysqld.service → /usr/lib/systemd/system/mysqld.service.
[root@centos8 ~]#ls /var/lib/mysql					#数据库存放(系统数据和用户数据)所在路径
 auto.cnf          ib_buffer_pool   mysql.ibd            private_key.pem
 binlog.000001     ibdata1          mysql.sock           public_key.pem
 binlog.index      ib_logfile0      mysql.sock.lock      server-cert.pem
 ca-key.pem        ib_logfile1      mysql_upgrade_info   server-key.pem
 ca.pem            ibtmp1           mysqlx.sock          sys
 client-cert.pem  '#innodb_temp'    mysqlx.sock.lock     undo_001
 client-key.pem    mysql            performance_schema   undo_002

CentOS 7:安装光盘直接提供

  • mariadb-server:5.5 服务器包
  • mariadb 客户端工具包

范例: CentOS 7 安装MySQL5.7

[root@centos7 ~]#vim /etc/yum.repos.d/mysql.repo					#建立仓库
[mysql]
name=mysql5.7
baseurl=https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/mysql-5.7-community-el7-x86_64/
gpgcheck=0

-------
[root@centos7 ~]#yum install -y mysql-community-server.x86_64 		#安装
[root@centos7 ~]#systemctl enable --now mysqld						#启动服务
-------
[root@centos7 ~]#mysql					#centos7会默认生成一个密码
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
[root@centos7 ~]#grep password /var/log/mysqld.log
2021-01-28T09:11:01.698455Z 1 [Note] A temporary password is generated for root@localhost:JUI4NslG5C:o
2021-01-28T09:15:37.741193Z 2 [Note] Access denied for user 'root'@'localhost' (using password: NO)

----
#使用默认密码连接,更改密码
----

[root@centos7 ~]#mysql -uroot -p'JUI4NslG5C:o'
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.7.33

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#方法一:
mysql> ALTER USER root@'localhost' identified by 'Magedu0!';
Query OK, 0 rows affected (0.00 sec)							#密码需设置复杂一些,简单密码不允许
    ->
方法二: 
[root@centos7 ~]#mysqladmin -uroot -p'JUI4NslG5C:o' password 'Magedu0!'

范例: CentOS 7 安装Mariadb

参考网站信息,配置yum源
https://mariadb.org/download/#mariadb-repositories

在这里插入图片描述

[root@centos7 ~]#vim /etc/yum.repos.d/mariadb.repo
# MariaDB 10.5 CentOS repository list - created 2021-01-28 09:39 UTC
# https://mariadb.org/download/
[mariadb]
name = MariaDB
baseurl = https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/10.5/centos7-amd64
gpgkey=https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

[root@centos7 ~]#yum install -y MariaDB-server.x86_64 
[root@centos7 ~]#systemctl enable --now mariadb.service

CentOS 6:

  • mysql-server:5.1 服务器包
  • mysql 客户端工具包

范例: Ubuntu 安装 MySQL

[root@ubuntu1804 ~]#apt install mysql-server
[root@ubuntu1804 ~]#systemctl status mysql.service

2.3 初始化脚本提高安全性

运行脚本:mysql_secure_installation

设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库

范例: 针对MySQL5.6前版本进行安全加固

1、安装mysql5.6
[root@localhost ~]# yum install -y mysql-community-server.x86_64
2、启动服务
[root@localhost ~]# systemctl enable --now mysqld
3、运行脚本
[root@localhost ~]# mysql_secure_installation



NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MySQL
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MySQL to secure it, we'll need the current
password for the root user.  If you've just installed MySQL, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): 
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MySQL
root user without the proper authorisation.

Set root password? [Y/n] y 		#是否设置root密码?
New password: 
Re-enter new password: 
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MySQL installation has an anonymous user, allowing anyone
to log into MySQL without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] y		#是否删除匿名账户?
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] y		不允许根用户远程登录?
 ... Success!

By default, MySQL comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] y		#删除测试数据库并访问它
 - Dropping test database...
ERROR 1008 (HY000) at line 1: Can't drop database 'test'; database doesn't exist
 ... Failed!  Not critical, keep moving...
 - Removing privileges on test database...
 ... Success!

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] y			#立即重新加载权限表
 ... Success!




All done!  If you've completed all of the above steps, your MySQL
installation should now be secure.

Thanks for using MySQL!


Cleaning up...
-----------

问:为什么要对MySQL旧版本进行加固?
[root@localhost ~]# mysql
+------+-----------+
| user | host      |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1       |
|      | localhost |
| root | localhost |
+------+-----------+
4 rows in set (0.00 sec)

答:不需输入密码,且匿名账户可以登录
[root@localhost ~]# mysql -uxxx
Welcome to the MySQL monitor. 

2.3 MySQL 组成

2.3.1 客户端程序

  • mysql: 交互式或非交互式的CLI工具
  • mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成
  • insert等写操作语句保存文本文件中
  • mysqladmin:基于mysql协议管理mysqld
  • mysqlimport:数据导入工具

MyISAM存储引擎的管理工具:

  • myisamchk:检查MyISAM库
  • myisampack:打包MyISAM表,只读

2.3.2 服务器端程序

  • mysqld_safe
  • mysqld
  • mysqld_multi 多实例 ,示例:mysqld_multi --example

2.3.3 用户账号

mysql用户账号由两部分组成:

USERNAME'@'HOST'

说明:
HOST限制此用户可通过哪些远程主机连接mysql服务器

支持使用通配符:

% 匹配任意长度的任意字符,相当于shell中*, 示例: 172.16.0.0/255.255.0.0 或 172.16.%.%

_ 匹配任意单个字符,相当于shell中? 

2.3.4 mysql 客户端命令

2.3.4.1 mysql 运行命令类型
  • 客户端命令:本地执行,每个命令都完整形式和简写格式
mysql> \h, help
mysql> \u,use
mysql> \s,status
mysql> \!,system
  • 服务端命令:通过mysql协议发往服务器执行并取回结果,命令末尾都必须使用命令结束符号,默认为分号
#示例:
mysql>SELECT VERSION();
2.3.4.2 mysql 使用模式
  • 交互模式
  • 脚本模式:
 mysql -uUSERNAME -pPASSWORD < /path/somefile.sql
 cat /path/somefile.sql | mysql -uUSERNAME -pPASSWORD
 mysql>source   /path/from/somefile.sql
2.3.4.3 mysql命令使用格式
mysql [OPTIONS] [database]

mysql客户端常用选项:

-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e   “SQL“ 执行SQL命令
-V, --version 显示版本
-v  --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置

登录系统:

#默认空密码登录
mysql  -uroot  -p

运行mysql命令:

mysql>use mysql
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;

范例:mysql的配置文件,修改提示符

#查看mysql版本
[root@centos8 ~]#mysql -V
mysql Ver 15.1 Distrib 10.3.11-MariaDB, for Linux (x86_64) using readline 5.1
#临时修改mysql提示符
[root@centos8 ~]#mysql -uroot -pcentos --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
#临时修改mysql提示符
[root@centos8 ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"  
#持久修改mysql提示符
[root@centos8 ~]#vim /etc/my.cnf.d/mysql-clients.cnf
[mysql]
prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"                                        
         
[root@centos8 ~]#mysql --print-defaults -v
mysql would have been started with the following arguments:
--prompt=\r:\m:\s(\u@\h) [\d]>\_ -v
[root@centos8 ~]#mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.11-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
10:29:30(root@localhost) [(none)]> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
10:29:34(root@localhost) [mysql]> exit

范例:配置所有MySQL 客户端的自动登录

[root@centos8 ~]#vim /etc/my.cnf
[client]			
user=root
password=Magedu0!                                                                              
                       
[mysql]
prompt=(\\u@\\h) [\\d]>\\_
2.3.4.4 mysqladmin命令

mysqladmin 命令格式

mysqladmin [OPTIONS] command command....

范例:

#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -uroot -p'password'   ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -p'password' shutdown
#创建数据库testdb
mysqladmin -uroot -p'password'   create testdb
#删除数据库testdb
mysqladmin -uroot -p'password'   drop testdb
#修改root密码
mysqladmin -uroot -p'old-password' password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -p'password' flush-logs

2.3.5 服务器端配置

2.3.5.1 服务器端配置文件

服务器端(mysqld):工作特性有多种配置方式
1、命令行选项:

2、配置文件:类ini格式,集中式的配置,能够为mysql的各应用程序提供配置信息

服务器端配置文件:

/etc/my.cnf #Global选项

/etc/mysql/my.cnf #Global选项

~/.my.cnf #User-specific 选项

配置文件格式:
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqldump]
[server]
[client]

格式:

parameter = value

说明:

_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小写
2.3.5.2 socket 连接说明

服务器监听的两种 socket 地址:

  • ip socket: 监听在tcp的3306端口,支持远程通信 ,侦听3306/tcp端口可以在绑定有一个或全部接
    口IP上
  • unix sock: 监听在sock文件上,仅支持本机通信。如:/var/lib/mysql/mysql.sock)
    说明:host为localhost 时自动使用unix sock。
2.3.5.3 关闭mysqld网络连接

只侦听本地客户端, 所有客户端和服务器的交互都通过一个socket文件实现,socket的配置存放
在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改。
范例:

[root@centos7 ~]#vim /etc/my.cnf
[mysqld]
skip-networking=1		#忽略网络功能

2.5 通用二进制格式安装 MySQL

2.5.1 实战案例:通用二进制格式安装 MySQL 5.6

2.5.1.1 准备用户
groupadd -r -g 306 mysql
useradd -r -g 306 -u 306 -d /data/mysql mysql
2.5.1.2 准备数据目录,建议使用逻辑卷
#可选做,后面的脚本mysql_install_db可自动生成此目录
mkdir /data/mysql
chown mysql:mysql /data/mysql
2.5.1.3 准备二进制程序
tar xf mysql-VERSION-linux-x86_64.tar.gz -C /usr/local
cd /usr/local
ln -sv mysql-VERSION mysql
chown -R root:root /usr/local/mysql/
2.5.1.4 准备配置文件
cd /usr/local/mysql
cp -b support-files/my-default.cnf   /etc/my.cnf
vim /etc/my.cnf
#mysql语句块中添加以下三个选项
[mysqld]
datadir = /data/mysql
innodb_file_per_table = on #在mariadb5.5以上版的是默认值,可不加
skip_name_resolve = on    #禁止主机名解析,建议使用
2.5.1.5 创建数据库文件
yum -y install perl perl-devel
yum -y install libaio* 

cd /usr/local/mysql/
./scripts/mysql_install_db --datadir=/data/mysql --user=mysql
[root@centos8 mysql]#ls /data/mysql/ -l
total 110604
-rw-rw---- 1 mysql mysql 12582912 Jun  1 16:44 ibdata1
-rw-rw---- 1 mysql mysql 50331648 Jun  1 16:44 ib_logfile0
-rw-rw---- 1 mysql mysql 50331648 Jun  1 16:44 ib_logfile1
drwx------ 2 mysql mysql     4096 Jun  1 16:44 mysql
drwx------ 2 mysql mysql     4096 Jun  1 16:44 performance_schema
drwx------ 2 mysql mysql     4096 Jun  1 16:44 test
2.5.1.6 准备服务脚本,并启动服务
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
#如果有对应的service 文件可以执行下面
cp /usr/local/mysql/support-files/systemd/mariadb.service
/usr/lib/systemd/system/
systemctl daemon-reload
systemctl enable --now mariadb
2.5.1.7 PATH路径
echo 'PATH=/user/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
2.5.1.8 安全初始化
/user/local/mysql/bin/mysql_secure_installation

2.5.2 实战案例:一键安装mysql-5.6二进制包的脚本

2.5.2.1 离线安装mysql-5.6二进制包的脚本
[root@centos8 ~]#vim install_mysql5.6.sh
#!/bin/bash
DIR=`pwd`
NAME="mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz"
FULL_NAME=${DIR}/${NAME}
DATA_DIR="/data/mysql"
yum install -y libaio perl-Data-Dumper  
if [ -f ${FULL_NAME} ];then
    echo "安装文件存在"
else
    echo "安装文件不存在"
        exit 3
fi
if [ -h /usr/local/mysql ];then
    echo "Mysql 已经安装"
    exit 3
else
   tar xvf ${FULL_NAME}   -C /usr/local/src
    ln -sv /usr/local/src/mysql-5.6.47-linux-glibc2.12-x86_64 /usr/local/mysql
    if id mysql;then
        echo "mysql 用户已经存在,跳过创建用户过程"
    else
       useradd  -r   -s /sbin/nologin mysql
     fi
    
    if id mysql;then
   chown  -R mysql.mysql /usr/local/mysql/*
        if [ ! -d /data/mysql ];then
            mkdir -pv /data/mysql && chown  -R mysql.mysql /data   -R
           /usr/local/mysql/scripts/mysql_install_db  --user=mysql --
datadir=/data/mysql  --basedir=/usr/local/mysql/
 cp /usr/local/src/mysql-5.6.47-linux-glibc2.12-x86_64/supportfiles/mysql.server /etc/init.d/mysqld
 chmod a+x /etc/init.d/mysqld
 cp ${DIR}/my.cnf   /etc/my.cnf
 ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql
 /etc/init.d/mysqld start
 chkconfig --add mysqld
 else
            echo "MySQL数据目录已经存在,"
 exit 3
 fi
    fi
fi
[root@centos8 ~]#cat /etc/my.cnf
[mysqld]
socket=/data/mysql.sock
user=mysql
symbolic-links=0
datadir=/data/mysql
innodb_file_per_table=1
[client]
port=3306
socket=/data/mysql.sock
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/tmp/mysql.sock
[root@centos8 ~]#ls
install_mysql5.6.sh my.cnf mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz

2.5.2.2 在线安装mysql-5.6二进制包的脚本
#!/bin/bash
. /etc/init.d/functions
DIR=`pwd`
MYSQL_VERSION=5.6.51
NAME="mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.gz"
FULL_NAME=${DIR}/${NAME}
URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.6
DATA_DIR="/data/mysql"
rpm -q wget || yum -y -q install wget
wget $URL/$NAME || {
    action "下载失败,异常退出" false;exit 10; }
yum install -y -q libaio perl-Data-Dumper autoconf
if [ -f ${FULL_NAME} ];then
   action "安装文件存在"
else
   action "安装文件不存在" false
    exit 3
fi
if [ -e /usr/local/mysql ];then
   action "Mysql 已经安装" false
    exit 3
else
   tar xf ${FULL_NAME} -C /usr/local/src
    ln -sv /usr/local/src/mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64
/usr/local/mysql
    if id mysql;then
       action "mysql 用户已经存在,跳过创建用户过程"
    else
       useradd -r -s /sbin/nologin mysql
    fi
    if id mysql;then
        chown -R mysql.mysql /usr/local/mysql/*
        if [ ! -d /data/mysql ];then
            mkdir -pv /data/mysql && chown -R mysql.mysql /data
           /usr/local/mysql/scripts/mysql_install_db --user=mysql --
datadir=/data/mysql --basedir=/usr/local/mysql/
            cp /usr/local/src/mysql-${MYSQL_VERSION}-linux-glibc2.12-
x86_64/support-files/mysql.server /etc/init.d/mysqld
            chmod a+x /etc/init.d/mysqld
            cat > /etc/my.cnf <<-'EOF'
 [mysqld]
            socket=/data/mysql/mysql.sock
            user=mysql
 symbolic-links=0
 datadir=/data/mysql
 innodb_file_per_table=1
 [client]
 port=3306
 socket=/data/mysql/mysql.sock
 [mysqld_safe]
 log-error=/var/log/mysqld.log
 pid-file=/tmp/mysql.sock
 EOF
            ln -sv /usr/local/mysql/bin/mysql /usr/bin/mysql
           /etc/init.d/mysqld start
           chkconfig --add mysqld
        else
           action "MySQL数据目录已经存在" false
            exit 3
        fi
    fi
fi

2.5.3 实战案例:通用二进制安装安装MySQL 5.7 和 MySQL8.0

2.5.3.1 安装相关包
yum  -y install libaio numactl-libs
2.5.3.2 用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
2.5.3.3 准备程序文件
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linuxglibc2.12-x86_64.tar.gz
tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -s mysql-5.7.31-linux-glibc2.12-x86_64/ mysql
chown -R root.root /usr/local/mysql/
2.5.3.4 准备环境变量
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
2.5.3.5 准备配置文件
cp /etc/my.cnf{
   ,.bak}
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock        
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
2.5.3.6 初始化数据库文件并提取root密码
2.5.3.6.1 方式1: 生成随机密码
mysqld --initialize --user=mysql --datadir=/data/mysql
...省略...
2019-07-04T13:03:54.258140Z 1 [Note] A temporary password is generated for
root@localhost: LufavlMka6,!  #注意生成root的初始密码
grep password /data/mysql/mysql.log
2019-12-26T13:31:30.458826Z 1 [Note] A temporary password is generated for
root@localhost: LufavlMka6,!
awk '/temporary password/{print $NF}' /data/mysql/mysql.log
LufavlMka6,!
2.5.3.6.2 方式2: 生成 root 空密码
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql 
2.5.3.7 准备服务脚本和启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
2.5.3.8 修改口令
mysqladmin -uroot -p'LufavlMka6,!'   password magedu

2.7.9 测试登录

#修改前面生成的随机密码为指定密码
mysqladmin -uroot -p'LufavlMka6,!'   password magedu
#修改前面生成的空密码为指定密码
mysqladmin -uroot   password magedu
2.5.3.9 测试登录
mysql -uroot -pmagedu

2.5.4 实战案例:一键安装MySQL5.7 和 MySQL8.0 二进制包的脚本

2.5.4.1 离线安装脚本
#!/bin/bash
. /etc/init.d/functions
SRC_DIR=`pwd`
#MYSQL='mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz'
MYSQL='mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz'
COLOR='echo -e \E[01;31m'
END='\E[0m'
MYSQL_ROOT_PASSWORD=magedu
check (){
   
if [ $UID -ne 0 ]; then
 action "当前用户不是root,安装失败" false
  exit 1
fi
cd  $SRC_DIR
if [ !  -e $MYSQL ];then
        $COLOR"缺少${MYSQL}文件"$END
 $COLOR"请将相关软件放在${SRC_DIR}目录下"$END
        exit
elif [ -e /usr/local/mysql ];then
       action "数据库已存在,安装失败" false
        exit
else
 return
fi
}
install_mysql(){
   
    $COLOR"开始安装MySQL数据库..."$END
 yum  -y -q install libaio numactl-libs &> /dev/null
    cd $SRC_DIR
   tar xf $MYSQL -C /usr/local/
    MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
    chown -R root.root /usr/local/mysql/
   id mysql &> /dev/null || {
    useradd -s /sbin/nologin -r mysql ; action "创建
mysql用户"; }
        
    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
   . /etc/profile.d/mysql.sh
    ln -s /usr/local/mysql/bin/* /usr/bin/
    cat > /etc/my.cnf <<-EOF
[mysqld]
server-id=1
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock                                                  
                                               
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
   [ -d /data ] || mkdir /data
   mysqld --initialize --user=mysql --datadir=/data/mysql
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
   chkconfig --add mysqld
   chkconfig mysqld on
    service mysqld start
   [ $? -ne 0 ] && {
    $COLOR"数据库启动失败,退出!"$END;exit; }
    MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}'
/data/mysql/mysql.log`
   mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD
&>/dev/null
   action "数据库安装完成"
}
check
install_mysql
2.5.4.2 在线安装脚本
[root@centos7 ~]#ccat install_online_mysql5.7or8.0_for_centos.sh 
#!/bin/bash
. /etc/init.d/functions
SRC_DIR=`pwd`
MYSQL='mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz'
URL=http://mirrors.163.com/mysql/Downloads/MySQL-5.7
#MYSQL='mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz'
#URL=http://mirrors.163.com/mysql/Downloads/MySQL-8.0
COLOR='echo -e \E[01;31m'
END='\E[0m'
MYSQL_ROOT_PASSWORD=magedu
check (){
   
if [ $UID -ne 0 ]; then
 action "当前用户不是root,安装失败" false
  exit 1
fi
cd  $SRC_DIR
rpm -q wget || yum -y -q install wget
wget  $URL/$MYSQL
if [ !  -e $MYSQL ];then
        $COLOR"缺少${MYSQL}文件"$END
 $COLOR"请将相关软件放在${SRC_DIR}目录下"$END
        exit
elif [ -e /usr/local/mysql ];then
       action "数据库已存在,安装失败" false
        exit
else
 return
fi
}
install_mysql(){
   
    $COLOR"开始安装MySQL数据库..."$END
 yum  -y -q install libaio numactl-libs   libaio &> /dev/null
    cd $SRC_DIR
   tar xf $MYSQL -C /usr/local/
    MYSQL_DIR=`echo $MYSQL| sed -nr 's/^(.*[0-9]).*/\1/p'`
    ln -s /usr/local/$MYSQL_DIR /usr/local/mysql
    chown -R root.root /usr/local/mysql/
   id mysql &> /dev/null || {
    useradd -s /sbin/nologin -r mysql ; action "创建
mysql用户"; }
        
    echo 'PATH=/usr/local/mysql/bin/:$PATH' > /etc/profile.d/mysql.sh
   . /etc/profile.d/mysql.sh
 ln -s /usr/local/mysql/bin/* /usr/bin/
    cat > /etc/my.cnf <<-EOF
[mysqld]
server-id=`hostname -I|cut -d. -f4`
log-bin
datadir=/data/mysql
socket=/data/mysql/mysql.sock                                                  
                                               
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF
   mysqld --initialize --user=mysql --datadir=/data/mysql
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
   chkconfig --add mysqld
   chkconfig mysqld on
    service mysqld start
     [ $? -ne 0 ] && {
    $COLOR"数据库启动失败,退出!"$END;exit; }
    MYSQL_OLDPASSWORD=`awk '/A temporary password/{print $NF}'
/data/mysql/mysql.log`
   mysqladmin  -uroot -p$MYSQL_OLDPASSWORD password $MYSQL_ROOT_PASSWORD
&>/dev/null
   action "数据库安装完成"
}
check
install_mysql

2.6 源码编译安装 MySQL 5.6

2.6.1 安装相关依赖包

[root@centos7 ~]#cd /usr/local/src
[root@centos7 src]#yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel libarchive-devel boost-devel   ncurses-devel gnutls-devel libxml2-devel openssl-devel libevent-devel libaio-devel perl-Data-Dumper

2.6.2 做准备用户和数据目录

useradd -r -s /sbin/nologin -d /data/mysql mysql	#创建一个mysql的用户,数据库文件存放在/data/mysql下

2.6.3 准备数据库目录

mkdir /data/mysql
chown -R mysql.mysql /data/mysql	#把所属组设置成mysql

2.6.4 源码编译安装

编译安装说明
利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,
即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的
影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html

2.6.4.1 下载并解压缩源码包
[root@centos7 ~]#ls
anaconda-ks.cfg  mysql-5.6.51.tar.gz
[root@centos7 ~]#tar xvf mysql-5.6.51.tar.gz -C /usr/local/src
2.6.4.2 源码编译安装MySQL
[root@centos7 ~]#cd /usr/local/src
[root@centos7 ~]#cd mysql-5.6.51/
cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make && make install 

提示:如果出错,执行rm -f CMakeCache.txt

2.6.5 准备环境变量

echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
.     /etc/profile.d/mysql.sh
或者用软链接实现
ln -s /usr/local/mysql/bin/mysql /usr/local/bin

2.6.6 生成数据库文件

cd   /apps/mysql/		#进入该目录下
scripts/mysql_install_db --datadir=/data/mysql/ --user=mysql

2.6.7 准备配置文件

cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf

#针对旧版本或mariadb-10.2.18.tar.gz
cp /apps/mysql/support-files/my-huge.cnf   /etc/my.cnf

2.6.8 准备启动脚本,并启动服务

cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

2.6.9 安全初始化

mysql_secure_installation

2.7 基于 dockcer 容器创建MySQL

范例:

[root@ubuntu1804 ~]#docker run --name mysql -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30

2.8 MySQL多实例

2.8.1 多实例介绍和方案

2.8.1.1 多实例介绍
  • 什么是数据库多实例
    多实例类似微信双开,端口号类比微信账号,数据库类比聊天窗口,表类比聊天记录
    MySQL多实例就是在一台服务器上同时开启多个不同的服务端口(如:3306、3307等),同时运
    行多个MySQL服务进程,这些服务进程通过不同的Socket监听不同的服务端口来提供服务。
    多实例可能是MySQL的不同版本,也可能是MySQL的同一版本实现
  • 多实例的好处
    可有效利用服务器资源。当单个服务器资源有剩余时,可以充分利用剩余资源提供更多的服务,且
    可以实现资源的逻辑隔离节约服务器资源。例如公司服务器资源紧张,但是数据库又需要各自尽量
    独立的提供服务,并且还需要到主从复制等技术,多实例就是最佳选择
  • 多实例弊端
    存在资源互相抢占的问题。比如:当某个数据库实例并发很高或者SQL查询慢时,整个实例会消耗
    大量的CPU、磁盘I/O等资源,导致服务器上面其他的数据库实例在提供服务的质量也会下降,所以
    具体的需求要根据自己的实际情况而定。
2.8.1.2 MySQL多实例常见的配置方案
  • 单一的配置文件、单一启动程序多实例部署方式
    MySQL官方文档提到的单一配置文件、单一启动程序多实例部署方式
    耦合度太高,一个配置文件不好管理。不是很推荐。
  • 多配置文件、多启动程序部署方式
    多配置文件、多启动程序部署方式是针对每个实例都有独立的配置文件和目录,管理灵活,此方案耦合度较低
    工作开发和运维的统一原则:降低耦合度。所以建议的此方式。

2.8.2 实战案例 1: CentOS 8 实现 MySQL 8.0 二进制安装的多实例

本案例适用于以版本

mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz
mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz
2.8.2.1 实战目标
CentOS8 二进制安装MySQL8.0,并实现三个实例
2.8.2.2 环境说明
一台系统CentOS 8.X主机
2.8.2.3 前提准备
关闭SElinux
关闭防火墙
时间同步
2.8.2.4 实现步骤
2.8.2.4.1 下载MySQL二进制文件并解压缩
[root@centos8 ~]#wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.23-linux-glibc2.12-x86_64.tar
#解压
[root@centos8 ~]#tar xf mysql-8.0.23-linux-glibc2.12-x86_64.tar.xz -C /usr/local/
#创建软链接
[root@centos8 ~]#ln -s /usr/local/mysql-8.0.23-linux-glibc2.12-x86_64/ /usr/local/mysql

2.8.2.4.2 创建用户和组配置权限
[root@centos8 ~]#useradd -r -s /sbin/nologin mysql
#更改所有者,所属组
[root@centos8 ~]#chown -R mysql.mysql /usr/local/mysql/
2.8.2.4.3 配置环境变量
[root@centos8 ~]#echo 'export PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
[root@centos8 ~]#. /etc/profile.d/mysql.sh
#或用软链接实现
[root@centos8 ~]#ln -s /usr/local/mysql/bin/mysql /usr/local/bin
2.8.2.4.4 创建各实例数据存放的目录
[root@centos8 ~]#cd /usr/local
[root@centos8 local]#mkdir -p /mysql/{3306,3307,3308}
[root@centos8 local]#chown -R mysql.mysql /mysql/
[root@centos8 local]#ll /mysql/
total 0
drwxr-xr-x 2 mysql mysql 6 Jan 28 13:09 3306
drwxr-xr-x 2 mysql mysql 6 Jan 28 13:09 3307
drwxr-xr-x 2 mysql mysql 6 Jan 28 13:09 3308
[root@centos8 local]#tree /mysql
/mysql
├── 3306
├── 3307
└── 3308
3 directories, 0 files
2.8.2.4.5 初始化各实例数据库文件
#先安装包,否则会出错
[root@centos8 local]#yum -yq install libaio
#针对每个实例初始化,生成空密码
[root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3306
[root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3307
[root@centos8 local]#mysqld --initialize-insecure --user=mysql --datadir=/mysql/3308

[root@centos8 local]#tree /mysql/ -d
/mysql/
├── 3306
│   ├── #innodb_temp
│   ├── mysql
│   ├── performance_schema
│   └── sys
├── 3307
│   ├── #innodb_temp
│   ├── mysql
│   ├── performance_schema
│   └── sys
└── 3308
    ├── #innodb_temp
    ├── mysql
    ├── performance_schema
    └── sys

15 directories

2.8.2.4.6 准备配置文件/etc/my.cnf
[root@centos8 ~]#file `which mysqld_multi`
/usr/local/mysql/bin/mysqld_multi: Perl script text executable
#每个实例中对应mysqlx_port行MySQL8.0版本需要分别指定,MySQL5.7无需指定
[root@centos8 ~]#cat /etc/my.cnf
[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin

[mysqld3306]
datadir = /mysql/3306
port 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值