1.启动/配置/编码等问题

安装包放在opt目录下

安装:rpm -ivh rpm 软件名

如果安装时,与某个软件 xxx冲突,则需要将冲突的软件卸载掉:

yum -y remove xxx

修改密码:

/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h localhost.localdomain password 'new-password'

验证安装是否成功:mysqladmin --version

[root@localhost opt]# mysqladmin --version
mysqladmin  Ver 8.42 Distrib 5.5.60, for Linux on x86_64

启动:service mysql start

关闭:service mysql stop

重启:service mysql restart

重启计算机:reboot

重启计算机后可能出现问题,大多数是没有启动服务。

启动服务,设置开机自启动:chkconfig mysql on

登录MySQL:

mysql -u -root -p

出现错误:

先停止MySQL服务:service mysqld stop

再启动:service mysql start

再登陆就ok了

很诡异,这是目前这次遇到的情况。

查看数据库安装目录: ps -ef|grep mysql

数据存放目录:datadir=/var/lib/mysql

pid文件目录:pid-file=/var/lib/mysql/localhost.localdomain.pid

核心目录:

安装目录:/var/lib/mysql

配置文件:/usr/share/mysql

命令目录:/usr/bin (mysqladmin,mysqldump 等命令)

启停脚本:/etc/init.d/mysql

MysQL配置文件:

my-huge.cnf 高端服务器 1-2G

my-large.cnf 中等规模

my-medium.cnf 一般

my-small.cnf 较小

但是,以上配置文件mysql默认不能识别,默认只能识别 /etc/my.cnf

采用my-huge.cnf:

执行命令:cp /usr/share/mysql/my-huge.cnf  /etc/my.cnf

注意:mysql5.5默认配置文件: /etc/my.cnf

mysql5.6默认配置文件: /etc/mysql-default.cnf

mysql字符编码:

登录mysql,模糊查询,执行:show variables like '%char%';

发现部分编码不是utf-8,需要统一设置为utf-8

设置编码:

执行命令:vi /etc/my.cnf

往下拉找到这个[mysql],添加:default-character-set=utf8

再找到[client]:

再找到[mysqld]:

character_set_server=utf8
character_set_client=utf8
collation_server=utf8_general_ci

重启mysql:service mysql restart

再登陆mysql,执行:show variables like '%char%';

注意:修改编码之后只对“之后”创建的数据库生效

同时发现:vi /etc/my.cnf 可以修改密码和默认端口,如下

此外:mysql清屏: ctrl+L  或者 system clear

2.MySQL分层/存储引擎

MySQL逻辑分层:连接层,服务层,引擎层,存储层。

InnoDB(默认):事务优先,使用行锁(一次锁一行数据),适合高并发操作

MyISAM:性能优先,使用表锁(一次锁一张表里的数据)

client端进行select,直接连接连接层,连接层调用服务层的接口,经过SQL优化器优化之后 ,传到引擎层进行选择引擎。

查询数据库引擎:

支持哪些引擎: show engines;

查询当前使用引擎:show variables like '%storage_engine%';

指定数据库对象的引擎:

create table tb(
id int(4) auto_increment,
name varchar(5),
dept varchar(5),
primary key(id)
)ENGINE=MyISAM AUTO_INCREMENT=1 default charset=utf8;

3.SQL解析过程/索引/B树

SQL优化

诱因:性能低、执行时间太长、等待时间太长、SQL语句欠佳(连接查询)、索引失效、服务器参数设置不合理(缓冲区、线程数)

  • SQL:

    • 编写过程:select  dinstinct.. from ..join .. on ..where ..group by .. having .. order by .. limit ..
    • 解析过程:from ..on ..join ..where ..group by ...having ..select  dinstinct .. order by..limit ..
  • SQL 优化,主要就是在优化索引
    • 索引:相当于书的目录,关键字为 index ,是帮助MySQL高效获取数据的数据结构,索引是数据结构(树:B树(MySQL默认)、哈希树)。

  • 索引优势:提高查询效率(降低IO使用率),降低CPU使用率(..order by age desc,因为B树索引本身就是一个排好序的结构,排序时可以直接使用)
  • 索引的弊端:
    • 本身很大,可以放在内存/硬盘(通常为硬盘)
    • 索引不是所有情况都适用:
      • 少量数据;
      • 频繁更新的字段;
      • 很少使用的字段;
    • 索引会降低增删改的效率
  • 3层B树可以存放上百万条数据
  • B树一般指的是B+树,B+树数据全部存放在叶节点中
  • B+树中查询任意的数据次数:n次(B+树的高度)

索引:

分类:

  • 单值索引:单列,比如age;一个表可以有多个单值索引,比如name,age
  • 唯一索引:不能重复,比如id。
  • 复合索引:多个列构成的索引(相当于书的二级目录)

创建索引:

  • 方式一:

