日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

CentOS7环境下MySQL踩坑记

發布時間:2024/3/24 数据库 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CentOS7环境下MySQL踩坑记 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

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踩坑记的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产av国片偷人妻麻豆 | 免费在线性爱视频 | 人妻少妇被猛烈进入中文字幕 | 69视频免费 | 最黄一级片 | 老司机在线精品视频 | 日日操天天操夜夜操 | 欧美久久久久久久久 | 国产精品久久久久久免费播放 | 欧美成人精品在线 | 在线天堂网 | 动漫美女视频 | 国产免费一区二区三区在线播放 | 波岛野结衣 | 亚洲尤物视频 | 亚洲图片一区二区三区 | 在线成人看片 | 国产欧美精品一区二区三区 | av有码在线 | 少妇又色又紧又大爽又刺激 | 福利小视频 | 在线色导航 | 国产a v一区二区三区 | 亚洲国产免费视频 | 国产xxxxx在线观看 | fee性满足he牲bbw| 国产极品网站 | 国产福利视频一区 | 人人搞人人插 | 免费久久 | 欧美一及片 | 爱爱激情网 | 五月婷婷开心 | 欧美超碰在线观看 | 久久免费手机视频 | 亚洲特级片| 中文字幕日韩精品一区 | 97久久精品 | 91插插插插 | 亚洲熟女乱色综合亚洲av | 欧美日一区二区三区 | 免费a在线 | 乖疼润滑双性初h | 久久高潮视频 | 黄色你懂的 | 午夜激情网站 | 999国产精品视频 | 精品国产一区二区在线观看 | 就是色 | 深夜福利电影 | 中文字幕亚洲日本 | 伊人天堂在线 | av不卡免费| 在线中文字幕网站 | 色94色欧美| 国产无遮挡又黄又爽 | 日批视频在线 | 长篇乱肉合集乱500小说日本 | 天堂色综合 | 欧美日韩99 | 亚洲成人18| 高清av一区二区三区 | www.蜜臀| 爱情岛论坛亚洲品质自拍视频 | 四季av综合网站 | 成年在线观看视频 | 99热超碰在线 | 亚洲v欧美v | 中文字幕av在线免费观看 | 超碰av免费 | 色欧美视频 | 仙踪林av | 91精品国产乱码久久久久久久久 | 亚洲欧美日韩精品久久亚洲区 | 波多野结衣在线免费视频 | 狠狠综合一区 | 日韩诱惑| 午夜精品视频在线观看 | 青娱乐国产在线视频 | 亚洲欧美国产另类 | 日韩av一级片 | www.久热| 91在线免费看 | 亚洲乱码一区二区三区在线观看 | 老司机午夜福利视频 | 国产手机在线播放 | 欧美成人精品一区二区 | 黑名单上的人全集免费观看 | 精品动漫一区二区三区在线观看 | 51成人做爰www免费看网站 | 成人黄色免费网址 | 老熟妇仑乱一区二区视频 | 潘金莲一级淫片免费放动漫 | 中文字幕777 | 99久久综合 | 亚洲精品少妇久久久久久 | 嫩模啪啪| 日韩欧美色| 另类捆绑调教少妇 |