一:MySQL 與其他數(shù)據(jù)庫(kù)比較
創(chuàng)新互聯(lián)是一家專業(yè)提供阿爾山企業(yè)網(wǎng)站建設(shè),專注與成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、H5建站、小程序制作等業(yè)務(wù)。10年已為阿爾山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
1)功能比較
作為一個(gè)成熟的數(shù)據(jù)庫(kù)系統(tǒng)管理系統(tǒng),現(xiàn)在已經(jīng)具備通用數(shù)據(jù)庫(kù)管理系統(tǒng)的相關(guān)功能
2)易用性比較
對(duì)于普通用戶操作難度相對(duì)簡(jiǎn)單易用原則,從安裝方面來說,MySQL安裝包僅僅只有100MB左右,安裝難易程度要比Oracl,數(shù)據(jù)庫(kù)簡(jiǎn)單很多,不論是通過已經(jīng)編譯好的二進(jìn)制分發(fā)包還是源碼編譯安裝,都比較簡(jiǎn)單
3)性能比較
MySQL非常優(yōu)異表現(xiàn),而且其他商用的通用數(shù)據(jù)庫(kù)系統(tǒng)中,只有Oracle數(shù)據(jù)庫(kù)能相提并論。
4可靠性)MySQL數(shù)據(jù)庫(kù)發(fā)展過程三個(gè)原則, 簡(jiǎn)單,高效,可靠。
二:MySQL主要場(chǎng)景
1)web網(wǎng)站系統(tǒng)
MySQ;是開放源代碼,可以免費(fèi)使用
2)日志記錄系統(tǒng)
MySQL數(shù)據(jù)庫(kù)插入和查詢都非常高效,使用MyISAM存儲(chǔ)時(shí)候 兩者可以互不鎖定,達(dá)到很高效的并發(fā)能力,例如,登陸日志,操作日志,都非常應(yīng)用場(chǎng)景。
3)數(shù)據(jù)倉(cāng)庫(kù)系統(tǒng)
隨著數(shù)據(jù)量增長(zhǎng),需要空間越來越大,使數(shù)據(jù)統(tǒng)計(jì)分析變得越來越低,解決思路
采用高性能主機(jī)提高運(yùn)算,用高端存儲(chǔ)設(shè)備提高I\O性能,2就是通過數(shù)據(jù)復(fù)制多臺(tái)使用大容量硬盤上以提高性能運(yùn)算能力,但是存儲(chǔ)空間有一定限制,3可以通過水平拆分來存放數(shù)據(jù),MySQL都有較大優(yōu)勢(shì),通過簡(jiǎn)單復(fù)制功能,可以將數(shù)據(jù)從一臺(tái)主機(jī)復(fù)制到另外一臺(tái)主機(jī)、
三:物理文件組成
日志文件:錯(cuò)誤日志 查詢?nèi)罩?慢查詢?nèi)罩?事物日志
日志記錄這mysql數(shù)據(jù)庫(kù)運(yùn)行期間發(fā)生變化,相當(dāng)于記錄mysql數(shù)據(jù)庫(kù)連接客戶的連接狀況
SQL語句執(zhí)行情況和錯(cuò)誤信息等,當(dāng)數(shù)據(jù)意外損壞時(shí),可以通過錯(cuò)誤日志看出原因,并且日志進(jìn)行數(shù)據(jù)恢復(fù)。
錯(cuò)誤日志:在mysql中默認(rèn)是開啟的,錯(cuò)誤日志存儲(chǔ)在mysql數(shù)據(jù)庫(kù)目錄中
錯(cuò)誤日志信息可以自己進(jìn)行配置,錯(cuò)誤日志可以通過log-error和存儲(chǔ)位置log-warninge定義
是否將警示信息定義至錯(cuò)誤日志中,
服務(wù)器運(yùn)行過程錯(cuò)誤信息,事件調(diào)度器運(yùn)行一個(gè)事件產(chǎn)生,在從服務(wù)器啟動(dòng)服務(wù)器進(jìn)程產(chǎn)生的信息。
因此mysql提供兩組命令,分別查看系統(tǒng)設(shè)置和運(yùn)行狀態(tài)。
1、查看系統(tǒng)設(shè)置:
SHOW [GLOBAL | SESSION] VARIABLES [like_or_where]
SHOW VARIABLES:shows the values of MySQL system variables.
2、運(yùn)行狀態(tài):
SHOW [GLOBAL | SESSION] STATUS [like_or_where]
SHOW STATUS:provides server status information.
如何修改系統(tǒng)配置
方法1:配置文件設(shè)置my.cnf
如:binlog_cache_size = 1M
方法2:set globalbinlog_cache_size = 1048576;
使用set 將安全級(jí)別改為2
3:查看mysql版本
Mysql -V mysql> status; select version ();
4錯(cuò)誤日志狀態(tài)
注 log_error定義錯(cuò)誤文件路徑
Log__error_verbosity 安全級(jí)別
查看錯(cuò)誤日志
Tail /usr/local/mysql/data/mysqld.err
二:刪除錯(cuò)誤日志
數(shù)據(jù)庫(kù)管理員可以刪除很久以前的錯(cuò)誤日志,為保證服務(wù)器硬盤空間,可以使用、mysqladmin -u root flush-logs FLUSH LOGS開啟新的錯(cuò)誤日志
二進(jìn)制日志
主要用于記錄修改數(shù)據(jù)或有可能引起數(shù)據(jù)改變的mysql語句,并且記錄語句發(fā)生時(shí)間,執(zhí)行時(shí)長(zhǎng),操作數(shù)據(jù)等等。一般體積上限為1G
首先看到二進(jìn)制是關(guān)閉的OFF 需要在vim /etc/my.conf進(jìn)行配置
Bin_log=/usr/local/mysql/data/log_bin 開啟
一般設(shè)置為512或者1個(gè)G達(dá)到上限時(shí)mysql重新創(chuàng)建一個(gè)日志開始記錄
為保證mysql安全 不會(huì)將同一個(gè)事物分開記錄倆個(gè)binlog中
事務(wù)日志
事物日志表將一個(gè)事物任務(wù)提交,對(duì)包含在事物中的多條語句要么執(zhí)行,要么全部不執(zhí)行。
非事物表則不支持此操作,處理中如果遇到錯(cuò)誤,在錯(cuò)誤前語句執(zhí)行成功,之后則執(zhí)行不成功
指定二進(jìn)制日志類型
Mysql復(fù)制主要有三種方式 基于SQL語句復(fù)制 混合模式復(fù)制 基于行復(fù)制
三 通過編輯my.conf中l(wèi)og-bin選擇開啟二進(jìn)制日志
其中 DIR參數(shù)指定二進(jìn)制文件存儲(chǔ)路徑filename參數(shù)指定二級(jí)制文件文件名,形式為filename.number形式為000001. 000002等 每次重啟mysql服務(wù)或運(yùn)行flush logs;都會(huì)生成一個(gè)新的二進(jìn)制文件
查看二進(jìn)制文件信息
查看二進(jìn)制日志信息的命令:
語法格式:SHOW BINLOG EVENTS[IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count]
#查看所有的二進(jìn)制信息
mysql> show binlog events\G;
#查看指定日志的二進(jìn)制信息
mysql> show binlog events in 'mysql-bin.000013'\G;
刪除二進(jìn)制日志信息
長(zhǎng)時(shí)間不清理二進(jìn)制文件,影響磁盤空間,刪除之后可能導(dǎo)致數(shù)據(jù)庫(kù)奔潰無法恢復(fù),所以刪除二進(jìn)制首先和數(shù)據(jù)庫(kù)備份
語法形式:
mysql> PURGE { BINARY | MASTER } LOGS {TO 'log_name' | BEFORE datetime_expr }
其中TO 'log_name'表示把這個(gè)文件之前的其他文件都刪除掉,也可使用BEFORE datetime_expr指定把哪個(gè)時(shí)間之前的二進(jìn)制文件刪除了。
也可以指定時(shí)間來刪除二進(jìn)制日志
命令行下查看二進(jìn)制日志:
由于無法使用cat等方式直接打開并查看二進(jìn)制日志;所以必須使用mysqlbinlog命令。但是當(dāng)正在執(zhí)行mysql讀寫操作時(shí)建議不要使用此打開正在使用的二進(jìn)制日志文件
刪除所以二進(jìn)制日志
3 事物日志
可以幫助提高事務(wù)的效率。使用事務(wù)日志,存儲(chǔ)引擎在修改表的數(shù)據(jù)時(shí)只需要修改其內(nèi)存拷貝,再把修改行為記錄到持久在硬盤上的事務(wù)日志中,而不用每次都將修改的數(shù)據(jù)本身持久到磁盤。mysql會(huì)默認(rèn)提供多種存儲(chǔ)引擎,你可以通過下面的查看:
查看你的mysql現(xiàn)在已提供什么存儲(chǔ)引擎:
mysql> show engines;
create table庫(kù)名.表名 engine = innodb;
這樣就可以將表的引擎變更為innodb引擎了。
也可以在創(chuàng)建表之后通過下面語句來變更:
alter table庫(kù)名.表名engine =innodb;
在事務(wù)提交時(shí)innodb是否同步日志從緩沖區(qū)到文件中,當(dāng)這個(gè)值為1(默認(rèn)值)之時(shí),在每個(gè)事務(wù)提交時(shí),日志緩沖被寫到日志文件,對(duì)日志文件做到磁盤操作的刷新,性能會(huì)很差造成大量的磁盤I/O但這種方式最安全
刷寫的概念
設(shè)為1當(dāng)然是最安全的,但性能頁(yè)是最差的(相對(duì)其他兩個(gè)參數(shù)而言,但不是不能接受)。如果對(duì)數(shù)據(jù)一致性和完整性要求不高,完全可以設(shè)為2,如果只最求性能,例如高并發(fā)寫的日志服務(wù)器,設(shè)為0來獲得更高性能
慢查詢?nèi)罩?/p>
記錄了語句執(zhí)行的時(shí)刻,執(zhí)行所消耗的時(shí)間,執(zhí)行用戶,連接主機(jī)等相關(guān)信息。
慢查詢?nèi)罩镜淖饔茫?/p>
慢查詢?nèi)罩臼怯脕碛涗泩?zhí)行時(shí)間超過指定時(shí)間的查詢語句。通過慢查詢?nèi)罩荆梢圆檎页瞿男┎樵冋Z句的執(zhí)行效率很低,以便進(jìn)行優(yōu)化。一般建議開啟,它對(duì)服務(wù)器性能的影響微乎其微,但是可以記錄mysql服務(wù)器上執(zhí)行了很長(zhǎng)時(shí)間的查詢語句。
啟動(dòng)和設(shè)置查詢?nèi)罩?/p>
slow_query_log:off關(guān)閉狀態(tài) on開啟狀態(tài)
slow_query_log_file 慢查詢?nèi)罩敬娣诺攸c(diǎn)
long_query_time選項(xiàng)來設(shè)置一個(gè)時(shí)間值,時(shí)間以秒為單位,可以精確到微秒。如果查詢時(shí)間超過了這個(gè)時(shí)間值(默認(rèn)為10秒),這個(gè)查詢語句將被記錄到慢查詢?nèi)罩局? 設(shè)置為0的話表示記錄所有的查詢。
如果不指定存儲(chǔ)路徑,慢查詢?nèi)罩灸J(rèn)存儲(chǔ)到mysql數(shù)據(jù)庫(kù)的數(shù)據(jù)文件下,如果不指定文件名,默認(rèn)文件名為hostname-slow.log
修改my.cnf文件:
方法2:通過登錄mysql服務(wù)器直接定義,方式如下:
mysql>set global slow_query_log=1; #開啟慢查詢?nèi)罩?/p>
Query OK, 0 rowsaffected (0.35 sec)
mysql>set session long_query_time=0.0001; #更改時(shí)間(當(dāng)前session中,退出則重置)
Query OK, 0 rowsaffected (0.00 sec)
mysql>set global long_query_time=0.0001; #更改時(shí)間(全局中,重啟服務(wù)則重置)
mysql> SHOW VARIABLES LIKE 'long%'; #查詢定義時(shí)間
查看慢查詢?nèi)罩?/p>
mysql> use mysql
mysql> selectuser,host from user where user="root";
3)數(shù)據(jù)文據(jù)
在MySQL中每一個(gè)數(shù)據(jù)庫(kù)都會(huì)在定義好(或者默認(rèn))的數(shù)據(jù)目錄下存在一個(gè)以數(shù)據(jù)庫(kù)名字命名的文件夾,用來存放該數(shù)據(jù)庫(kù)中各種表數(shù)據(jù)文件。
mysql> show create table 表名;
create table庫(kù)名.表名 engine = innodb; 這樣就可以將表的引擎變更為innodb引擎了。
登錄mysql,創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)如testdb,并在數(shù)據(jù)庫(kù)中創(chuàng)建一個(gè)表
以myisam存儲(chǔ)引擎創(chuàng)建一個(gè)測(cè)試表tb2
.frm”文件
與表相關(guān)的元數(shù)據(jù)(meta)信息都存放在“.frm”文件中,包括表結(jié)構(gòu)的定義信息等。不論是什么存儲(chǔ)引擎(MySQL常用的兩個(gè)存儲(chǔ)引擎是MyISAM和InnoDB),每一個(gè)表都會(huì)有一個(gè)以表名命名的“.frm”文件。
MyISAM數(shù)據(jù)庫(kù)表文件:.MYD文件:表數(shù)據(jù)文件;.MYI文件:索引文件
MYD”文件
“.MYD”文件是MyISAM存儲(chǔ)引擎專用,存放MyISAM表的數(shù)據(jù)。每一個(gè)MyISAM表都會(huì)有一個(gè)“.MYD”文件與之對(duì)應(yīng),同樣存放于所屬數(shù)據(jù)庫(kù)的文件夾下,和“.frm”文件在一起。
MYI”文件
“.MYI”文件也是專屬于MyISAM存儲(chǔ)引擎的,主要存放MyISAM表的索引相關(guān)信息。
InnoDB采用表空間(tablespace)來管理數(shù)據(jù),存儲(chǔ)表數(shù)據(jù)和索引。
.ibd文件:?jiǎn)伪肀砜臻g文件,每個(gè)表使用一個(gè)表空間文件(file per table),存放用戶數(shù)據(jù)庫(kù)表數(shù)據(jù)和索引。
.ibd”文件和ibdata文件
這兩種文件都是存放Innodb數(shù)據(jù)的文件,之所以有兩種文件來存放Innodb的數(shù)據(jù)(包括索引),是因?yàn)镮nnodb的數(shù)據(jù)存儲(chǔ)方式能夠通過配置來決定是使用共享表空間存放存儲(chǔ)數(shù)據(jù),還是獨(dú)享表空間存放存儲(chǔ)數(shù)據(jù)。
共享表空間以及獨(dú)占表空間都是針對(duì)數(shù)據(jù)的存儲(chǔ)方式而言的。
共享表空間: 某一個(gè)數(shù)據(jù)庫(kù)的所有的表數(shù)據(jù),索引文件全部放在一個(gè)文件中。
獨(dú)占表空間: 每一個(gè)表都將會(huì)生成以獨(dú)立的文件方式來進(jìn)行存儲(chǔ),每一個(gè)表都有一個(gè).frm表描述文件,還有一個(gè).ibd文件。 其中這個(gè)文件包括了單獨(dú)一個(gè)表的數(shù)據(jù)內(nèi)容以及索引內(nèi)容。
所有的數(shù)據(jù)和索引存放到一個(gè)文件中,多個(gè)表及索引在表空間中混合存儲(chǔ),這樣對(duì)于一個(gè)表做了大量刪除操作后表空間中將會(huì)有大量的空隙,特別是對(duì)于統(tǒng)計(jì)分析,日值系統(tǒng)這類應(yīng)用最不適合用共享表空間。
獨(dú)立表空間:
優(yōu)點(diǎn):
1.每個(gè)表都有自已獨(dú)立的表空間。
2.每個(gè)表的數(shù)據(jù)和索引都會(huì)存在自已的表空間中。
3.可以實(shí)現(xiàn)單表在不同的數(shù)據(jù)庫(kù)中移動(dòng)。
4.空間可以回收
查看當(dāng)前數(shù)據(jù)庫(kù)的表空間管理類型
ON代表獨(dú)立表空間管理,OFF代表共享表空間管理
Innodb共享表空間配置:
768/64=12
innodb_data_home_dir = "/path/" 數(shù)據(jù)庫(kù)文件所存放的目錄
innodb_log_group_home_dir = "/path/" 日志存放目錄
innodb_data_file_path=ibdata1:10M:autoextend 設(shè)置一個(gè)可擴(kuò)展大小的尺寸為10MB的數(shù)據(jù)文件(共享數(shù)據(jù)文件),名為ibdata1。沒有給出文件的位置,所以默認(rèn)的是在MySQL的數(shù)據(jù)目錄內(nèi)。
innodb_file_per_table=1|0 //1為使用獨(dú)占表空間,0 為使用共享表空間
在/etc/my.cnf文件中設(shè)置6400頁(yè)而當(dāng)前ibdata1為768頁(yè)
需要計(jì)算768/64=12
啟動(dòng)mysql,成功!
計(jì)算公式:64pages相當(dāng)于1M,1page是16KB
調(diào)用存儲(chǔ)過程
查看表中行數(shù):
對(duì)INNODB,直接用命令show table status查看某個(gè)表的表空間占用情況
MySQL數(shù)據(jù)庫(kù)中每個(gè)表占用的空間、表記錄的行數(shù)的話,可以打開MySQL的information_schema數(shù)據(jù)庫(kù)。在該庫(kù)中有一個(gè)TABLES表,這個(gè)表主要字段分別是:
TABLE_SCHEMA : 數(shù)據(jù)庫(kù)名
TABLE_NAME:表名
ENGINE:所使用的存儲(chǔ)引擎
TABLE_ROWS:記錄數(shù)
DATA_LENGTH:數(shù)據(jù)大小
INDEX_LENGTH:索引大小
master.info文件
包括Master的主機(jī)地址,連接用戶,連接密碼,連接端口,當(dāng)前日志位置,已經(jīng)讀取到的日志位置等信息。
elay log和relay log index
mysql-relay-bin.xxxxxn文件用于存放Slave端的I/O線程從Master端所讀取到的Binary Log信息,然后由Slave端的SQL線程從該relay log中讀取并解析相應(yīng)的日志信息,轉(zhuǎn)化成Master所執(zhí)行的SQL語句,然后在Slave端應(yīng)用。
mysql-relay-bin.index文件的功能類似于mysql-bin.index,同樣是記錄日志的存放位置的絕對(duì)路徑,只不過他所記錄的不是Binary Log,而是Relay Log。
3)relay-log.info文件:
類似于master.info,它存放通過Slave的I/O線程寫入到本地的relay log的相關(guān)信
息。供Slave端的SQL線程以及某些管理操作隨時(shí)能夠獲取當(dāng)前復(fù)制信息
socket文件也是在Unix/Linux環(huán)境下才有的,用戶在Unix/Linux環(huán)境下客戶端連接可以不通過TCP/IP網(wǎng)絡(luò)而直接使用Unix Socket來連接MySQL。
mysql有兩種連接方式,常用的一般是tcp
mysql –h mysql主機(jī)ip -uroot -pxxx
mysql -S /path /mysql.sock
文章名稱:mysql物理文件組成
網(wǎng)頁(yè)路徑:http://jinyejixie.com/article28/iishjp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、網(wǎng)站策劃、微信公眾號(hào)、小程序開發(fā)、外貿(mào)建站、App設(shè)計(jì)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)