1. MySQL 简介
(略..)
2. Linux 中安装MySQL
1)传输 MySQL 的服务器端和客户端安装包到 Linux 中的 /opt 目录。(已上传到我的资源)
2)检查之前是否安过 MySQL:rpm -qa | grep -i mysql
已装过:
装过 mysql-libs-5.1.73-7.el6.x86_64 就卸载掉:rpm -e --nodeps mysql-libs-5.1.73-7.el6.x86_64
(卸载mysql时,如果有必要,使用 “ find / -name mysql ”命令查看一下有没有mysql的文件夹,如果有的话,用 “ rm -rf 文件夹 ”命令都删掉。参考:https://www.cnblogs.com/kerrycode/p/4364465.html)
没装过:
3)安装 MySQL 的服务端:rpm -ivh MySQL-server-5.5.48-1.linux2.6.i386.rpm
我这里出错了:(到这的时候,缺少依赖,直接给他 yum install libaio.so.1)
然后再安装一遍,即可成功:
(死亡提示:之前出错的时候,我上网查了一下,有人说加上 --force --nodeps 就好了。!!千万不要加,不然会有无穷无尽的错,真的,不然你会哭的)
安装了很多次后的自我感觉,一般进度条下面有注释的,才万事大吉,如下图;要是只有进度条的话,八成会出事哈哈哈。
4)安装 MySQL 客户端:rpm -ivh MySQL-client-5.5.48-1.linux2.6.i386.rpm
安装完依赖再安装一遍客户端就ok了。
5)查看 MySQL 安装是创建的 mysql 用户和 mysql 组:id mysql
或者:
或者用 mysqladmin --version 查看版本也可以
6)启动 MySQL 服务:service mysql start(CentOS7.0以上使用 systemctl start mysql.service。我这里是 CentOS6)
netstat -anp |grep 3306 (可以确认是不是 3306 的端口)
如果你前面加了--force --nodeps,这里就会报错:
在 var/log/ 中看日志信息,less mysqld.log
在网上看到很多解决方法都是直接 yum install libaio.so.1 就好使了,但是这里安装之后才会出错。
想了好久,终于...
原因:之前在安装的时候缺少libaio.so.1,我没有安装,直接安装了 mysql,所以后面才会出这个错!所以,我把MySQL客户端和服务端都卸载了。重新安装,需要什么依赖就安装什么依赖,最后安装mysql成功后即可成功启动!!
7)调用 mysqladmin 程序给 MySQL服务器设置 root 账号的密码: mysqladmin -u root password
8)登录 MySQL 服务器:mysql -u root -p
查看数据库:
补充1:修改 MySQL 服务器访问权限(方便以后连接)
①为 root@% 授权:grant all privileges on *.* to 'root'@'%' identified by '1234' with grant option;
②退出 MySQL:exit
③重启 MySQL 服务:service mysql restart
3. Mysql 的配置文件
1)在 Linux 下查看安装目录: ps -ef | grep mysql
- /var/lib/mysql/ : mysql 数据库文件的存放路径
- /usr/share/mysql :配置文件目录
- /usr/bin :相关命令目录(mysqladmin mysqldump 等命令)
- /etc/init.d/mysql :启停相关脚本
2)修改配置文件位置
进入到 /usr/share/mysql/ 中,复制(cp) my-huge.cnf 到 /etc/my.cnf。(cp /usr/share/mysql/my-huge.cnf /etc/my.cnf )(5.5版本)
(5.6 版本就叫 my-default.cnf 了)
4. Mysql逻辑架构介绍
总体概览
和其他数据库相比,MySQL有点与众不同,它的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的架构上。插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离。这种架构可以根据业务的需求和实际需要选择合适的存储引擎。
①Connectors
指的是不同语言中与SQL的交互
②Management Serveices & Utilities:
系统管理和控制工具
③Connection Pool: 连接池
管理缓冲用户连接,线程处理等需要缓存的需求。
负责监听对 MySQL Server 的各种请求,接收连接请求,转发所有连接请求到线程管理模块。每一个连接上 MySQL Server 的客户端请求都会被分配(或创建)一个连接线程为其单独服务。而连接线程的主要工作就是负责 MySQL Server 与客户端的通信,
接受客户端的命令请求,传递 Server 端的结果信息等。线程管理模块则负责管理维护这些连接线程。包括线程的创建,线程的 cache 等。
④SQL Interface: SQL接口。
接受用户的 SQL 命令,并且返回用户需要查询的结果。比如 select from 就是调用 SQL Interface
⑤Parser: 解析器。
SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和YACC实现的,是一个很长的脚本。
在 MySQL中我们习惯将所有 Client 端发送给 Server 端的命令都称为 query ,在 MySQL Server 里面,连接线程接收到客户端的一个 Query 后,会直接将该 query 传递给专门负责将各种 Query 进行分类然后转发给各个对应的处理模块。
主要功能:
- 将SQL语句进行语义和语法的分析,分解成数据结构,然后按照不同的操作类型进行分类,然后做出针对性的转发到后续步骤,以后SQL语句的传递和处理就是基于这个结构的。
- 如果在分解构成中遇到错误,那么就说明这个sql语句是不合理的
⑥Optimizer: 查询优化器。
SQL 语句在查询之前会使用查询优化器对查询进行优化。就是优化客户端请求的 query(sql语句) ,根据客户端请求的 query 语句,和数据库中的一些统计信息,在一系列算法的基础上进行分析,得出一个最优的策略,告诉后面的程序如何取得这个 query 语句的结果
他使用的是“选取-投影-联接”策略进行查询。
用一个例子就可以理解: select uid,name from user where gender = 1;
这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行gender过滤
这个select查询先根据uid和name进行属性投影,而不是将属性全部取出以后再进行过滤
将这两个查询条件联接起来生成最终查询结果
⑦Cache和Buffer: 查询缓存。
他的主要功能是将客户端提交 给MySQL 的 Select 类 query 请求的返回结果集 cache 到内存中,与该 query 的一个 hash 值 做一个对应。该 Query 所取数据的基表发生任何数据的变化之后, MySQL 会自动使该 query 的Cache 失效。在读写比例非常高的应用系统中, Query Cache 对性能的提高是非常显著的。当然它对内存的消耗也是非常大的。
如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存等
⑧存储引擎接口
存储引擎接口模块可以说是 MySQL 数据库中最有特色的一点了。目前各种数据库产品中,基本上只有 MySQL 可以实现其底层数据存储引擎的插件式管理。这个模块实际上只是 一个抽象类,但正是因为它成功地将各种数据处理高度抽象化,才成就了今天 MySQL 可插拔存储引擎的特色。
MySQL区别于其他数据库的最重要的特点就是其插件式的表存储引擎。MySQL插件式的存储引擎架构提供了一系列标准的管理和服务支持,这些标准与存储引擎本身无关,可能是每个数据库系统本身都必需的,如SQL分析器和优化器等,而存储引擎是底层物理结构的实现,每个存储引擎开发者都可以按照自己的意愿来进行开发。
注意:存储引擎是基于表的,而不是数据库。
5. MySQL 存储引擎
1)查看命令
- show engies; 查看 MySQL 已提供什么存储引擎
- show variables like '%storage_engine%'; 看 MySQL 当前默认的存储引擎
2)MyISAM 和InnoDB
对比项 | MyISAM | InnoDB |
主外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作。 | 行锁,操作时只锁某一行,不对其他行有影响。适合高并发的操作。 |
缓存 | 只缓存索引,不缓存真实数据 | 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响。 |
表空间 | 小 | 大 |
关注点 | 性能 | 事务 |
默认安装 | Y | Y |