起因:在工作中常常要用到mysql,平常只是对数据库crud,并没有认真的了解过她,sql语句也只是会一些最基本的,和常用的,一些不常用的都要去网上百度,即决定学习一下mysql,来了解她,虽然开发很多都是黑盒,但追本溯源总是我们想要的。
1.Linux MySQL v5.6版本安装
1.1 查询系统中已有的MySQL
rpm -qa|grep mysql
1.2 如果有卸载MySQL并删除相关文件(这里是基于默认安装的)
yum remove -y mysql mysql-libs mysql-common
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
1.3 安装v5.6 MySQL
wget http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
rpm -ivh mysql-community-release-el6-5.noarch.rpm
yum install -y mysql-community-server
1.4 配置MySQL
vim /etc/my.cnf
1.5 启动MySQL
service mysqld start
1.6 设置root密码
/usr/bin/mysqladmin -u root password '123456'
2.数据库应用
- 不同的业务系统一定要独立授权用户
where条件解析顺序
- MySQL是从左向右执行where条件(查询优化器会去优化where条件,但效果不一定)
- Oracle是从右向左执行where条件
3.SQL执行顺序
-
FROM
-
ON
-
JOIN
-
WHERE
-
GROUP BY
-
HAVING
-
SELECT columns
-
DISTINCT
-
ORDER BY
-
LIMIT
4. 全文索引
- 只有在MyISAM引擎上才能使用
- CHAR、VARCHAR、TEXT字段才能使用
5. SQL的执行过程
客户端
连接器:管理连接、做权限验证 username、password
查询缓存:key-value 如果有就直接返回,全SQL匹配
- preparestatement:args string
- statement:string
- 如果数据表发生结构变化及数据内容变化,MySQL会立即清空对应表缓存
- MySQL 8.0 直接删除了,彻底没了
- 会在结构返回前做一次权限验证
分析器
- 词法分析:错别字
- 语法分析:语法结构
- Preparestatement、#{}
优化器:执行计划生产,索引选择
执行器:操作引擎
- 如果你对这个表没有权限,就会返回错误 grant
- 从数据引擎里取数据
6. MySQL
- MyISAM:查询和插入的高速引擎,但不支持事务
- InnoDB:v5.5 支持事务支持行锁
- ISAM:5.0以后就不装了
- Memory:内存引擎,速度快,但掉电丢失数据
- Falcon:InnoDB的替代方向
- Archive:归档引擎,只支持写入和查询,适合大数据量,将数据压缩后存储
- CSV
show engines;
show table status like '%user_role%' \G;
7. MySQL存储的物理结构
- MySQL是通过文件系统对数据和索引进行存储的
- MySQL从物理结构上可以分为日志文件和数据索引文件
- MySQL在linux下默认安装文件路径 /var/lib/mysql
8. 日志文件
MySQL通过日志记录数据库的操作和错误信息,常用到的日志:错误日志、查询日志、慢查询日志、二进制日志Binlog
show variables like '%log%';
9. 错误日志
默认是开启的
log_error=/var/log/mysqld.log
log_warnings=1
log_warnings:是否开启警告信息一并写入错误日志 0|1
log_warnings>1 : 将失败的连接,拒绝访问相关信息也记录到错误日志中
10. 查询日志
-
在mysql中被称为general log
-
会记录所有操作,无论对错
-
存放方式有三种
- 日志 general_log_file /var/lib/mysql/MySQL.log
- 将查询日志存入mysql.general_log表中
- 同时存放
-
三种方式的配置项
- log_output FILE|TABLE|FILE,TABLE
general_log=ON
log_output=FILE
11. 慢查询日志
目录授权
chown -R mysql:mysql /usr/local/slowfile/
mysqldumpslow使用
- -s排序规则,降序,-t 2显示结果前两行
- c :执行次数
- l : 锁定时间
- r : 返回记录
- t :执行时间
- al、ar、at
percona-toolkit使用
可以直接对日志进行时间的区间查询
Binlog二进制日志
默认是关闭的,需要通过配置进行开启
log_bin=mysql-bin
Binlog日志深入分析及备份与恢复相关,请移步我的下一篇博客mysql备份与恢复
不要以为每天把功能完成了就行了,这种思想是要不得的,互勉~!
网友评论