杭州的網(wǎng)站建設(shè)靜態(tài)網(wǎng)站開(kāi)發(fā)
MySQL數(shù)據(jù)庫(kù)---筆記5
- 一、鎖
- 1.1、介紹
- 1.2、全局鎖
- 1.2.1、全局鎖介紹
- 1.2.2、一致性數(shù)據(jù)備份
- 1.3、表級(jí)鎖
- 1.3.1、表鎖
- 1.3.2、元數(shù)據(jù)鎖(meta data lock , MDL)
- 1.3.3、意向鎖
- 1.4、行級(jí)鎖
- 1.4.1、介紹
- 1.4.2、行鎖
- 1.4.3、間隙鎖/臨建鎖
- 二、InnoDB引擎
- 2.1、邏輯存儲(chǔ)結(jié)構(gòu)
- 2.2、架構(gòu)
- 2.2.1、內(nèi)存架構(gòu)
- 2.2.2、磁盤結(jié)構(gòu)
- 2.2.3、后臺(tái)線程
- 2.3、事務(wù)原理
- 2.3.1、概述
- 2.3.2、redo log
- 2.3.3、undo log
- 2.4、MVCC
- 2.4.1、基本概念
- 2.4.2、隱式字段
- 2.4.3、undo log日志
- 2.4.4、readView
- 2.4.5、原理分析(RC級(jí)別)
- 2.4.6、原理分析(RR級(jí)別)
- 三、MySQL管理
- 3.1、系統(tǒng)數(shù)據(jù)庫(kù)介紹
- 3.2、常用工具
- 3.2.1、mysql
- 3.2.2、mysqladmin
- 3.2.3、mysqlbinlog
- 3.2.4、mysqlshow
- 3.2.5、mysqldump
- 3.2.6、mysqlimport/source
一、鎖
1.1、介紹
- 概述
鎖是計(jì)算機(jī)協(xié)調(diào)多個(gè)進(jìn)程或線程并發(fā)訪問(wèn)某一資源的機(jī)制。在數(shù)據(jù)庫(kù)中,除傳統(tǒng)的計(jì)算資源(CPU、RAM、I/O)的爭(zhēng)用以外,數(shù)據(jù)也是一種供許多用戶共享的資源。如何保證數(shù)據(jù)并發(fā)訪問(wèn)的一致性、有效性是所有數(shù)據(jù)庫(kù)必須解決的一個(gè)問(wèn)題,鎖沖突也是影響數(shù)據(jù)庫(kù)并發(fā)訪問(wèn)性能的一個(gè)重要因素。從這個(gè)角度來(lái)說(shuō),鎖對(duì)數(shù)據(jù)庫(kù)而言顯得尤其重要,也更加復(fù)雜。
- 分類
MySQL中的鎖,按照鎖的粒度分,分為以下三類:- 全局鎖: 鎖定數(shù)據(jù)庫(kù)中的所有表。
- 表級(jí)鎖: 每次操作鎖住整張表。
- 行級(jí)鎖: 每次操作鎖住對(duì)應(yīng)的行數(shù)據(jù)。
1.2、全局鎖
1.2.1、全局鎖介紹
- 介紹
全局鎖就是對(duì)整個(gè)數(shù)據(jù)庫(kù)實(shí)例加鎖,加鎖后整個(gè)實(shí)例就處于只讀狀態(tài),后續(xù)的DML的寫語(yǔ)句,DDL語(yǔ)句,已經(jīng)更新操作的事務(wù)提交語(yǔ)句都將被阻塞。
其典型的使用場(chǎng)景是做全庫(kù)的邏輯備份,對(duì)所有的表進(jìn)行鎖定,從而獲取一致性視圖,保證數(shù)據(jù)的完整性。
-
加入了全局鎖之后,只能讀,不能修改數(shù)據(jù)
-
加全局鎖
flush tables with read lock;
-
備份數(shù)據(jù)
mysqldump -h指定主機(jī)地址 -uroot -p密碼 需要備份的數(shù)據(jù)庫(kù) > 需要備份到的SQL文件;
-
解鎖
unlock tables;
1.2.2、一致性數(shù)據(jù)備份
- 特點(diǎn)
數(shù)據(jù)庫(kù)中加全局鎖,是一個(gè)比較重的操作,存在以下問(wèn)題:
- 如果在主庫(kù)上備份,那么在備份期間都不能執(zhí)行更新,業(yè)務(wù)基本上就得停擺。
- 如果在從庫(kù)上備份,那么在備份期間從庫(kù)不能執(zhí)行主庫(kù)同步過(guò)來(lái)的二進(jìn)制日志(binlog),會(huì)導(dǎo)致主從延遲。
在InnoDB引擎中,我們可以在備份時(shí)加上參數(shù)--single-transaction
參數(shù)來(lái)完成不加鎖的一致性數(shù)據(jù)備份。
mysqldump --single-transaction -uroot-p密碼 需要備份的數(shù)據(jù)庫(kù) > 需要備份到的SQL文件;
1.3、表級(jí)鎖
表級(jí)鎖,每次操作鎖住整張表。鎖定粒度大,發(fā)生鎖沖突的概率最高,并發(fā)度最低。應(yīng)用在MyISAM、InnoDB、BDB等存儲(chǔ)引擎中。
對(duì)于表級(jí)鎖,主要分為以下三類:
- 表鎖
- 元數(shù)據(jù)鎖( meta data lock,MDL)
- 意向鎖
1.3.1、表鎖
對(duì)于表鎖,分為兩類:
- 表共享讀鎖( read lock )
- 表獨(dú)占寫鎖( write lock )
語(yǔ)法:
- 加鎖:
lock tables 表名... read/write。
- 釋放鎖:
unlock tables/ 客戶端斷開(kāi)連接。
-
讀鎖
-
寫鎖
讀鎖不會(huì)阻塞其他客戶端的讀,但是會(huì)阻塞寫。寫鎖既會(huì)阻塞其他客戶端的讀,又會(huì)阻塞其他客戶端的寫。
1.3.2、元數(shù)據(jù)鎖(meta data lock , MDL)
MDL加鎖過(guò)程是系統(tǒng)自動(dòng)控制,無(wú)需顯式使用,在訪問(wèn)一張表的時(shí)候會(huì)自動(dòng)加上。MDL鎖主要作用是維護(hù)表元數(shù)據(jù)的數(shù)據(jù)一致性,在表上有活動(dòng)事務(wù)的時(shí)候,不可以對(duì)元數(shù)據(jù)進(jìn)行寫入操作。為了避免DML與DDL沖突,保證讀寫的正確性。
在MySQL5.5中引入了MDL,當(dāng)對(duì)一張表進(jìn)行增刪改查的時(shí)候,加MDL讀鎖(共享);當(dāng)對(duì)表結(jié)構(gòu)進(jìn)行變更操作的時(shí)候,加MDL寫鎖(排他)。
對(duì)應(yīng)SQL | 鎖類型 | 說(shuō)明 |
---|---|---|
lock tables xxx read / write | SHARED_READ_ONLY / SHARED_NO_READ_WRITE | |
select 、select … lock in share mode | SHARED_READ | 與SHARED_READ、SHARED_WRITE兼容,與EXCLUSIVE互斥 |
insert 、update、delete、select … for update | SHARED_WRITE | 與SHARED_READ、SHARED_WRITE兼容,與EXCLUSIVE互斥 |
alter table … | EXCLUSIVE | 與其他的MDL都互斥 |
查看元數(shù)據(jù)鎖:
select object type,object_ schema,object_ name,lock_type,lock_duration from performance schema.metadata_locks;
1.3.3、意向鎖
- 意向共享鎖(IS):由語(yǔ)句
select...lock in share mode
添加
與表鎖共享鎖(read)兼容,與表鎖排它鎖(write)互斥。 - 意向排他鎖(IX):由
insert、 update、delete.select ... for update
添加。
與表鎖共享鎖(read)及排它鎖(write)都互斥。意向鎖之間不會(huì)互斥。
select object_schema,object_name,index_name,lock_type,lock_mode,lock_data from performance_schema.data_locks;
1.4、行級(jí)鎖
1.4.1、介紹
行級(jí)鎖,每次操作鎖住對(duì)應(yīng)的行數(shù)據(jù)。鎖定粒度最小,發(fā)生鎖沖突的概率最低,并發(fā)度最高。應(yīng)用在InnoDB存儲(chǔ)引擎中。
InnoDB的數(shù)據(jù)是基于索引組織的,行鎖是通過(guò)對(duì)索引上的索引項(xiàng)加鎖來(lái)實(shí)現(xiàn)的,而不是對(duì)記錄加的鎖。對(duì)于行級(jí)鎖,主要分為以下三類:
- 行鎖(Record Lock)︰鎖定單個(gè)行記錄的鎖,防止其他事務(wù)對(duì)此行進(jìn)行update和delete。在RC、RR隔離級(jí)別下都支持。
- 間隙鎖(Gap Lock)∶鎖定索引記錄間隙(不含該記錄),確保索引記錄間隙不變,防止其他事務(wù)在這個(gè)間隙進(jìn)行insert,產(chǎn)生幻讀。在RRA隔離級(jí)別下都支持。
- 臨鍵鎖(Next-Key Lock)∶行鎖和間隙鎖組合,同時(shí)鎖住數(shù)據(jù),并鎖住數(shù)據(jù)前面的間隙Gap。在RR隔離級(jí)別下支持。
1.4.2、行鎖
lnnoDB實(shí)現(xiàn)了以下兩種類型的行鎖:
- 共享鎖(S)︰允許一個(gè)事務(wù)去讀一行,阻止其他事務(wù)獲得相同數(shù)據(jù)集的排它鎖。
- 排他鎖(X)∶允許獲取排他鎖的事務(wù)更新數(shù)據(jù),阻止其他事務(wù)獲得相同數(shù)據(jù)集的共享鎖和排他鎖。
S(共享鎖) | X(排他鎖) | |
---|---|---|
S(共享鎖) | 兼容 | 沖突 |
X(排他鎖) | 沖突 | 沖突 |
SQL | 行鎖類型 | 說(shuō)明 |
---|---|---|
INSERT … | 排他鎖 | 自動(dòng)加鎖 |
UPDATE… | 排他鎖 | 自動(dòng)加鎖 |
DELETE … | 排他鎖 | 自動(dòng)加鎖 |
SELECT(正常) | 不加任何鎖 | |
SELECT …LOCK IN SHARE MODE | 共享鎖 | 需要手動(dòng)在SELECT之后加LOCK IN SHARE MODE |
SELECT … FOR UPDATE | 排他鎖 | 需要手動(dòng)在SELECT之后加FOR UPDATE |
默認(rèn)情況下,InnoDB在REPEATABLE READ事務(wù)隔離級(jí)別運(yùn)行,InnoDB使用next-key
鎖進(jìn)行搜索和索引掃描,以防止幻讀。
- 針對(duì)唯一索引進(jìn)行檢索時(shí),對(duì)已存在的記錄進(jìn)行等值匹配時(shí),將會(huì)自動(dòng)優(yōu)化為行鎖。
- InnoDB的行鎖是針對(duì)于索引加的鎖,不通過(guò)索引條件檢索數(shù)據(jù),那么InnoDB將對(duì)表中的所有記錄加鎖,此時(shí)就會(huì)升級(jí)為表鎖。
可以通過(guò)以下SQL,查看意向鎖及行鎖的加鎖情況:
select object_schema,object_name,index_name,ock_type.lock mode,lock data from performance_schema.data_locks;
1.4.3、間隙鎖/臨建鎖
默認(rèn)情況下,InnoDB在 REPEATABLE READ事務(wù)隔離級(jí)別運(yùn)行,InnoDB使用next-key鎖進(jìn)行搜索和索引掃描,以防止幻讀。
- 索引上的等值查詢(唯一索引),給不存在的記錄加鎖時(shí),優(yōu)化為間隙鎖。
- 索引上的等值查詢(普通索引),向右遍歷時(shí)最后一個(gè)值不滿足查詢需求時(shí),next-key lock退化為間隙鎖。
- 索引上的范圍查詢(唯一索引)–會(huì)訪問(wèn)到不滿足條件的第一個(gè)值為止。
注意:間隙鎖唯一目的是防止其他事務(wù)插入間隙。間隙鎖可以共存,一個(gè)事務(wù)采用的間隙鎖不會(huì)阻止另一個(gè)事務(wù)在同一間隙上采用間隙鎖。
二、InnoDB引擎
2.1、邏輯存儲(chǔ)結(jié)構(gòu)
2.2、架構(gòu)
MySQL5.5版本開(kāi)始,默認(rèn)使用InnoDB存儲(chǔ)引擎,它擅長(zhǎng)事務(wù)處理,具有崩潰恢復(fù)特性,在日常開(kāi)發(fā)中使用非常廣泛。下面是/nnoDB架構(gòu)圖,左側(cè)為內(nèi)存結(jié)構(gòu),右側(cè)為磁盤結(jié)構(gòu)。
2.2.1、內(nèi)存架構(gòu)
- Buffer Pool 緩沖池
- Change Buffer 更改緩沖區(qū)
- 自適應(yīng)Hash
- 日志緩沖區(qū)
2.2.2、磁盤結(jié)構(gòu)
- 系統(tǒng)表空間 獨(dú)立表空間
- 通用表空間 撤銷表空間 臨時(shí)表空間
- 雙寫緩沖區(qū) 重做日志
2.2.3、后臺(tái)線程
- Master Thread
核心后臺(tái)線程,負(fù)責(zé)調(diào)度其他線程,還負(fù)責(zé)將緩沖池中的數(shù)據(jù)異步刷新到磁盤中,保持?jǐn)?shù)據(jù)的一致性,還包括臟頁(yè)的刷新、合并插入緩存、undo頁(yè)的回收。
- IO Thread
在InnoDB存儲(chǔ)引擎中大量使用了AIO來(lái)處理O請(qǐng)求,這樣可以極大地提高數(shù)據(jù)庫(kù)的性能,而IOThread主要負(fù)責(zé)這些lO請(qǐng)求的回調(diào)。
線程類型 | 默認(rèn)個(gè)數(shù) | 職責(zé) |
---|---|---|
Read thread | 4 | 負(fù)責(zé)讀操作 |
Write thread | 4 | 負(fù)責(zé)寫操作 |
Log thread | 1 | 負(fù)責(zé)將日志緩沖區(qū)刷新到磁盤 |
Insert buffer thread | 1 | 負(fù)責(zé)將寫緩沖區(qū)內(nèi)容刷新到磁盤 |
- Purge Thread
主要用于回收事務(wù)已經(jīng)提交了的undo log,在事務(wù)提交之后,undo log可能不用了,就用它來(lái)回收。
- Page Cleaner Thread
協(xié)助Master Thread 刷新臟頁(yè)到磁盤的線程,它可以減輕Master Thread的工作壓力,減少阻塞。
2.3、事務(wù)原理
2.3.1、概述
事務(wù)是一組操作的集合,它是一個(gè)不可分割的工作單位,事務(wù)會(huì)把所有的操作作為一個(gè)整體一起向系統(tǒng)提交或撤銷操作請(qǐng)求,即這些操作要么同時(shí)成功,要么同時(shí)失敗。
特性:
- 原子性(Atomicity):事務(wù)是不可分割的最小操作單元,要么全部成功,要么全部失敗。
- 一致性(Consistency):事務(wù)完成時(shí),必須使所有的數(shù)據(jù)都保持一致?tīng)顟B(tài)。
- 隔離性(lsolation)∶數(shù)據(jù)庫(kù)系統(tǒng)提供的隔離機(jī)制,保證事務(wù)在不受外部并發(fā)操作影響的獨(dú)立環(huán)境下運(yùn)行。
- 持久性(Durability):事務(wù)一旦提交或回滾,它對(duì)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的改變就是永久的。
2.3.2、redo log
重做日志,記錄的是事務(wù)提交時(shí)數(shù)據(jù)頁(yè)的物理修改,是用來(lái)實(shí)現(xiàn)事務(wù)的持久性。
該日志文件由兩部分組成:重做日志緩沖(redo log buffer)以及重做日志文件(redo log file) ,前者是在內(nèi)存中,后者在磁盤中。當(dāng)事務(wù)提交之后會(huì)把所有修改信息都存到該日志文件中,用于在刷新臟頁(yè)到磁盤,發(fā)生錯(cuò)誤時(shí),進(jìn)行數(shù)據(jù)恢復(fù)使用。
2.3.3、undo log
回滾日志,用于記錄數(shù)據(jù)被修改前的信息,作用包含兩個(gè):提供回滾和MVCC(多版本并發(fā)控制)。
undo log
和redo log
記錄物理日志不一樣,它是邏輯日志。可以認(rèn)為當(dāng)delete一條記錄時(shí),undo log中會(huì)記錄一條對(duì)應(yīng)的insert記錄,反之亦然,當(dāng)update一條記錄時(shí),它記錄一條對(duì)應(yīng)相反的update記錄。當(dāng)執(zhí)行rollback時(shí),就可以從undo log中的邏輯記錄讀取到相應(yīng)的內(nèi)容并進(jìn)行回滾。
Undo log銷毀: undo log在事務(wù)執(zhí)行時(shí)產(chǎn)生,事務(wù)提交時(shí),并不會(huì)立即刪除undo log,因?yàn)檫@些日志可能還用于MVCC。
Undo log存儲(chǔ): undo log采用段的方式進(jìn)行管理和記錄,存放在前面介紹的rollback segment 回滾段中,內(nèi)部包含1024個(gè)undo logsegment。
2.4、MVCC
2.4.1、基本概念
- 當(dāng)前讀
讀取的是記錄的最新版本,讀取時(shí)還要保證其他并發(fā)事務(wù)不能修改當(dāng)前記錄,會(huì)對(duì)讀取的記錄進(jìn)行加鎖。對(duì)于我們?nèi)粘5牟僮?#xff0c;如:select...lock in share mode
(共享鎖), select ... for update
、update
、insert
、delete
(排他鎖)都是一種當(dāng)前讀。
- 快照讀
簡(jiǎn)單的select(不加鎖)就是快照讀,快照讀,讀取的是記錄數(shù)據(jù)的可見(jiàn)版本,有可能是歷史數(shù)據(jù),不加鎖,是非阻塞讀。
-
Read Committed
:每次select,都生成一個(gè)快照讀。 -
Repeatable Read
:開(kāi)啟事務(wù)后第一個(gè)select語(yǔ)句才是快照讀的地方。 -
Serializable
:快照讀會(huì)退化為當(dāng)前讀。 -
MVCC
全稱Multi-Version Concurrency Control,多版本并發(fā)控制。指維護(hù)一個(gè)數(shù)據(jù)的多個(gè)版本,使得讀寫操作沒(méi)有沖突,快照讀為MysQL實(shí)現(xiàn)MVCC提供了一個(gè)非阻塞讀功能。MVCC的具體實(shí)現(xiàn),還需要依賴于數(shù)據(jù)庫(kù)記錄中的三個(gè)隱式字段、undo log日志、readView。
2.4.2、隱式字段
- 記錄中的隱式字段
隱藏字段 | 含義 |
---|---|
DB_TRX_ID | 最近修改事務(wù)ID,記錄插入這條記錄或最后一次修改該記錄的事務(wù)ID。 |
DB_ROLL_PTR | 回滾指針,指向這條記錄的上一個(gè)版本,用于配合undo log,指向上一個(gè)版本。 |
DB_ROW_ID | 隱藏主鍵,如果表結(jié)構(gòu)沒(méi)有指定主鍵,將會(huì)生成該隱藏字段。 |
2.4.3、undo log日志
回滾日志,在insert update.delete的時(shí)候產(chǎn)生的便于數(shù)據(jù)回滾的日志。
當(dāng)insert的時(shí)候,產(chǎn)生的undo log日志只在回滾時(shí)需要,在事務(wù)提交后,可被立即刪除。
而update、delete的時(shí)候,產(chǎn)生的undo log日志不僅在回滾時(shí)需要,在快照讀時(shí)也需要,不會(huì)立即被刪除。
- undo log 版本鏈
不同事務(wù)或相同事務(wù)對(duì)同一條記錄進(jìn)行修改,會(huì)導(dǎo)致該記錄的undolog生成一條記錄版本鏈表,鏈表的頭部是最新的舊記錄,鏈表尾部是最早的舊記錄。
2.4.4、readView
ReadView(讀視圖)是 快照讀 SQL執(zhí)行時(shí)MVCC提取數(shù)據(jù)的依據(jù),記錄并維護(hù)系統(tǒng)當(dāng)前活躍的事務(wù)(未提交的) id。
ReadView中包含了四個(gè)核心字段:
字段 | 含義 |
---|---|
m_ids | 當(dāng)前活躍的事務(wù)ID集合 |
min_trx_id | 最小活躍事務(wù)ID |
max_trx_id | 預(yù)分配事務(wù)ID,當(dāng)前最大事務(wù)ID+1(因?yàn)槭聞?wù)ID是自增的) |
creator_trx_id | ReadView創(chuàng)建者的事務(wù)ID |
不同的隔離級(jí)別,生成ReadView的時(shí)機(jī)體不同:
- READ COMMITTED∶在事務(wù)中每一次執(zhí)行快照讀時(shí)生成ReadView。
- REPEATABLE READ:僅在事務(wù)中第一次執(zhí)行快照讀時(shí)生成ReadView,后續(xù)復(fù)用該ReadView。
2.4.5、原理分析(RC級(jí)別)
RC隔離級(jí)別下,在事務(wù)中每一次執(zhí)行快照讀時(shí)生成ReadView。
2.4.6、原理分析(RR級(jí)別)
- RR隔離級(jí)別下,僅在事務(wù)中第一次執(zhí)行快照讀時(shí)生成ReadView,后續(xù)復(fù)用該ReadView。
三、MySQL管理
3.1、系統(tǒng)數(shù)據(jù)庫(kù)介紹
Mysql數(shù)據(jù)庫(kù)安裝完成后,自帶了一下四個(gè)數(shù)據(jù)庫(kù),具體作用如下:
數(shù)據(jù)庫(kù) | 含義 |
---|---|
mysql | 存儲(chǔ)MySQL服務(wù)器正常運(yùn)行所需要的各種信息(時(shí)區(qū)、主從、用戶、權(quán)限等) |
information_schema | 提供了訪問(wèn)數(shù)據(jù)庫(kù)元數(shù)據(jù)的各種表和視圖,包含數(shù)據(jù)庫(kù)、表、字段類型及訪問(wèn)權(quán)限等 |
performance_schema | 為MySQL服務(wù)器運(yùn)行時(shí)狀態(tài)提供了一個(gè)底層監(jiān)控功能,主要用于收集數(shù)據(jù)庫(kù)服務(wù)器性能參數(shù) |
sys | 包含了一系列方便DBA和開(kāi)發(fā)人員利用performance_schema性能數(shù)據(jù)庫(kù)進(jìn)行性能調(diào)優(yōu)和診斷的視圖 |
3.2、常用工具
3.2.1、mysql
該mysql不是指mysql服務(wù),而是指mysql的客戶端工具。
語(yǔ)法:mysql [options] [database]
選項(xiàng):-U, --user=name #指定用戶名-p,--password[=name] #指定密碼-h, --host=name #指定服務(wù)器IP或域名-P, --port=port #指定連接端口-e,--execute=name #執(zhí)行SQL語(yǔ)句并退出
-e選項(xiàng)可以在Mysql客戶端執(zhí)行SQL語(yǔ)句,而不用連接到MySQL數(shù)據(jù)庫(kù)再執(zhí)行,對(duì)于一些批處理腳本,這種方式尤其方便。
示例:mysql-uroot -p123456 db01 -e "select * from stu";
3.2.2、mysqladmin
mysqladmin是一個(gè)執(zhí)行管理操作的客戶端程序。可以用它來(lái)檢查服務(wù)器的配置和當(dāng)前狀態(tài)
創(chuàng)建并刪除數(shù)據(jù)庫(kù)等。
指令
mysqladmin --help
3.2.3、mysqlbinlog
由于服務(wù)器生成的二進(jìn)制日志文件以二進(jìn)制格式保存,所以如果想要檢查這些文本的文本格式,就會(huì)使用到mysqlbinlog日志管理工具。
語(yǔ)法:mysqlbinlog [options] log-files1 log-files2 ...
選項(xiàng):-d, --database=name 指定數(shù)據(jù)庫(kù)名稱,只列出指定的數(shù)據(jù)庫(kù)相關(guān)操作。-O, --offset=# 忽略掉日志中的前n行命令。-r, --result-file=name 將輸出的文本格式日志輸出到指定文件。-s, --short-form 顯示簡(jiǎn)單格式,省略掉一些信息。--start-datatime=date1 --stop-datetime=date2 指定日期間隔內(nèi)的所有日志。--start-position=pos1 --stop-position=pos2 指定位置間隔內(nèi)的所有日志。
3.2.4、mysqlshow
mysqlshow客戶端對(duì)象查找工具,用來(lái)很快地查找存在哪些數(shù)據(jù)庫(kù)、數(shù)據(jù)庫(kù)中的表、表中的列或者索引。
語(yǔ)法:mysqlshow [options] [db_name [table_name [col_name]
選項(xiàng):--count 顯示數(shù)據(jù)庫(kù)及表的統(tǒng)計(jì)信息(數(shù)據(jù)庫(kù),表均可以不指定)-i 顯示指定數(shù)據(jù)庫(kù)或者指定表的狀態(tài)信息
示例:#查詢每個(gè)數(shù)據(jù)庫(kù)的表的數(shù)量及表中記錄的數(shù)量mysqlshow-uroot-p2143 --count#查詢test庫(kù)中每個(gè)表中的字段書,及行數(shù)mysqlshow-uroot-p2143 test --count#!查詢test庫(kù)中book表的詳細(xì)情況mysqlshow-uroot-p2143 test book --count
3.2.5、mysqldump
mysqldump客戶端工具用來(lái)備份數(shù)據(jù)庫(kù)或在不同數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)遷移。備份內(nèi)容包含創(chuàng)建表,及插入表的SQL語(yǔ)句。
語(yǔ)法:mysqldump [options] db_name [tables]mysqldump [options] --database/-B db1 [db2 db3..]mysqldump [options] --all-databases/-A
連接選項(xiàng):-u, --USer=name 指定用戶名-p,--password[=name] 指定密碼-h, --host=name 指定服務(wù)器ip或域名-P, --port=# 指定連接端口
輸出選項(xiàng):--add-drop-database 在每個(gè)數(shù)據(jù)庫(kù)創(chuàng)建語(yǔ)句前加上drop database語(yǔ)句--add-drop-table 在每個(gè)表創(chuàng)建語(yǔ)句前加上 drop table語(yǔ)句,默認(rèn)開(kāi)啟;不開(kāi)啟(--skip-add-drop-table)-n, --no-create-db 不包含數(shù)據(jù)庫(kù)的創(chuàng)建語(yǔ)句-t, --no-create-info 不包含數(shù)據(jù)表的創(chuàng)建語(yǔ)句-d --no-data 不包含數(shù)據(jù)-T, --tab=name 自動(dòng)生成兩個(gè)文件:一個(gè).sql文件,創(chuàng)建表結(jié)構(gòu)的語(yǔ)句;一個(gè).txt文件,數(shù)據(jù)文件
- 使用-T指令需要生成到其信任的路徑下
3.2.6、mysqlimport/source
mysqlimport是客戶端數(shù)據(jù)導(dǎo)入工具,用來(lái)導(dǎo)入mysqldump加-T參數(shù)后導(dǎo)出的文本文件。
- 需要在其信任的路徑下進(jìn)行導(dǎo)入
語(yǔ)法:mysqlimport [options] db_name textfile1 [textfile2...]
示例:mysqlimport-uroot-p2143 test /tmp/city.bxt
如果需要導(dǎo)入sql文件,可以使用mysql中的source指令:
語(yǔ)法:source /root/xooox.sql