MySQL 安装
先行条件:安装了 docker 和 docker-compose
5.7 版本的 docker-compose 如下
version: '3.1'services:db:# 目前 latest 版本为 MySQL8.ximage: mysqlrestart: alwaysenvironment:#初始化密码MYSQL_ROOT_PASSWORD: rootcommand:#为制作的MySQL镜像指定参数--default-authentication-plugin=mysql_native_password--character-set-server=utf8mb4--collation-server=utf8mb4_general_ci--explicit_defaults_for_timestamp=true--lower_case_table_names=1ports:- 3306:3306volumes:- ./data:/var/lib/mysql
然后启动
docker-compose up -d
最后在主机上进行连接测试

连接成功
MySQL 配置文件挂载
使用 Docker 安装的 MySQL 需要使用从外部挂载一个配置文件
在当前目录下新建目录 conf,在 conf 中新建文件 my.cnf,内容如下
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
lower_case_table_names=1
#log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
然后将该文件挂载到容器内部
version: '3.1'
services:
db:
# 目前 latest 版本为 MySQL8.
image: mysql:5.7
restart: always
environment:
#初始化密码
MYSQL_ROOT_PASSWORD: root
command:
#为制作的MySQL镜像指定参数
--default-authentication-plugin=mysql_native_password
--character-set-server=utf8mb4
--collation-server=utf8mb4_general_ci
--explicit_defaults_for_timestamp=true
--lower_case_table_names=1
ports:
- 3306:3306
volumes:
- ./data:/var/lib/mysql
- ./conf/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
然后进入容器内部,查看
cat /etc/mysql/mysql.conf.d/mysqld.cnf

配置文件挂载成功
验证
在 my.cnf 文件中添加一行设置默认存储引擎
default-storage-engine=MYISAM
docker-compose 重启后再次连接数据库,新建表,查看信息
,发现存储引擎变为 MyISAM
主要配置文件
二进制日志 log-bin:用于主从复制
错误日志 log-error:默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等
查询日志 log:默认关闭,记录查询的 SQL 语句,如果开启会降低 MySQL 整体性能
数据文件:windows 下的数据库目录存放在安装目录的 data 目录下;Linux 系统的数据库目录则默认存放在 /var/lib/mysql 下
其中一个数据库目录下有如下两种类型的文件
- .ibd:存放的是表数据和表索引
- .frm:存放的是表结构

MySQL 逻辑架构
MySQL 和其它数据库相比,其架构可以在多种不同的场景中应用并发挥良好作用,这一点主要体现在存储引擎的架构上。MySQL 的插件式存储引擎架构将查询处理和其它的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎

从上至下可以分为
- 连接层:客户端和连接服务
- 服务层:处理 SQL 语句,包括编译器优化,缓存查询等
- 数据存储引擎层:存储引擎真正的负责了 MySQL 中数据的存储与提取,服务器通过 API 与存储引擎通信
- 存储层:主要将数据存储在运行与裸机的文件系统上,并完成与存储引擎的交互
存储引擎介绍
MySQL 支持很多种存储引擎,其中常用的是 MyISAM 和 InnoDB
二者的主要区别如下:

由于 InnoDB 会缓存真实数据,因此在数据的读取上比 MyISAM 要快
