集群之mysql主從配置(windows和linux版)
起因
由於網站進一步開發運行的需求,要求主機7*24小時運行正常,同時要求能夠防止數據庫災難。考慮到後期的開發程度和業務量,準備向高可用系統進行改變,同時通過負載均衡提高網絡性能。於是第一步就考慮到了數據庫的集群問題。
集群和數據庫主從復制
集群
通過多個物理機服務器共同處理和完成同一個業務功能,能很好的提高網站性能和可靠性。不同的環境下需要采用不同的集群策略,集群主要分為以下幾種:
(1)高可用集群:節點間以主備形式實現數據庫容災,在宕機情況下能快速恢復,節點間共享資源。
(2)負載均衡集群:節點間相互獨立不共享資源,通過一定的算法和模式將業務操作分到不同的節點,充分利用每個節點的資源,能夠提高擴展性,加強了網絡數據處理能力。
(3)科學計算集群:相對串行計算而言的,多臺計算機執行多個指令達到單臺計算機無法達到了計算速度。
主從復制
對上面高可用集群的理解,實現高可用集群可以配置服務器的主從關系,通過了解準備使用Mycat來對數據庫進行管理,在此之前需要對數據庫進行主從配置。
(1)主從配置:為了將mysql的數據庫分不到多個系統中,最簡單的實現方式就是復制了。而mysql內建有一種復制方式,即指定一臺或多臺服務器為主機master,另外一臺或多臺服務器作為從機master。當master存在更新的時候,master將更新寫入二進制文件,並維護了一個索引文件跟蹤日誌。當slave連接到主服務器之後,slave會通知master進行同步,master通過索引找日誌文件上一次同步的位置,然後將這段時間內的更新數據發送給slave進行同步。
(2)mysql主從復制支持類型:
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 [email protected] 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下的這行代碼註釋掉即可
(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 [email protected] identified by ‘qwer‘;
(4)記錄主機配置
show master status;
從機配置。。。相同
在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 [email protected] identified by ‘qwer‘; #授予所有權限
flush privileges; #刷新數據庫
這樣一來,主數據庫中建表等操作也能同步到從庫
集群之mysql主從配置(windows和linux版)