1.8 MySQL简介
MySQL是一个小型关系数据库管理系统,开发者为瑞典MySQL AB公司。在2008年1月16号被sun公司10亿美金收购。2009年,SUN又被Oracle以74亿美金收购。
目前MySQL被广泛地应用在Internet上的中小型网站中。由于体积小、速度快、总体拥有成本低,尤其是开放源代码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。
1.8.1 MySQL的特性
-
使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性。
-
支持AIX、BSDi、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、NetBSD、OpenBSD、 OS/2 Wrap、Solaris、SunOS、Windows等多种操作系统。
-
为多种编程语言提供了API。这些编程语言包括C、C++、C#、Delphi、Eiffel、Java、Perl、PHP、 Python、Ruby和Tcl等。
-
支持多线程,充分利用CPU资源,支持多用户。
-
优化的SQL查询算法,有效地提高查询速度。
-
既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的 软件中。
-
提供多字符集支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数 据列名。
-
提供TCP/IP、ODBC和JDBC等多种数据库连接途径。
-
提供用于管理、检查、优化数据库操作的管理工具。
-
可以处理拥有上千万条记录的大型数据库。
1.9 MySQL获取
版本介绍:
Alpha版:开发版,公司内部使用
Beta版:完成开发后,用户体验版
RC版:生产环境发布之前的一个小版本或称候选版
GA版:正式发布版本
MySQL官网地址:MySQL
从官方网站下载安装包
从官方网站下载源代码包
从官方网站下载二进制包
从发行版本光盘中获取安装包
MySQL 常见版本:
MySQL Community Server 社区版本,开源免费,但不提供官方技术支持。
MySQL Enterprise Edition 企业版本,需付费,可以试用 30 天。
MySQL Cluster 集群版,开源免费。可将几个 MySQL Server 封装成一个 Server。
MySQL Cluster CGE 高级集群版,需付费
1.10 MySQL在企业中应用
数据库排名:DB-Engines Ranking - popularity ranking of database management systems
适用场景:
互联网公司web网站系统、数据仓库系统、日志记录系统、嵌入式系统
MySQL典型用户:
google、雅虎、腾讯、北电、思科、YouTube、SecondLife 百度、优酷网、新浪、中国电子科学研究院
数商3.0、一大把、哈票网、短信网关、IP通讯
MySQL在云中获得普遍采用:
1.11 MySQL体系结构
Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的
Connectors指的是不同语言中与SQL的交互
Management Serveices & Utilities: 系统管理和控制工具
Connection Pool:连接池。管理缓冲用户连接,线程处理等需要缓存的需求
SQL Interface:SQL接口,接受用户的SQL命令,并且返回用户需要查询的结果。比如select from就是调 用SQL Interface
Parser: 解析器。SQL命令传递到解析器的时候会被解析器验证和解析。
Optimizer:查询优化器。SQL语句在查询之前会使用查询优化器对查询进行优化。
Cache和Buffer: 查询缓存。如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数 据.
Engine:存储引擎。存储引擎是MySql中具体的与文件打交道的子系统。
-- 查看最大连接数 show variables like '%max_connections%';
# 查询缓存配置情况 show variables like '%query_cache%';
一条SQL语句执行流程:
连接层 (1)提供连接协议:TCP/IP 、SOCKET (2)提供验证:用户、密码,IP,SOCKET (3)提供专用连接线程:接收用户SQL,返回结果 通过以下语句可以查看到连接线程基本情况 mysql> show processlist; SQL层 (1)接收上层传送的SQL语句 (2)语法验证模块:验证语句语法,是否满足SQL_MODE (3)语义检查:判断SQL语句的类型 DDL :数据定义语言 DCL :数据控制语言 DML :数据操作语言 DQL: 数据查询语言 ... (4)权限检查:用户对库表有没有权限 (5)解析器:对语句执行前,进行预处理,生成解析树(执行计划),说白了就是生成多种执行方案. (6)优化器:根据解析器得出的多种执行计划,进行判断,选择最优的执行计划 代价模型:资源(CPU IO MEM)的耗损评估性能好坏 (7)执行器:根据最优执行计划,执行SQL语句,产生执行结果 执行结果:在磁盘的xxxx位置上 (8)提供查询缓存(默认是没开启的),会使用redis tair替代查询缓存功能 (9)提供日志记录(日志管理章节):binlog,默认是没开启的。 存储引擎层(类似于Linux中的文件系统) 负责根据SQL层执行的结果,从磁盘上拿数据。 将16进制的磁盘数据,交由SQL结构化化成表, 连接层的专用线程返回给用户。
第二章 MySQL 安装部署
MySQL数据库存在多种版本,不同的版本在不同的平台上(OS,也就是操作系统上)安装方式可能有所不同,因此安装时一定要参考官方文档进行安装。MySQL :: MySQL Documentation
选择需要的MySQL官方提供的不同版本,点击后在选择MySQL对应版本的,就可以找到安装教程,如意MySQL5.7为例:MySQL :: MySQL 5.7 Reference Manual :: 2 Installing and Upgrading MySQL
可以选择平台对应的安装方式。
2.1 window安装MySQL
window一般我们在开发时需要安装MySQL进行软件的开发,官方提供了两种安装方式:.msi和zip方式。
2.1.1 安装包方式
安装方式如下:
1、下载安装包
官网下载对应的安装包,根据需要下载对应的版本即可: 8.0:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-8.0.18.0.msi 5.7:https://cdn.mysql.com//Downloads/MySQLInstaller/mysql-installer-community-5.7.28.0.msi
当然也可以选择自己需要的版本:MySQL :: Download MySQL Installer (Archived Versions)
2、安装过程
安装包的方式比较简单,安装提示对应的完成操作即可(不同的版本可能有所区别,但是都大同小异),这种方式适合于新手使用,一般开发者都建议使用压缩包的方式完成。
2.1.2 压缩包方式
压缩包的方式在5.7之前和之后不太一样
zip版(5.5、5.6):
1、解压到非中文、非特殊字符路径下
2、将bin目录配置到环境变量中
3、在主目录下复制一个xx.ini,修改为my.ini,修改其中的basedir和datadir
basedir=mysql主目录 datadir=mysql主目录/data
4、以管理员身份打开cmd,将路径切换到bin中,执行命令 mysqld install 新服务名 # 安装mysql服务器到系统
5、启动服务: 可以手动启动服务 也可以使用net start mysql 命令启动
6、测试 cmd中执行命令 mysql -uroot -p
zip版(5.7及8.0):
-
下载位置:mysql下载位置
-
解压缩后位置:D:\mysql-8.0.15-winx64
-
在主目录下复制一个xx.ini,修改为my.ini,修改其中的basedir和datadir
basedir=mysql主目录 datadir=mysql主目录/data
-
初始化命令(记录控制台给出的随机密码,一定记住):
mysqld --initialize --console
-
然后先给mysql服务创建名称(方便到时候建立多个mysql服务时不冲突)
mysqld --install mysql8
-
启动服务:
net start mysql8
-
登陆旧密码登陆(第3步中的密码):
mysql -u root -p
-
修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; # 之后键入修改密码的命令: ALTER USER root@localhost IDENTIFIED BY 'root'
-
使用新密码登陆:
mysql -u root -p 新密码
卸载MySQL:
停止服务:net stop mysql
删除服务:mysqld --remove