目录
一、MySQL 介绍
1. 基本信息与特性
- 开发背景与所属:MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。
- 开源与多语言支持:MySQL 是开源的,支持多种编程语言,如 C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和 Tcl 等,对 PHP 有很好的支持。
- 数据存储与灵活性:它将数据保存在不同的表中,增加了速度并提高了灵活性。支持大型数据库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为 8TB,还可以定制,采用了 GPL 协议,可以修改源码来开发自己的 MySQL 系统。
2. 存储引擎
- 存储引擎的概念:MySQL 中的数据用各种不同的技术存储在文件(或者内存)中,这些技术在 MySQL 中被称作存储引擎(也称作表类型)。
- MyISAM 存储引擎:基于 ISAM 存储引擎并扩展,在 Web、数据仓储等应用环境下常用。拥有较高的插入、查询速度,但不支持事务。
- InnoDB 存储引擎:事务型数据库的首选引擎,支持事务安全表(ACID),支持行锁定和外键,是默认的 MySQL 引擎。
- Memory 存储引擎:将表中的数据存储到内存中,为查询和引用其他表数据提供快速访问,适合临时存放数据量不大且不需要较高数据安全性的场景。
- Archive 存储引擎:仅支持插入和查询两种功能,适合存储归档数据,如记录日志信息。
3. 事务 ACID
- 事务的定义与引擎支持:事务是访问和更新数据库的程序执行单元,在 MySQL 中只有使用了 Innodb 数据库引擎的数据库或表才支持事务。
- 原子性:事务中的所有操作要么全部完成,要么全部不完成,若在执行过程中发生错误,会被回滚到事务开始前的状态。
- 一致性:在事务开始之前和事务结束以后,数据库的完整性没有被破坏,写入的资料必须完全符合所有预设规则。
- 隔离性:数据库允许多个并发事务同时对其数据进行读写和修改,通过不同的隔离级别防止多个事务并发执行时导致数据的不一致。InnoDB 通过锁机制保证同一时刻只能有一个事务对数据进行写操作。
- 持久性:事务处理结束后,对数据的修改是永久的,即便系统故障也不会丢失,这通过日志(重做日志 redo log)来实现。
4. 索引及数据结构
- 索引的作用与本质:索引的作用是做数据的快速检索,其本质是数据结构。通过不同数据结构的选择,实现各种数据快速检索。
- Mysql 索引底层数据结构选型:B + 树是 MySQL 索引底层数据结构的选择。哈希表检索速度快但无法进行高效范围查找;二叉查找树在极端情况下会退化为线性链表,检索性能下降;AVL 树和红黑树可实现范围查找和数据排序,但数据库查询瓶颈在于磁盘 IO,一次磁盘 IO 只能取出来一个节点上的数据加载到内存里,非常消耗时间。而 B 树和 B + 树可以在一个树节点上尽可能多地存储数据,减少磁盘 IO 次数,加快检索速度,且支持范围查找。B 树一个节点里存的是数据,而 B + 树存储的是索引(地址),B + 树叶子节点存所有的数据,且叶子节点用链表串联起来,便于范围查找。
5. 日志文件
- 重做日志(redo log):确保事务的持久性,在事务执行过程中写入,当对应事务的脏页写入磁盘后,redo log 的使命完成,可被覆盖。默认情况下,对应的物理文件位于数据库的 data 目录下的 ib_logfile1&ib_logfile2。
- 回滚日志(undo log):保证数据的原子性,保存事务发生之前的数据版本,用于回滚。
- 二进制日志(binlog):用于复制,在主从复制中,从库利用主库上的 binlog 进行重播,实现主从同步,也可用于数据库的基于时间点的还原。事务提交时,将事务中的 sql 语句按照一定格式记录到 binlog 中。
- 错误日志(errorlog):记录 mysqld 启动和停止以及服务器在运行过程中发生的错误信息,默认情况下系统记录错误日志的功能是关闭的,错误信息被输出到标准错误输出。
- 慢查询日志(slow query log):记录执行时间过长和没有使用索引的查询语句,报错 select、update、delete 以及 insert 语句,且只会记录执行成功的语句。
- 一般查询日志(general log):记录服务器接收到的每一个查询或是命令,无论是否正确甚至是否包含语法错误,开启会产生不小的系统开销,所以 MySQL 默认关闭。
- 中继日志(relay log):从数据库 Slave 服务的 I/O 线程从主数据库 Master 服务的二进制日志中读取数据库的更改记录并写入到中继日志中,然后在 Slave 数据库执行修改操作。
二、MySQL 8.0 安装部署
1. 安装环境
- linux 版本:CentOS Linux release 7.2.1511 (Core)。
- mysql 版本:mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz。
2. 安装步骤
- 创建安装路径并移动安装包:
- 创建安装路径
/usr/local/mysql
。 - 将安装包
mysql-8.0.26-linux-glibc2.12-x86_64.tar.xz
移动到安装路径下。
- 创建安装路径
- 解压安装包并重命名:
- 解压安装包。
- 将解压后的文件夹重命名为
mysql-8.0
。
- 创建存储文件夹和日志文件夹:
- 创建
data
文件夹用于存储数据。 - 创建
log
文件夹用于存储日志。
- 创建
- 创建 mysql 用户组、用户并授权:
- 创建
mysql
用户组。 - 创建
mysql
用户并将其加入到mysql
用户组。 - 授权
mysql
用户对/usr/local/mysql/
文件夹的权限。
- 创建
- 初始化基础信息:
- 切换到
mysql-8.0/bin/
目录下。 - 执行初始化命令,获取临时密码。
- 切换到
- 编辑配置文件:
- 编辑
/etc/my.cnf
配置文件,注释mysqld_safe
,修改相关配置信息并开启binlog
。
- 编辑
- 添加 mysqld 服务到系统:
- 将
mysql.server
文件复制到/etc/init.d/
目录下,并授权和添加服务。
- 将
- 启动服务并查看状态:
- 启动
mysql
服务。 - 查看
mysql
服务状态。 - 重启
mysql
服务。
- 启动
- 将 mysql 命令添加到服务:
- 创建软链接,将
mysql
命令添加到系统服务中。
- 创建软链接,将
- 登录 mysql 并修改密码:
- 使用临时密码登录
mysql
。 - 修改
root
用户密码。 - 使密码生效。
- 修改远程连接并生效:
- 选择
mysql
数据库。 - 修改
root
用户的远程连接权限。 - 使修改生效。
三、参考资料
[1] MySQL
[2] MySQL 教程 | 菜鸟教程
[3] https://zhuanlan.zhihu.com/p/113917726
[4] MySQL中的几种日志了解 - myseries - 博客园
[5] linux 安装mysql8.0 超详细教程_linux安装mysql8.0+-优快云博客