集羣之mysql主從配置(windows和linux版)

原由

  因爲網站進一步開發運行的需求,要求主機7*24小時運行正常,同時要求可以防止數據庫災難。考慮到後期的開發程度和業務量,準備向高可用系統進行改變,同時經過負載均衡提升網絡性能。因而第一步就考慮到了數據庫的集羣問題。mysql

集羣和數據庫主從複製

集羣

  經過多個物理機服務器共同處理和完成同一個業務功能,能很好的提升網站性能和可靠性。不一樣的環境下須要採用不一樣的集羣策略,集羣主要分爲如下幾種:linux

(1)高可用集羣:節點間以主備形式實現數據庫容災,在宕機狀況下能快速恢復,節點間共享資源。算法

(2)負載均衡集羣:節點間相互獨立不共享資源,經過必定的算法和模式將業務操做分到不一樣的節點,充分利用每一個節點的資源,可以提升擴展性,增強了網絡數據處理能力。sql

(3)科學計算集羣:相對串行計算而言的,多臺計算機執行多個指令達到單臺計算機沒法達到了計算速度。數據庫

主從複製

  對上面高可用集羣的理解,實現高可用集羣能夠配置服務器的主從關係,經過了解準備使用Mycat來對數據庫進行管理,在此以前須要對數據庫進行主從配置。ubuntu

(1)主從配置:爲了將mysql的數據庫分不到多個系統中,最簡單的實現方式就是複製了。而mysql內建有一種複製方式,即指定一臺或多臺服務器爲主機master,另一臺或多臺服務器做爲從機slave。當master存在更新的時候,master將更新寫入二進制文件,並維護了一個索引文件跟蹤日誌。當slave鏈接到主服務器以後,slave會通知master進行同步,master經過索引找日誌文件上一次同步的位置,而後將這段時間內的更新數據發送給slave進行同步。vim

主從配置

(2)mysql主從複製支持類型:windows

a. 基於sql的支持:經過將matser日誌文件中更新的sql語句複製到slave上,slave執行。服務器

b. 基於行的支持:當sql不精確或者記錄丟失時,mysql會將改變的行直接複製到slave上網絡

c. 混合支持:默認使用a方式

(2)主從複製優缺點

優勢:高可用,提升容錯率,數據分佈,負載均衡。

缺點:單向同步,沒法解決主機宕機問題

主從配置

  爲了方便演示,採用單主單從的主從配置,單主多從的配置原理同樣。雙主配置能很好地避免主服務器的宕機狀況,配置比較複雜,下次有空演示。

Windows配置

測試環境

  windows 7,mysql 5.5.28,爲了不由於版本不一致帶來的麻煩,主從數據庫用同一版本數據庫庫

  主機ip:192.168.1.234  從機ip:192.168.1.244

準備條件

(1)關閉防火牆

(2)保證兩臺主機的mysql遠程鏈接開啓(必須)

(3)3306端口(數據庫端口號,不固定,按本身的配置去肯定)是否公開

(4)在主機和從機上建立test數據庫

主機配置

(1)在mysql的安裝文件夾中找到mysql.ini文件,在該文件的mysqld標籤下添加如下屬性(還有其餘不少屬性能夠自行了解):

server-id=66 #服務器id不固定,整數便可 log-bin=C:\Program Files\MySQL\MySQL Server 5.5\mysql-bin #同步日誌的文件存放路徑 binlog-do-db=test #備份哪些些數據庫的二進制日誌 #binlog-ignore-db=...  #也能夠直接設置哪些數據庫不一樣步

配置完成後重啓mysql,這時候會在這個時候在C:\Program Files\MySQL\MySQL Server 5.5\下會看到mysql-bin.index和mysql-bin.00001兩個文件,很明顯前面的文件時索引文件,用以記錄第二個文件,第二個是二進制的日誌文件,該文件每次重啓數據庫均會產生新的日誌文件,這些日誌文件的索引被以文件名爲索引的索引文件所維護,在索引文件中能夠看到全部日誌文件的座標。

索引文件

(2)登錄mysql,給從機配置登陸名,登錄,密碼和權限

 

grant replication slave,reload,super on *.*  to slave@192.168.1.244  identified by 'qwer';

 

這條語句意思是給ip爲192.168.1.244(從機ip)的遠程服務器配置登陸名是slave,密碼是qwer,並賦予slave,super,reload權限

(3)查看主機狀態

show master status;

查出主機的file和postin在從機配置中須要使用,記住便可。

主機狀態

致此,主機配置完成。

從機配置

(1)在從機mysql安裝目錄下找到mysql.ini文件,在該文件的mysqld標籤下添加以下:

server-id=88   #一樣隨機,保證整數惟一便可 replicate-do-db=test1  #複寫(同步)哪個數據庫