create  索引类型  索引名  on  表(字段)

以前文创建的tb表为例子:

创建单值索引:create index dept_index on tb(dept);

创建唯一索引:create unique index name_index on tb(name);

复合索引:create index dept_name_index on tb(dept,name);

  • 方式二: alter  table  表名  索引类型  索引名(字段)

单值索引:alter table tb add index dept_index(dept);

创建唯一索引:alter table tb add unique index name_index(name);

复合索引:alter table tb add index dept_name_index(dept,name);

外此不需要commit,因为这些都是DDL语句,会自动提交

注意:

如果一个字段是primary key,则该字段默认就是主键索引

主键索引不能是null,唯一索引可以是null。

删除索引:drop index 索引名 on 表名;

drop index name_index on tb;

查询索引:

show index from 表名;

show index from 表名\G

4.SQL性能问题

  • 分析SQL的执行计划:explain ,可以模拟SQL优化器执行SQL语句,从而让开发人员知道自己编写的SQL执行状况;
  • MySQL查询优化器会干扰用户的优化

官网SQL优化介绍(MySQL5.7):https://dev.mysql.com/doc/refman/5.7/en/optimization.html

查询执行计划:explain + SQL语句

explain select *from tb;

id:编号

select_type:表

table : 表

type :类型

possible_keys : 预测用到的索引

key :实际使用的索引

key_len : 实际使用索引的长度

ref:表之间的作用

rows:通过索引查询到的数量

Extra:额外的信息

准备数据:

create table coures(
cid int(3),
cname varchar(10),
tid int(3)
);
create table teacher(
tid int(3),
tname varchar(20),
tcid int(3)
);
create table teacherCard(
tcid int(3),
tcdesc varchar(200)
);

分别插入数据: 

insert into coures values(1,'java',1);
insert into coures values(2,'html',1);
insert into coures values(3,'sql',2);
insert into coures values(4,'web',3);
insert into teacher values(1,'tz',1);
insert into teacher values(2,'tw',2);
insert into teacher values(3,'tl',3);
insert into teacherCard values(1,'tzdesc');
insert into teacherCard values(2,'twdesc');
insert into teacherCard values(3,'tldesc');

查询:课程编号为2或者教师证编号为3的老师信息:

先写出查询语句(三表关联):

select t.* from teacher t , coures c, teacherCard tc where t.tid = c.tid and t.tcid = tc.tcid and (c.cid = 2 or tc.tcid = 3);

加入explain,执行:

explain select t.* from teacher t , coures c, teacherCard tc where t.tid = c.tid and t.tcid = tc.tcid and (c.cid = 2 or tc.tcid = 3);

 id:id值相同,从上往下顺序执行,依次执行:teacher、teacherCard、coures表的查询,t3-tc3-c4

执行命令:select * from teacher;

 执行命令:select * from teacherCard;

执行命令:select * from coures;

给teacher表增加一些数据:insert into teacher values(4,'ta',4);

依次再增加数据:

insert into teacher values(5,'tb',5);

insert into teacher values(6,'tc',6);

commit;

再次执行:

explain select t.* from teacher t , coures c, teacherCard tc where t.tid = c.tid and t.tcid = tc.tcid and (c.cid = 2 or tc.tcid = 3);

查询效果得到:

查询顺序为:tc3--c4--t6

表的执行顺序,因数量的个数改变而改变的原因笛卡尔积

所以查询顺序变化的原因是,中间数据量越小越好。

结论:数据小的表,优先查询

结论验证,执行:

delete from coures where cid >2 ;
commit;

再次执行:

explain select t.* from teacher t , coures c, teacherCard tc where t.tid = c.tid and t.tcid = tc.tcid and (c.cid = 2 or tc.tcid = 3);

id值不同:则id值越大越优先查询。(本质:在嵌套子查询时,先查内层,再查外层)

例子,查询教授SQL课程的老师的描述(desc)

执行查询语句:

explain select tc.tcdesc from teacherCard tc, coures c , teacher t where c.tid = t.tid and t.tcid = tc.tcid and c.cname = 'sql' ;

 将以上多表查询,转为子查询形式:

explain select tc.tcdesc from teacherCard tc
where tc.tcid = (select t.tcid from teacher t where t.tid = (
select c.tid from coures c where c.cname = 'sql'));

子查询+多表:

explain select t.tname,tc.tcdesc from teacher t, teacherCard tc
where t.tcid = tc.tcid and t.tid = (select c.tid from coures c where cname = 'sql');

id值有相同,又有不同:id值越大越优先,id值相同,从上往下顺序执行。

select_type:

PRIMARY:包含子查询SQL中的主查询(最外层)

SUBQUERY:包含子查询SQL中的子查询(非最外层)

simple:简单查询(不包含子查询、union)

