實戰:mysql 5.6複寫延遲監控,mysql5.6

來源:互聯網
上載者:User

實戰:mysql 5.6複寫延遲監控,mysql5.6

#repdelay.sh#!/bin/sh#ocpyang@126.com#查看複寫延遲具體多少event#set mysql evnMYSQL_USER_MASTER=root  MYSQL_PASS_MASTER='password'  MYSQL_HOST_MASTER=192.168.2.188MYSQL_USER_SLAVE=root  MYSQL_PASS_SLAVE='password'  MYSQL_HOST_SLAVE=192.168.2.14tmpfile_01="tmp01.`date +%Y%m%d%H%M%S`.txt"tmpfile_02="tmp02.`date +%Y%m%d%H%M%S`.txt"mysql -h${MYSQL_HOST_MASTER} -u${MYSQL_USER_MASTER} -p${MYSQL_PASS_MASTER} -e"SHOW BINARY LOGS;" >${tmpfile_01}mysql -h${MYSQL_HOST_SLAVE} -u${MYSQL_USER_SLAVE} -p${MYSQL_PASS_SLAVE} -e"SHOW SLAVE STATUS\G;" >${tmpfile_02}#tail -1 ${tmpfile_01} | grep -v "Log_name"#cat ${tmpfile_02} | grep -E 'Master_Log_File|Read_Master_Log_Pos|Exec_Master_Log_Pos' | grep -v "Relay_Master_Log_File" |sed 's/^[ ]*//g'a=`tail -1 ${tmpfile_01} | grep -v "Log_name" |awk '{print $1}'|awk -F "." '{print $2}'`b=`sed -n "/\<Master_Log_File\>/p" ${tmpfile_02} |sed 's/^[ ]*//g' |awk -F ":" '{print $2}'|awk -F "." '{print $2}'`bhtime=`sed -n "/\<Seconds_Behind_Master\>/p" ${tmpfile_02} |sed 's/^[ ]*//g' |awk -F ":" '{print $2}'`if [ "$b" = "$a"  ];thenc=`tail -1 ${tmpfile_01} | grep -v "Log_name" |awk '{print $2}'`d=`sed -n "/\<Read_Master_Log_Pos\>/p" ${tmpfile_02}  |sed 's/^[ ]*//g' |awk -F ":" '{print $2}'`        e=`expr $c - $d`if [ "${e}" -eq 0  -a "${bhtime}" -eq 0  ]; thenecho "*****************************************************************************"echo -e "\e[1;31m  &&&&&&&Synchronization has been completed!&&&&&&& \e[0m"echo "*****************************************************************************"elif [  "${e}" -eq 0  -o "${bhtime}" -eq 0  ];thenecho "*****************************************************************************"echo -e "\e[1;31m  Has been synchronized to the same log file! Wait a moment \e[0m"echo -e "\e[1;31m Not synchronized binlog events is:${e},behind master tims is ${bhtime} \e[0m"echo "*****************************************************************************"fielif  [ ${b} -lt ${a} ];thenf=`sed -n "/\<Read_Master_Log_Pos\>/p" ${tmpfile_02}  |sed 's/^[ ]*//g' |awk -F ":" '{print $2}'`g=`awk '$1 >= "$b"  {print $2}' ${tmpfile_01} |awk 'BEGIN{total=0}{total+=$1}END{print total}'`re=`expr $g - $f`        echo -e "\e[1;31m There are multiple log files are not synchronized,the  events is:${re} \e[0m"firm -rf ${tmpfile_01}rm -rf ${tmpfile_02}


 


mysql 55相對於以前的版本有什不一樣(50以後,55以前)

MySQL 4.1/5.0/5.1/5.5/5.6各版本的主要區別

1、4.1 增加了子查詢的支援,字元集增加UTF-8,GROUP BY語句增加了ROLLUP,mysql.user表採用了更好的密碼編譯演算法。

2、5.0 增加了Stored procedures、Views、Cursors、Triggers、XA transactions的支援,增加了INFORATION_SCHEMA系統資料庫。

3、5.1 增加了Event scheduler,Partitioning,Pluggable storage engine API ,Row-based replication、Global層級動態修改general query log和slow query log的支援。

4、5.5的新特徵

1)預設儲存引擎更改為InnoDB

2)提高效能和可擴充性

a. 提高了預設線程並發數(innodb_thread_concurrency)

b. 後台輸入/輸出線程式控制制(innodb_read_io_threads、innodb_write_io_threads)

c. 主線程輸入/輸出速率控制(innodb_io_capacity)

d. 作業系統記憶體配置程式使用控制(innodb_use_sys_malloc)

e. 適應性散列索引(Hash Index)控制,使用者可以關閉適應性散列功能。

f. 插入緩衝(Insert Buffering)控制,使用者可以關閉innodb的插入緩衝功能。

