Time of Update: 2017-02-28
mysql> \s 或status都可以查詢到mysql狀態基本資料--------------mysql Ver 14.14 Distrib 5.1.69, for redhat-linux-gnu (x86_64) using readline 5.1Connection id: 28035
Time of Update: 2017-02-28
mysql 熱備在營運中需定期備份mysql,為崩潰後的恢複資料做準備。一般分為冷備和熱備,冷備就是停掉mysql服務,直接cp檔案,但是在生產環境中,很 少有機會這樣,一般都是在mysql提供服務的時候就進行備份,因此這牽扯到資料一致性的問題。所以,在MyISAM儲存引擎下,我們的思路就是:鎖表 –>備份–>解鎖# 進入mysql環境 鎖表root@mysql : test> flush tables with read lock;# 在系統內容下
Time of Update: 2017-02-28
只有好的庫表結構、合理的索引還不夠,我們還需要合理的設計查詢,齊頭並進,一個不少才能充分發揮MySQL的優勢。一、查詢為什麼會慢?每一個查詢由一系列的子任務組成,每個子任務都會消耗一定的時間。這個我們在之前的單個查詢分析時已經簡單介紹了,當然還有額外的因素,比方說包括網路,CPU計算,統計資訊,執行計畫,鎖等待等操作,或者底層引擎在調用記憶體,CPU操作,I/O操作等上的消耗時間。最佳化查詢的目的就是減少和消除這些操作所花費的時間。查詢效能低下的最基本原因是訪問的資料太多,大部分的效能低下的查詢
Time of Update: 2017-02-28
維護表有三個主要的目的:1、找到並修複損壞的表。對於MyISAM儲存引擎來說,表損壞通常是系統崩潰導致的。其他的引擎也會由於硬體的問題,MySQL本身的缺陷或者作業系統的問題導致索引的損壞。損壞的索引,會導致查詢返回錯誤的結果或者莫須有的主鍵衝突等問題,嚴重時還會導致資料庫崩潰。這類情況,可以嘗試check table來檢查是否發生了表損壞,有些儲存引擎不支援這個命令。可以使用repair table 來修複損壞的表,但同樣不是所有引擎都支援該命令。如果引擎不支援,可以使用alter操作重建表,
Time of Update: 2017-02-28
理解索引最好的辦法是結合執行個體,接下來分析一個例子。假設要設計一個線上約會網站,使用者資訊表有很多列,包括國家,地區,城市,性別,眼睛顏色等等。網站必須支援上面的各種組合來搜尋使用者,包括根據使用者的最後線上時間,評分等進行排序的限制。需要考慮是需要索引來排序還是先檢索資料再排序,因為使用索引排序會嚴格限制索引和查詢的設計。如果MySQL使用了某個索引的範圍查詢,也就無法再使用另一個索引或者是該索引的後續欄位進行排序了。接下來一步步討論:1、支援多種過濾條件country列的選擇性通常不高,但
Time of Update: 2017-02-28
一、壓縮索引MyISAM使用首碼壓縮來減少索引的大小,預設只壓縮字串,但是通過設定也可以對整數做壓縮。壓縮可以使用更少的空間,代價是某些操作可能更慢。特別是倒序的查詢,測試表明,對於CPU密集型的應用,查詢會很慢,特別是倒序。對於I/O密集型應用,查詢可能會不錯。可以在CREATE TABLE的語句中指定PACK_KEYS參數來指定索引壓縮方式。二、冗餘和重複索引重複索引:指在相同的列上按照相同的順序建立的相同類型的索引,要盡量避免重複索引,除非在同一列上建立不同類型的索引來滿足不同的查詢需求。
Time of Update: 2017-02-28
一、覆蓋索引索引是一種尋找資料的高效方式,但是MySQL也可以使用索引來直接擷取列的資料,這樣就不再需要讀取資料行。如果索引的葉子節點中已經包含要查詢的資料,那麼還有什麼必要回表查詢呢?如果一個索引包含或者說覆蓋所有需要查詢的欄位的值,我們就稱之為“覆蓋索引”。覆蓋索引的好處:1、索引條目通常遠小於資料行大小,所以如果只需要讀取索引,就極大的減少資料訪問量。這對MyISAM尤其正確,因為MyISAM能壓縮索引以變得更小。2、因為索引是按照順序儲存的,所以對於I/O密集型的
Time of Update: 2017-02-28
聚簇索引,並不是一種單獨的索引類型,而是一種資料存放區方式。InnoDB的聚簇索引實際上在同一個結構中儲存了B-Tree索引和資料行資訊。因為無法把資料行存放在兩個不同的地方,所以一個表只能有一個聚簇索引(不過可以通過覆蓋索引來類比,稍後再介紹)。這裡主要討論InnoDB引擎,InnoDB通過主鍵聚集資料,如果沒有主鍵會選擇一個非空的唯一索引,如果還沒有,InnoDB會隱式定義一個主鍵來作為聚簇索引。聚簇索引是一把雙刃劍,要仔細考慮。優點:1、可以把相關資料儲存在一起,例如實現電子郵件時,根據使
Time of Update: 2017-02-28
一、索引的優點1、索引可以大大減少伺服器需要掃描的資料量2、索引可以協助伺服器避免排序和暫存資料表。3、索引可以將隨即I/O變為順序I/O二、索引策略1、獨立的列獨立的列是指索引列不能是運算式的一部分,也不能是函數參數。例如:一個有500W條記錄的表,id是主鍵。所以要始終將索引列單獨放在比較符號的一側。2、首碼索引和索引選擇性對於比較大的列,通常可以索引開始的部分字元,這樣可以節約索引空間,提高索引率。但是也會降低索引的選擇性。索引的選擇性是指,不重複的索引值(基數)和表的記錄總數的比值,索引
Time of Update: 2017-02-28
雜湊索引(hash index)基於雜湊表實現,只有精確匹配索引的所有列的查詢才有效,對於每一行資料,儲存引擎都會對所有索引列計算一個雜湊碼,不同索引值的行計算出來的雜湊碼也不一樣,雜湊碼儲存在雜湊索引中,同時雜湊表中儲存指向每個資料的指標。1、Memory引擎支援雜湊索引,也支援B-Tree索引,而且支援非唯一的雜湊索引,如果多個列的雜湊值相同,索引會以鏈表的方式存放多個記錄指標到同一個雜湊條目,這個是和特別的。舉例說明:CREATE TABLE `testhash` ( `fname`
Time of Update: 2017-02-28
必須明白的sql知識一,兩表外串連查詢現有兩個表A,B內容如下mysql> select * from A;+------+------+| id | Col1 |+------+------+| 1 | AA || 2 | BB || 3 | CC |+------+------+3 rows in set (0.00 sec)mysql> select * from B;+------+------+| id | Col2 |+------+
Time of Update: 2017-02-28
mysql儲存引擎InnoDB1,主體繫結構:預設7個後台線程,4個io thread(insert buffer、log、read、write),1個master thread(優先順序最高),1個鎖(lock)監控線程,1個錯誤監控線程。可以通過show engine innodb status來查看。新版本已對預設的read thread和write thread分別增大到4個,可通過show variables like 'innodb_io_thread%'查看。儲存引擎組成:緩衝池(
Time of Update: 2017-02-28
mysql儲存引擎MyISAM1,建立myisam表mysql> create table t (id int , name varchar(30) , msg varchar(100)) engine = MyISAM;mysql> show table status like "t" \G ;*************************** 1. row ***************************Name: tEngine:
Time of Update: 2017-02-28
配置mysql+lvs+keeplived實現Mysql讀操作的負載平衡環境:test1192.168.46.131mastertest2192.168.46.130slave備份test庫test3調度器1、安裝與配置Keepalived首先在節點test1、test2上安裝Keepalived軟體,軟體安裝非常簡單。[root@test1 ]# yum install -y openssl-devel[root@test1 ~]# wget
Time of Update: 2017-02-28
mysql主從複製的實現1、MySQL複製的實現原理MySQL支援單向、雙向複製、非同步複製,複製過程中一個伺服器充當主伺服器,而一個或多個其它伺服器充當從伺服器。主伺服器將更新寫入一個二進位記錄檔中,並建立一個索引檔案以追蹤記錄檔迴圈。這些日誌可以記錄發送到從伺服器的更新。當一個從伺服器串連主伺服器時,記錄檔會通知主伺服器,從伺服器在日誌中讀取的最後一次成功更新的位置。接著,從伺服器在上次成功更新的位置處開始進入更新操作。更新完成後從伺服器開始進入等待狀態,等待主伺服器後續的更新。需要注意的是
Time of Update: 2017-02-28
我的my.cnf檔案是這樣的innodb_data_home_dir = /usr/local/mysql/varinnodb_data_file_path = ibdata1:10M:autoextendinnodb_log_group_home_dir = /usr/local/mysql/varinnodb_buffer_pool_size = 16Minnodb_additional_mem_pool_size = 2Minnodb_log_file_size =
Time of Update: 2017-02-28
1,binlog_cache_size和max_binlog_cache_size表示的為每個session的事物分配的緩衝一般的當插入或者修改資料的時候,不會立刻寫磁碟,一般會緩衝起來,緩衝的大小有binlog_cache_size 來控制mysql> show variables like"%binlog_cache%";+-----------------------+----------------------+| Variable_name| Value|+-
Time of Update: 2017-02-28
一,二進位記錄檔的作用Mysql的二進位日誌記錄的是所有mysql資料庫發生變更的資訊,因此對資料庫非常重要,二進位日誌的作用我概括了一下主要包含如下幾個方面:1、可以用於資料庫基於時間點的還原。2、可以用來分析資料庫發生更改的情況,比如程式的bug導致資料庫資料更改等等。3、二進位日誌還可以用來重建資料庫。二,二進位日誌相關的變數和參數三,配置二進位日誌1,開啟bin-log日誌,在my.cnf中修改指定了bin-log日誌的路徑,開啟日誌後需要myssqladmin flush
Time of Update: 2017-02-28
瞭解mysql的源碼目錄包括用戶端代碼,服務端代碼,測試載入器和其他庫檔案Mysql源碼結構Bdb 伯克利DB表引擎BUILD 構建工程的指令碼Client 用戶端Cmd-line-utils 命令列工具Config 構建工程所需的一些檔案Dbug Fred Fish的調試庫Docs 文檔檔案夾Extra 一些相對獨立的次要的工具Heap HEAP表引擎Include 標頭檔Innobase INNODB表引擎Libmysql 動態庫Libmysql_r
Time of Update: 2017-02-28
MySQL是一個關係型資料庫管理系統,由瑞典MySQL