derived:衍生查询(使用到了临时表),触发条件为:

  • 在from子查询中只有一张表;

    • explain select cr.cname from (select *from coures where tid in (1,2)) cr;

  • 在from子查询中,如果有table1 union table2,则table1 就是 derived,table2就是union
    • explain select cr.cname from (select *from coures where tid = 1
      union select *from coures where tid = 2) cr;

UNION RESULT :告知开发人员,哪些表之间存在union查询。

未完待续……

CentOS7环境下MySQL踩坑记相关推荐

  1. centos7环境下MySQL安装教程

    Linux centos7环境下MySQL安装教程 作者:随缘相识-(志同道合) 字体:[增加 减小] 类型:转载 时间:2017-03-17 我要评论 这篇文章主要为大家详细介绍了Linux cen ...

  2. React-Native android在windows下的踩坑记

    坑很多,跳之前做好准备.没有VPN的同学请浏览完本文后慎行. 你需要先安装最新版本的node.js(我最后使用的是v4.1.2),前往官网下载>> 注:我win7已经安装过Visual S ...

  3. node-media-server win环境安装架测试 踩坑记

    01   因为老师的项目中需要很多流媒体模块的东西,接触到 Node-Media-Server 这个流媒体服务器,这个国人开发的组件,之前还有SRS也是的.记录一下问题和效果.   本子是win7,之 ...

  4. CentOS7环境下MySQL定时备份

    1.新建备份脚本 vi /home/mysqlbak/mysql_bak.sh填入以下内容: mysql_user="USER" #MySQL备份用户 mysql_password ...

  5. mysql linux centos7_MySQL在Linux centos7环境下安装教程详解(图)

    这篇文章主要为大家详细介绍了Linux centos7环境下MySQL安装教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 Linux centos7环境下安装MySQL步骤的详细介绍 安装My ...

  6. Spark踩坑记——数据库(Hbase+Mysql)转

    转自:http://www.cnblogs.com/xlturing/p/spark.html 前言 在使用Spark Streaming的过程中对于计算产生结果的进行持久化时,我们往往需要操作数据库 ...

  7. windos下 elasticksearch7.13安装踩坑记

    windos下 elasticksearch7.13安装踩坑记 一,环境配置 环境要求 java jdk16下载安装 elasticksearch7.13下载安装 遇到的问题 (待更新) 一,环境配置 ...

  8. centos7 mysql安装教程_centos7环境下MySQL安装教程

    Linux centos7环境下安装MySQL步骤的详细介绍 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执 ...

  9. linux centos7 mysql_Linux centos7环境下安装MySQL的步骤详解

    Linux centos7环境下安装MySQL的步骤详解 安装MySQL mysql 有两个跟windows不同的地方 1).my.ini 保存到/etc/my.ini 2).用户权限,单独用户执行 ...

最新文章

  1. 甲骨文预言机平台(1)业务流程
  2. 开源会议系统openmeetings安装
  3. 什么是G1垃圾回收算法
  4. Docker 精通之常用命令
  5. python群发邮件1000人-python读取excel群发邮件(一)
  6. 快手海外管理层人事动荡,两大市场负责人已离职 疑因业务发展不佳
  7. SAP License:SAP系统上线后的预收款处理
  8. [PyTorch] 记录一次PyTorch版本更新
  9. One Switch 让你的 Mac 也能拥有控制中心
  10. Luogu 3332 [ZJOI2013]K大数查询
  11. 分享如何恢复回收站删除文件的办法
  12. Android studio百度地图之定位到国外
  13. 一场先进技术与先锋企业碰撞的知识盛宴!弘玑Cyclone『超级自动化的数字内生力量』CXO私享会成功举办
  14. 苹果联合创始人Steve Wozniak:有点担心苹果的未来
  15. 获取商品数据 API(商品详情、商品主图)
  16. 计算机无法播放flash,Windows10系统电脑无法播放Falsh动画的解决方法
  17. qt android png透明,Qt处理照片实现白色背景转透明
  18. 优麒麟 配置java_Ubuntu Kylin 优麒麟 安装部署Pentaho
  19. sdwan不可替代cn2
  20. 简单了解条形码,二维码的生成

热门文章

  1. 三菱工控板底层源码_参赛-基于NuTiny-SDK-M451实现三菱PLC通讯板(原理图、PCB源文件、程序源码)...
  2. 为什么决战平安京显示服务器连接失败,决战!平安京总是显示无法连接网络
  3. 新来一00后,给我卷崩溃了..
  4. 最实用的Python基础讲解,带你轻松学完数据类型
  5. iOS Jenkins + fastlane自动打包,蒲公英上传
  6. java如何压缩解压图片_Java实现压缩文件与解压缩文件
  7. 网络安全进阶篇(十一章-5)APP渗透测试篇(上)
  8. ROS使用教程-关于rosparam
  9. 1.Web基础与HTTP协议
  10. ca证书 csr_ca证书csr crt cer