配置好以後重啓數據庫

(2)測試主機的遠程鏈接是否成功(必要測試)若是不成功當即排除問題,否則不進行下一步操做

mysql -uslave -h 192.168.1.234 -pqwer

鏈接成功後退出主機mysql,進入從機mysql

(3)修改(第一次應該叫指定)主機信息

stop slave; 關閉從機同步鏈接 change master to master_host = '192.168.1.234', master_user='slave', master_ password ='qwer', master_log_file='mysql-bin.000001',master_log_pos=593;

將主機地址,主機名,主機密碼,二進制文件地址,剛剛截圖的主機file和position指定到主機信息中(上面的change語句)

注意:這個步驟若是出現警告,請查看日誌文件進行排查,否則後續合同沒法成功。修改完成後

start slave;     開啓同步鏈接
show slave status\G;   查看主從機鏈接信息

查看同步狀態會有:

同步狀態

圖中的IO狀態表示主從數據庫是否鏈接成功,sql表示兩個同步文件和slave從機是夠鏈接成功,參考第一張圖的IO和sql

若是兩個都是yes即表示同步配置成功,以後本身能夠再test數據庫下測試。若是出現任何問題能夠留言。

linux配置

測試環境

mysql版本5.7  兩臺服務器的版本要求一致,以避免後續出現不可預知的問題

主機 ubuntu 16.04   ip:192.168.1.116

從機 CentOS 6.5      ip:192.168.1.254

準備條件

(1)關閉防火牆

sudo service ufw stop

(2)保證兩臺服務器的mysql遠程鏈接成功

(3)保證3306端口能夠正常使用

a. 查看3306端口是否被綁定本地

netstat -an|grep 3306

查看端口

上圖是正確的,若是出現的是127.0.0.0:::3306說明端口被本機綁定了,這種狀況下須要修改mysqld的配置

注意:這裏是修改mysqld配置文件配置,僅僅在my.cnf中修改是不起做用

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf    進入mysqld的配置文件

修改mysqld

mysqld下的這行代碼註釋掉便可

(4)建立test同名數據庫

主機配置

(1)找到my.cnf文件

  與windows上不一樣,linux的配置文件時my.cnf,這個文件默認是在/etc上,若是找不到會在.xx/nysql/目錄下尋找。若是你找不到my.cnf能夠輸入如下命令(在根目錄下輸入此命令):

find -name 'my.cnf'  #找到當前目錄下my.cnf的位置

(2)配置my.cnf

  若是是第一次安裝mysql(不知道怎麼安裝的請點擊《linux下的mysql安裝》),第一次進入my.cnf會發現該文件下沒有任何標籤,這時候能夠在其餘的地方(官網上或者靠譜點的網站上)複製my.cnf的頭文件或者樣式,若是嫌麻煩能夠直接在my.cnf下增長一個[mysqld]標籤(必要的)不然會報錯的。而後再mysqld標籤下添加如下配置:

server_id=66 log-bin=mysql-bin binlog-do-db=test

以後重啓mysql,跟windows相同。

(3)受權(跟windows相同)

grant replication slave,reload,super on *.*  to slave@192.168.1.254  identified by 'qwer';

(4)記錄主機配置

show master status;

linux主機配置

從機配置。。。相同

在my.cnf文件下的sqld標籤(跟主機同樣沒有的話添加上)下配置:

server-id=88 replicate-do-db=test1  #複寫(同步)哪個數據庫

重啓mysql。。。

mysql -uslave -h 192.168.1.116 -pqwer    #測試主機鏈接 stop slave; #關閉從機同步鏈接 change master to master_host='192.168.1.234',master_user='slave',master_password='qwer', master_log_file='mysql-bin.000001',master_log_pos=593; #填寫剛剛截圖信息 start slave; #開啓同步鏈接 show slave status\G; #查看主從機鏈接信息

完成後會查出同步狀態:

主從同步狀態

兩個是yes就表明同步成功,若是有no分析日誌解決問題,或者留言也可


 

以上兩個版本的配置算是結束了

注意

  按照以上的配置,主機對從機的權限以後DQL和DML,也就是讀寫權限,而並不具有DDL操做權限。也就是說只有的那個兩個同名數據庫中存在同名表時候,改變主機表的數據,纔會同步到從機。若是須要建立表等的權限,能夠再數據庫中mysql數據庫的user表中修改權限。

也可使用受權語句,授予遠程主機全部權限:

grant all privileges on *.* to slave@192.168.1.254 identified by 'qwer';  #授予全部權限
flush privileges;    #刷新數據庫

這樣一來,主數據庫中建表等操做也能同步到從庫

相關文章
相關標籤/搜索