- 简单MySQL教程三 11-25
- MYSQL 的那些“坑” 11-25
- MYSQL优化脚本 11-25
- Mysql Repliaction技术入门 11-25
- 干货:成为优秀的JAVA工程师必读的经典书籍 11-25
- mysql 常用命令集锦 11-25
- mysql简介 11-25
- MySQL错误处理 11-25
- Mysql三范式 11-25
- MySQL主从复制 11-25
简单MySQL教程三
发布者: superzhang | 发布时间:2017-11-25一、性能分析
1、MySql Query Optimizer
1 )、Mysql中有专门负责优化SELECT语句的优化器模块,主要功能:通过计算分析系统中收集到的统计信息,为客户端请求的Query提供他认为最优的执行计划(它认为最优的数据检索方式,但不见得是DBA认为是最优的,这部分最耗费时间)
2) 当客户端向MySQL 请求一条Query,命令解析器模块完成请求分类,区别出是 SELECT 并转发给MySQL Query Optimizer时,MySQL Query Optimizer 首先会对整条Query进行优化,处理掉一些常量表达式的预算,直接换算成常量值。并对 Query 中的查询条件进行简化和转换,如去掉一些无用或显而易见的条件、结构调整等。然后分析 Query 中的 Hint 信息(如果有),看显示Hint信息是否可以完全确定该Query 的执行计划。如果没有 Hint 或Hint 信息还不足以完全确定执行计划,则会读取所涉及对象的统计信息,根据 Query 进行写相应的计算分析,然后再得出最后的执行计划。
2、MySQL常见瓶颈
CPU:CPU在饱和的时候一般发生在数据装入内存或从磁盘上读取数据时候
IO:磁盘I/O瓶颈发生在装入数据远大于内存容量的时候
二、explain关
MYSQL 的那些“坑”
发布者: superzhang | 发布时间:2017-11-25近日参与了一个互联网产品项目,接触了不少mysql数据库架构方面的工作,发现mysql存在不少“坑”(当然也可能是我太年轻)。下面就和大家展开港一港。
1. 没有over语句
这个看起来是个小问题,可在实际应用场景中确实带来的不便。over语句主要和rank(),row_number()等一起配合使用。假如我有一个名为midterm_score的表存放一所学校某年级所有学生的期中考试成绩,有班级编号(class_code),学生名称(student_name)和总分(score)共3个字段。如果我现在想对每个班级学生的总分进行排名,我只需要执行如下的sql语句:
SELECT class_code, student_name, score rank() OVER (PARTITION BY class_code ORDER BY score)这行sql代码清晰明了,简单实用。然而,mysql并没有over语句,那么同样的功能要怎么实现呢?代码如下:
SET @count=0;SET @mid='';SELECT a.*,b.rank FROM midterm AS a INNER JOIN (不知看你能不能看懂,反正我看不懂。。。
2. 联合索引的最左匹配原则
索引其实就是对选定的一个或多个字段保存排
MYSQL优化脚本
发布者: superzhang | 发布时间:2017-11-25开源关系型数据库mysql在实际生产环境中大量被使用,但是长期以往的使用肯定会因为一些外在的因素导致表损坏,还有经过大量的增删改查数据后一定会有很多的磁盘空间没有被回收那么,平时就可以使用mysql下的mysqlcheck脚本工具进行定期优化
#!/bin/bashMysql Repliaction技术入门
发布者: superzhang | 发布时间:2017-11-25什么是MySQL Replication?
1、Replication可以实现将数据从一台数据库服务器(master)复制到一台到多台数据库服务器上(slave);
2、默认情况下,属于异步复制,所以无需维持长连接。
MySQL Replication的原理:简单来说,master将数据库的改变写入二进制日志,slave同步这些二进制日志,并根据这些二进制日志进行数据重演操作,实现数据异步同步。
MySQL Replication的用途:
1、Fail Over 故障切换;
2、Backup 在线热备份(机械故障);
3、High Performance 高性能。
MySQL Replication的架构:
master ---> slave (双机热备)。
默认情况下,master接受读写请求,slave只接受读请求以减轻master的压力。
复制过程如下:
1、slave端的IO线程连上master端,执行请求;
2、master端返回给slave端,bin log文件名和位置信息;
3、IO线程把master端的bin log内容依次写到slave端relay bin log里,并把master端的bin-log
干货:成为优秀的JAVA工程师必读的经典书籍
发布者: superzhang | 发布时间:2017-11-25无论学习什么,最课程小编始终认为书籍是有用的,只是有的人不喜欢看书罢了。
在编程上,或许有的人觉得看视频的效率会更高一些,但是在小编看来,各有各的好,对于初学者迩言,很多机构的视频的确可以满足,课程也相对系统,但是对于有一定基础,已经是一名普通的工程师了,想要进阶的话,视频就不够用了,而且书籍上有很多原理是视频之中没有的。
所以,书籍是有很大的价值的。(Ps:我们Boss也仍旧在不停地学习,看书)
这里的看书不仅仅只是看,需要对着书上的代码,自己动手。
每天的学习,最好在博客或者日记上记录,有助于我们检查自己的学习效果,也可以去看好的博文来学习,对梳理学习的内容非常好
是时候给大家推送一波比较实用的书籍,不过以下的书籍不适于初学者学习,适合有一定编程基础的同学进阶学习的。
1、《Effective Java中文版》先来一本神作。作者是谷歌的首席架构师JoshuaBloch,属于超级技术大牛级别的。
首先声明:这本书并不适
mysql 常用命令集锦
发布者: superzhang | 发布时间:2017-11-25作为一个mysql新手,面对mysql繁多的命令,总是会感觉大部分的命令名以及用途能记住,比如show这个命令,可是选项就记不起来,或许会说查man,可是man看起来非常吃力,英语刚过四级。所以只有通过书籍或百度才明白点,这就导致学习mysql刚开始可能会比较吃力,但是这些命令不是所有都需要记住的,因为有些可能你就用不到,所以记住一些常用的就好了,这里给大家总结一下mysql常用的命令吧。
1. 数据库登陆
mysql -h localhost -u root -p dbName
2. 查看当前数据库
show databases;
select database();
3. 切换数据库
mysql简介
发布者: superzhang | 发布时间:2017-11-25MySQL 架构图
在理解事务的隔离性之前,我们必须先要了解Mysql数据的逻辑架构!
mysql 逻辑图
如果能够在头脑中构建一幅Mysql各组件之间如何协同工作的架构图,就会有助于我们深入的理解Mysql数据库。上面的图有点复杂现在我们只需要记住下面的简图即可,如下图所示:
存储引擎
1.2简介
下面来简单的介绍一下:
第一层:这层服务并不是Mysql独有的哦!大多数基于网络的客户端/服务器的工具或者服务都有类似的架构,比如:连接处理、授权认证、安全等等,和我之前用python编写的socket服务是一样一
MySQL错误处理
发布者: superzhang | 发布时间:2017-11-25mysql> CREATE USER 'newUser'@'localhost' IDENTIFIED BY 'gitlab!@#';
ERROR 1396 (HY000): Operation CREATE USER failed for 'gitlab'@'localhost'
mysql> FLUSH PRIVILEGES; 这里执行这个命令并不能解决问题
Query OK, 0 rows affected (0.00 sec )
下面仍然报错
mysql> CREATE USER 'newUser'@'localhost' IDENTIFIED BY 'gitlab!@#';
ERROR 1396 (HY000): Operation CREATE USER failed for 'gitlab'@'localhost'
使用 drop user 才可以解决这个问题:
mysql> drop user newUser@localhost;
Query OK, 0 rows affected (0.05 sec)
mysql> CREATE USER 'newUser'@'localhost' IDENTIFIED BY
Mysql三范式
发布者: superzhang | 发布时间:2017-11-25范式,就是指设计数据库需要(应该)遵循的原则。
每个范式,都是用来规定某种结构或数据要求——后一范式都是在前一范式已经满足的情况用来“加强要求”。
第一范式(1NF):原子性
存储的数据应该不可以再分。
上图的学生这一字段的数据还是可以拆分的,应该如下图:
第二范式(2NF):唯一性
需要实现每一行数据具有唯一可区分的特性,并不能有部分依赖关系。
通常,给一个表加主键(也是推荐做法),就可以做到“唯一可区分”。
一个表只要有主键,则其他非主键一定是依赖于主键的。
部分依赖是指某个非主键字段,依赖于联合主键字段的其中部分字段。
原理图
1、master记录二进制日志
2、slave的I/O线程读取master的二进制日志,并将其写入到中继日志中,SQL线程从中继日志中读取时间,并重放其中事件,更新slave的数据
二、准备工作:
关闭防火墙
#server iptables stop
关闭开机自启
#chkconfig iptables off
关闭selinux
#setenforce 0
在/etc/selinux/config 中,将SELINUX=enforcing改为SELINUX=disabled
同步时间
#ntpdate 202.120.2.101
=======================================================
三、安装mysql5.6
