標籤:
一. 主從複製原理
mysql主從同步過程主要依賴bin-log,主要分為以下三個步驟:
1. master將改變記錄到二進位日誌(binary log)中(這些記錄叫做二進位日誌事件,binary log events);
2. slave將master的binary log events拷貝到它的中繼日誌(relay log);
3. slave重做中繼日誌中的事件,將改變反映它自己的資料。
二.主從搭建過程
1.master授權:在master上建立用於同步的帳號,並授予複製許可權
GRANT REPLICATION SLAVE ON *.* TO ‘repl‘@‘10.10.1.1‘ IDENTIFIED BY ‘123456‘; flush privileges ;2.master開啟bin-log日誌: my.conf配置舉例: server-id = 2
binlog-do-db = test
binlog-ignore-db = mysql
replicate-do-db = test
replicate-ignore-db = mysql
sync-binlog = 1
log-salve-updates = 1 重啟master,運行SHOW MASTER STATUS,記錄下binlog的檔案名稱和檔案位置position;3.slave配置server_id和master地址: (1)my.conf配置: server_id = 3
// log_slave_updates = 1 (設定從庫binlog是否更新的選項,若該從庫為其他slave的master則需要設定,並開啟binlog); (2)重啟slave,在mysql命令列執行: CHANGE MASTER TO
MASTER_HOST=‘10.10.1.2‘,
MASTER_USER=‘repl‘,
MASTER_PASSWORD=‘123456‘,
MASTER_LOG_FILE=‘mysql-bin.000017‘,
//根據主庫情況確定
MASTER_LOG_POS=868040264
//根據主庫情況確定 (3)執行SHOW SLAVE STATUS語句查看slave的設定是否正確:
三.主從切換
當主要資料庫宕機的情況下,我們需要將從庫切換為主庫:
主從切換步驟:
從庫執行:
slave stop;
reset slave;
//reset master;(主從替換時記錄binlog位置)
show master status;
待主庫恢複後,將從庫資料更新到主庫,並執行:
slave stop;
CHANGE MASTER TO ;
slave start;
四.排錯與恢複
1.主從狀態查看:
主庫狀態:show master status\G;
從庫狀態: show slave status\G;
同步異常時,查看原因,根據具體情況進行操作;
//同步錯誤恢複
change master to master_log_file=‘mysql-bin.000288‘,master_log_pos=627625631;
SET GLOBAL sql_slave_skip_counter = 1;
可參考:http://716737.blog.51cto.com/706737/1302972
2.mysql負載查詢最佳化:
看看db裡各項status的值.同時看看系統的記憶體 CPU IO等值的情況;
load average: 0.49, 0.52, 0.53
系統負載,即任務隊列的平均長度。 三個數值分別為 1分鐘、5分鐘、15分鐘前到現在的平均值。
排查思路
1. 確定高負載的類型,top命令看負載高是CPU還是IO。
ps aux 進程情況;
top 查看記憶體和CPU;
iostat -d -x 10 3 查看系統IO情況;
-c 僅顯示CPU統計資訊.與-d選項互斥.
-d 僅顯示磁碟統計資訊.與-c選項互斥.
-k 以K為單位顯示每秒的磁碟請求數,預設單位塊.
-p device | ALL
與-x選項互斥,用於顯示塊裝置及系統磁碟分割的統計資訊.也可以在-p後指定一個裝置名稱,如:
# iostat -p hda
或顯示所有裝置
# iostat -p ALL
-t 在輸出資料時,列印搜集資料的時間.
-V 列印版本號碼和協助資訊.
-x 輸出擴充資訊.
vmstat 查看系統記憶體使用量情況
2. mysql 下執行查看當前的串連數與執行的sql 語句。
show processlist 查看當前串連;
kill QUERY id 負載過大時,強行中斷連線;
3. 檢查慢查詢日誌,可能是慢查詢引起負載高。
記錄慢查詢
編輯Mysql 設定檔(my.cnf),在[mysqld]欄位添加以下幾行:
log_slow_queries = /usr/local/mysql/var/slow_queries.log #慢查詢日誌路徑
long_query_time = 5 #記錄SQL查詢超過5s的語句
log-queries-not-using-indexes = 1 #記錄沒有使用索引的sql
參考連結:
http://716737.blog.51cto.com/706737/1302972
http://blog.csdn.net/hguisu/article/details/7325124
mysql主從搭建