g. 通過快速加鎖演算法提高可擴充性,innodb不在使用代理(posix)線程,而是使用原生的獨立操作來完成互斥和讀寫鎖定。

h. 恢複組提交(Restored Group Commit)

i. 提高恢複效能

j. 多緩衝池執行個體

k. 多個復原段(Multiple Rollback Segments),之前的innodb版本最大能處理1023個並發處理操作,現在mysql5.5可以處理高達128K的並發事物,

l. Linux系統固有的非同步輸入/輸出,mysql5.5資料庫系統也提高了linux系統的輸入輸出請求的並發數。

m. 擴充變化緩衝:添加了刪除緩衝和清除緩衝

n. 改善了日誌系統互斥和單獨重新整理(Flush)列表互斥

o. 改善清除程式進度,在mysql5.5中清楚操作線程是獨立的線程,並支援並發,可以使用innodb_purge_treads配置。

p. 改善交易處理中的中繼資料鎖定。例如,事物中一個語句需要鎖一個表,會在事物結束時釋放這個表,而不是像以前在語句結束時釋放表。

3)提高實用性

a. 半同步複製(Semi-synchronous Replication)

b. 複製Heartbeat

c. 中繼日誌自動回復(Automatic Relay Log Recovery)

d. 根據伺服器過濾項複製(Replication Per Server Filtering)

e. 從伺服器複製支援的資料類型轉換(Replication Slave Side Data Type Conversions)

4)提高易管理性和效率

a. ......餘下全文>>
 
MYSQL 大量 串連 順延強制

1、選取最適用的欄位屬性

MySQL 可以很好的支援大資料量的存取,但是一般說來,資料庫中的表越小,在它上面執行的查詢也就會越快。因此,在建立表的時候,為了獲得更好的效能,我們可以將表中欄位的寬度設得儘可能小。例如,在定義郵遞區號這個欄位時,如果將其設定為CHAR(255),顯然給資料庫增加了不必要的空間,甚至使用VARCHAR這種類型也是多餘的,因為CHAR(6)就可以很好的完成任務了。同樣的,如果可以的話,我們應該使用MEDIUMINT而不是BIGIN來定義整型欄位。

另外一個提高效率的方法是在可能的情況下,應該盡量把欄位設定為NOT NULL,這樣在將來執行查詢的時候,資料庫不用去比較NULL值。

對於某些文字欄位,例如“省份”或者“性別”,我們可以將它們定義為ENUM類型。因為在MySQL中,ENUM類型被當作數值型資料來處理,而數值型資料被處理起來的速度要比文本類型快得多。這樣,我們又可以提高資料庫的效能。

2、使用串連(JOIN)來代替子查詢(Sub-Queries)

MySQL 從4.1開始支援SQL的子查詢。這個技術可以使用SELECT語句來建立一個單列的查詢結果,然後把這個結果作為過濾條件用在另一個查詢中。例如,我們要將客戶基本資料表中沒有任何訂單的客戶刪除掉,就可以利用子查詢先從銷售資訊表中將所有發出訂單的客戶ID取出來,然後將結果傳遞給主查詢,如下所示:

DELETE FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

使用子查詢可以一次性的完成很多邏輯上需要多個步驟才能完成的SQL操作,同時也可以避免事務或者表鎖死,並且寫起來也很容易。但是,有些情況下,子查詢可以被更有效率的串連(JOIN).. 替代。例如,假設我們要將所有沒有訂單記錄的使用者取出來,可以用下面這個查詢完成:

SELECT * FROM customerinfo
WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )

如果使用串連(JOIN).. 來完成這個查詢工作,速度將會快很多。尤其是當salesinfo表中對CustomerID建有索引的話,效能將會更好,查詢如下:

SELECT * FROM customerinfo
LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.
CustomerID
WHERE salesinfo.CustomerID IS NULL

串連(JOIN).. 之所以更有效率一些,是因為 MySQL不需要在記憶體中建立暫存資料表來完成這個邏輯上的需要兩個步驟的查詢工作。

3、使用聯合(UNION)來代替手動建立的暫存資料表

MySQL 從 4.0 的版本開始支援 UNION 查詢,它可以把需要使用暫存資料表的兩條或更多的 SELECT 查詢合并的一個查詢中。在用戶端的查詢會話結束的時候,暫存資料表會被自動刪除,從而保證資料庫整齊、高效。使用 UNION 來建立查詢的時候,我們只需要用 UNION作為關鍵字把多個 SELECT 語句串連起來就可以了,要注意的是所有 SELECT 語句中的欄位數目要想同。下面的例子就示範了一個使用 UNION的查詢。

SELECT Name, Phone FROM client
UNION
SELECT Name, BirthDate FROM author......餘下全文>>
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.