Mysql資料庫的使用總結之Innodb簡介 一

2021-09-07 07:57:03 字數 4585 閱讀 7069

最近在對開發的軟體的伺服器部分製作安裝包,但伺服器部分需要有mysql資料庫的支援。因此,採用免安裝版的mysql策略:將mysql資料庫需要的檔案在安裝程式中進行設定和打包即可。但也遇到了很多問題,下面分三節進行總結。

由於我們採用的是mysql中的innodb儲存引擎,故在此只對innodb作一些介紹,詳細內容可以參見mysql的官網說明

innodb給

mysql提供了具有提交,回滾和崩潰恢復能力的事務安全(

acid相容)儲存引擎。

innodb鎖定在行級並且也在

select語句提供乙個

oracle風格一致的非鎖定讀。這些特色增加了多使用者部署和效能。沒有在

innodb中擴大鎖定的需要,因為在

innodb中行級鎖定適合非常小的空間。

innodb也支援

foreign key強制。在

sql查詢中,你可以自由地將

innodb型別的表與其它

mysql的表的型別混合起來,甚至在同乙個查詢中也可以混合。

innodb是為處理巨大資料量時的最大效能設計。它的

cpu效率可能是任何其它基於磁碟的關聯式資料庫引擎所不能匹敵的。

innodb儲存引擎被完全與

mysql伺服器整合,

innodb儲存引擎為在主記憶體中快取資料和索引而維持它自己的緩衝池。

innodb儲存它的表&索引在乙個表空間中,表空間可以包含數個檔案(或原始磁碟分割槽)。這與

myisam表不同,比如在

myisam表中每個表被存在分離的檔案中。

innodb 表可以是任何尺寸,即使在檔案尺寸被限制為

2gb的作業系統上。

innodb預設地被包含在

mysql二進位制分發中。

windows essentials installer使

innodb成為

windows上

mysql的預設表。

innodb被用來在眾多需要高效能的大型資料庫站點上產生。著名的

internet新聞站點

slashdot.org執行在

innodb上。

mytrix, inc.在

innodb上儲存超過

1tb的資料,還有一些其它站點在

innodb上處理平均每秒

800次插入

/更新的負荷。

innodb儲存引擎是預設地被允許的。如果你不想用

innodb表,你可以新增

skip-innodb選項到

mysql選項檔案。 被

innodb儲存引擎管理的兩個重要的基於磁碟的資源是

innodb表空間資料檔案和它的日誌檔案。

如果你指定無

innodb配置選項,

mysql將在

mysql資料目錄下建立乙個名為

ibdata1的

10mb大小的自動擴充套件資料檔案,以及兩個名為

ib_logfile0和

ib_logfile1的

5mb大小的日誌檔案。

注釋:innodb給

mysql提供具有提交,回滾和崩潰恢復能力的事務安全(

acid相容)儲存引擎。如果擬執行的作業系統和硬體不能如廣告說的那樣執行,

innodb就不能實現如上能力。許多作業系統或磁碟子系統可能為改善效能而延遲或記錄寫操作。在一些作業系統上,就是系統呼叫(

fsync())

也要等著,直到所有未寫入已被重新整理檔案的資料在被重新整理到穩定記憶體之前可以確實返回了。因為這個,作業系統崩潰或掉電可能損壞當前提交的資料,或者在最壞的

情況,因為寫操作已被記錄了,甚至破壞了資料庫。如果資料完整性對你很重要,你應該在用任何程式於生產中之前做一些「

pull-the-plug」測試。

mac os x 10.3 及以後版本,

innodb使用乙個特別的

fcntl()檔案重新整理方法。在

linux下,建議禁止回寫快取。 在

atapi硬碟上,乙個類似

hdparm -w0 /dev/hda命令可能起作用。小心某些驅動器或者磁碟控制器可能不能禁止回寫快取。

注釋:要獲得好的效能,你應該如下面例子所討論那樣,明確提供

innodb引數。自然地,你應該編輯設定來適合你的硬體和要求。

要建立innodb表空間檔案,在

my.cnf選項檔案裡的

[mysqld]節裡使用

innodb_data_file_path選項。在

windows上,你可以替代地使用

my.ini檔案。

innodb_data_file_path的值應該為乙個或多個資料檔案規格的列表。如果你命名乙個以上的資料檔案,用

分號(『

;』)分隔它們:

innodb_data_file_path=datafile_spec1[;datafile_spec2]...例如:把明確建立的具有相同特徵的表空間作為預設設定的設定操作如下:

[mysqld]innodb_data_file_path=ibdata1:10m:autoextend這個設定配置乙個可擴充套件大小的尺寸為

10mb的單獨檔案,名為

ibdata1。沒有給出檔案的位置,所以預設的是在

mysql的資料目錄內。

尺寸大小用

m或者g字尾來指定說明單位是

mb或者

gb。乙個表空間,它在資料目錄裡包含乙個名為

ibdata1的固定尺寸

50mb的資料檔案和乙個名為

ibdata2大小為

50mb的自動擴充套件檔案,其可以像這樣被配置:

[mysqld]innodb_data_file_path=ibdata1:50m;ibdata2:50m:autoextend乙個指定資料檔案的完全字尾包括檔名,它的尺寸和數個可選屬性:

file_name:file_size[:autoextend[:max:max_file_size]]autoextend屬性和後面跟著的屬性只可被用來對

innodb_data_file_path行裡最後乙個資料檔案。

如果你對最後的資料檔案指定

autoextend選項。如果資料檔案耗盡了表空間中的自由空間,

innodb就擴充套件資料檔案。擴充套件的幅度是每次

8mb。

如果磁碟已滿,你可能想要把其它資料新增到另乙個硬碟上。重新配置乙個已存在表空間的指令見

15.2.7節,「新增和刪除

innodb資料和日誌檔案」。

innodb並不感知最大檔案尺寸,所以要小心檔案系統,在那上面最大的檔案尺寸是

2gb。要為乙個自動擴充套件資料檔案指定最大尺寸,請使用

max屬性。下列配置允許

ibdata1漲到極限的

500mb:

[mysqld]innodb_data_file_path=ibdata1:10m:autoextend:max:500minnodb預設地在

mysql資料目錄建立表空間檔案。要明確指定乙個位置,請使用

innodb_data_home_dir選項。比如,要使用兩個名為

ibdata1和

ibdata2的檔案,但是要把他們建立到

/ibdata,像如下一樣配置

innodb:

[mysqld] 

innodb_data_home_dir=/ibdata 

innodb_data_file_path=ibdata1:50m;ibdata2:50m:autoextend

注釋:innodb不建立目錄,所以在啟動伺服器之前請確認

/ibdata目錄的確存在。這對你配置的任何日誌檔案目錄來說也是真實的。使用

unix或

dos的

mkdir命令來建立任何必需的目錄。

通過把innodb_data_home_dir的值原原本本地部署到資料檔名,並在需要的地方新增斜槓或反斜槓,

innodb為每個資料檔案形成目錄路徑。如果

innodb_data_home_dir選項根本沒有在

my.cnf中提到,預設值是「

dot」目錄

./,這意思是

mysql資料目錄。

如果你指定innodb_data_home_dir為乙個空字串,你可以為列在innodb_data_file_path值裡的資料檔案指定絕對路徑。下面的例子等價於前面那個例子:

[mysqld] 

innodb_data_home_dir= 

innodb_data_file_path=/ibdata/ibdata1:50m;/ibdata/ibdata2:50m:autoextend

注意,在一些檔案系統上,資料檔案必需小於

2gb。資料檔案的合併尺寸必須至少

10mb。

當你第一次建立乙個

innodb表空間,最好從命令列來啟動

mysql伺服器。

innodb然後把資料庫建立的資訊列印到螢幕,所以你可以看見正在發生什麼。比如,在

windows上,如果

mysqld-max位於

c:\mysql\bin,你可以如下來啟動它:

c:\> c:\mysql\bin\mysqld-max --console如果你不傳送伺服器輸出到螢幕上,請檢查伺服器的錯誤日誌來看在啟動過程中

innodb列印了什麼。

Swoft之MySQL資料庫使用

資料庫訪問沒啥好說的,按官方文件來就好了 result query table 表名 where id 1 limit 1 get getresult 表名可以用實體類也可以用字串,用字串帶上表字首,實體類需要use引入 result query table user class where id ...

建立mysql資料庫總結 MySQL資料庫總結

引擎 檢視mysql預設引擎 show variables like storage engine 檢視表引擎 show table status from 資料庫名 修改表引擎 alter table 表名 engine innodb 建立時直接定義引擎 create table 表名 engin...

MySQL資料庫總結

引擎 檢視mysql預設引擎 show variables like storage engine 檢視表引擎 show table status from 資料庫名 修改表引擎 alter table 表名 engine innodb 建立時直接定義引擎 create table 表名 engin...