主題:mysql5.6數據庫雙機熱備、主從備份
緣由:
在Web應用系統中,數據庫性能是導致系統性能瓶頸最主要的原因之一。尤其是在大規模系統中,數據庫集群已經成為必備的配置之一。集群的好處主要有:查詢負載、數據庫復制備份等。其中Master負責寫操作的負載,也就是說一切寫的操作都在Master上進行,而讀的操作則分攤到Slave上進行。這樣一來的可以大大提高讀取的效率。寫操作涉及到鎖的問題,不管是行鎖還是表鎖還是塊鎖,都是比較降低系統執行效率的事情。我們這樣的分離是把寫操作集中在一個節點上,而讀操作其其他的N個節點上進行,從另一個方面有效的提高了讀的效率,保證了系統的高可用性。——就不多說了,網上千篇一律,這段也是摘抄並整理的。
環境:
操作系統:WIndows7
數據庫:mysql5.6,並確保數據庫是啟動成功的。
PC機或服務器:2台(假設分別命令為master服務器和slave服務器,這兩台電腦相互可通信),環境均為以上配置。
主過程:
1、在master服務器配置mysql的my.ini文件中最小配置3個參數
2、在slave服務器中最小配置2個參數
3、完成之后在master服務器建立賬號並做slave行為賦權,在slave服務器設定master行為賦權。
4、同步數據庫。
5、開啟slave服務器的slave服務。
其實做之前覺得復雜,其實就這幾個步驟,操作之后就會覺得so easy.
具體過程:
注意事項:
1、關於參數中的橫線及下划線:server-id或server_id一樣,使用橫線或下划線是一樣的。
2、關於my.ini的位置:如果是WINDOWS操作系統,從控制面板中打開服務,找到mysql服務,從服務器屬性中可以看到my.ini的具體位置,別以為在默認的mysql文件夾的mydefault就是,不一定,我就是犯了這個錯誤,配置半天發現都無效,最后從服務中看到my.ini在C:\ProgramData\MySQL\MySQL Server 5.6/my.ini這個位置。
1、在master服務器配置mysql的my.ini文件中最小配置3個參數
server-id=1 #這是數據庫ID,此ID是唯一的,ID值不能重復,否則會同步出錯,值區間為1-32.
log-bin = mysql-bin#二進制日志文件,此項為必填項,否則不能同步數據;如果不取名字的話,那么就會以 計算機的名字加編號來命名二進制文件;
binlog-do-db = masters#需要同步的數據庫,如果還需要同步另外的數據庫,那么繼續逐條添加,如果 不寫,那么默認同步所有的數據庫;
binlog-ignore-db = mysql 不需要同步的數據庫;
以上參數設定好之后輸入命令show master status,如果以上配置都成功就會出現一個列表,請記錄里面的file和position參數。
2、在slave服務器中最小配置2個參數
從數據庫的話只需要配置server-id,binlog-do-db,binlog-ignore-db即可。
serverid需要和master服務器的區分開,binlog-do-db,binlog-ignore-d的參數需要和主服務器一致。
3、完成之后在master服務器建立賬號並做slave行為賦權,在slave服務器設定master行為賦權。
1、在master服務器主數據庫添加同步賬號,這個賬號用於salve服務器用這個賬號登錄master服務器並讀取bin-log文件同步數據用,執行如下命令:
命令格式:grant replication slave on *.* to '用戶名稱'@'SLAVE服務器地址' identified by '用戶密碼';
例如執行:grant replication slave on *.* to 'slave'@'%' identified by 'slave';
2、在slave服務器設定同步賬號,這個賬號用於salve服務器用這個賬號登錄master服務器並讀取bin-log文件同步數據用,執行如下命令:
mysql> change master to
-> master_host='master服務器IP',
-> master_user='master服務器設定的同步用戶',
-> master_password='master服務器設定的同步用戶密碼',
-> master_log_file='上面我們提到的master服務器看到的file名稱',
-> master_log_pos=上面我們看到的master服務器看到的position參數;
4、同步數據庫。
一切就緒,只欠東風!現在需要我們在同步之前把兩台服務器的數據庫做一下同步,並且確保master服務器這期間是不被寫入和更改數據的。
網上有很多鎖庫然后備份,完事在解鎖的方式,就不多介紹了,我自己用的是navicat,直接在slave服務器建立一個庫,庫名和master服務器一致,然后打開master服務器這個庫 拷貝所有表,粘貼到slave這個庫上就可以了,比較簡單而且快。
5、開啟slave服務器的slave服務即可。
在slave服務器執行slave start命令,啟動服務。
驗證是否同步:
執行show slave status\G;
slave_io_running和slave_sql_running兩個參數均為YES就可以了。
這時候隨便你更改master上的這個數據庫,都可以看到slave服務器的數據庫被同步了。