mysql集羣配置在網站負載均衡中是必不可少的;mysql
首先說下我我的準備的負載均衡方式;nginx
一、經過nginx方向代理來將服務器壓力分散到各個服務器上;redis
二、每一個服務器中代碼邏輯同樣;sql
三、經過使用redis緩存來保存內存中數據,使用redis同步功能來同步不一樣服務器內存中的數據;數據庫
四、在經過mysql的集羣配置來實現數據庫數據同步;緩存
這裏我整理了幾種數據同步方式;服務器
一:主從服務器同步;負載均衡
顧名思義:主服務器負責數據的增刪改查,從服務器負責同步數據;ide
主服務器創建二進制文件;每產生語句變化或磁盤變化寫入日至;網站
從服務器讀主服務二進制日至;將讀到的日至轉成從服務的relaylog,從服務讀取relaylog同步主主服務器;
主服務器創建受權複製帳號;
從服務器利用帳號來監聽主服務器;
步驟:
一、首先須要至少兩臺服務器,我這邊118.xxx.xxx.1(主),118.xxx.xxx.2(從)兩臺服務器;兩臺搭建mysql方式不一樣,一臺安裝mysql,和mysql-server;一臺經過直接安裝mariadb方式;沒什麼影響;
二、主服務器修改/etc/my.cnf;
#在[mysqld]下添加,創建二進制日至
#server-id通常用服務器後一位
server-id=1 log-binary=mysql-bin #監聽變化方式,statement語句變化,row行變化,mixed智能選擇 binlog-format=mixed
關於binlog-format的參數statement/row
當影響一行如更新一行、插入一行、刪除一行時使用row比較合理
當更新插入刪除多行時使用statement比較合理
mixed是mysql根據條件自動選擇使用哪個參數
三、從服務器修改/etc/my.cnf
#[mysqld]下添加relay-log
#server-id通常用服務器後一位
server-id=2
relay-log=mysql-relay
四、重啓兩臺服務器mysql 服務
//1 systemctl restart mysql //2 systemctl restart mariadb
五、主服務創建受權帳號replication client,replication slave帳號容許服務二進制日至
grant replication client,replication slave on *.* to 'repl1'@'118.xxx.xxx.2' identified by 'password';
注意這裏帳號的權限只能填*.*;不然會報以下錯誤
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES
六、從服務經過帳號連接主服務器
#進入mysql,清除從庫中的同步複製信息; reset slave;
#改變同步主機的信息
change master to
master_host='118.xxx.xxx.1',
master_user='repl1',
master_password='password',
master_log_file='mysql-bin.000003',
master_log_pos=543;
主服務器二進制日至在/var/lib/mysql中
在主服務器中show master status;查看主服務日至狀態;file目前使用的日誌文件;position目前使用的日誌文件中的位置;開始從這個位置日後同步;
七、查看從服務同步信息狀態,並啓動;
show slave status \G
參數詳解:
slave_io_state:線程正在試圖連接到主服務器的狀態;
master_host:主服務器ip地址
master_user:被用於連接的當前用戶
master_port:當前的鏈接主服務器接口
Connect_Retry:--master-connect-retry選項的當前值
Master_Log_File:sql線程當前正在讀取和執行的中繼日誌文件名稱
Read_Master_Log_Pos:當前中繼日至中,sql線程已經讀取和執行的位置
Slave_IO_Running:io線程是否被啓動併成功鏈接上主服務
//啓動同步 start slave;
七、查看啓動後的狀態waiting for master to send event 表示正常;
錯誤:
The server is not configured as slave; fix in config file or with CHANGE MASTER TO
這表示server-id 錯誤;將server-id 正確寫在[mysqld]下的位置;
Failed to open the relay log './mariadb-relay-bin.000001' (relay_log_pos 4)
沒有找到relay-bin.000001日至;由於修改前沒有清除原有的配置;
解決方案:reset slave;後在change master to ....;
一:主主服務器同步;
主主服務器mysql同時兩臺服務器同時監聽對方服務器mysql變化;當有一臺服務器中數據有變化,另外一臺實時同步;
主從服務器同時創建二進制文件;每產生語句變化或磁盤變化寫入日至;
主從服務器同時讀另外一臺服務二進制日至;將讀到的日至轉成自己服務的relaylog,而後讀區本服務器的relaylog同步數據;
兩臺服務器創建受權複製帳號;
兩臺服務器利用帳號來監聽另外一臺服務器;
一、兩臺服務器my.cnf中配置
//服務器1
server-id=163 log-bin=mysql-bin binlog-format=mixed relay-log=mysql-relay
//服務器2 server-id=244 log-bin=mysql-bin binlog-format=mixed relay-log=mysql-relay
二、兩臺服務器都創建受權監聽帳號
grant replication client,replication slave on *.* to 'repl163'@'118.xxx.xxx.1' identified by 'code@password';
grant replication client,replication slave on *.* to 'repl163'@'118.xxx.xxx.2' identified by 'code@password';
三、兩臺服務器都監聽對方log日至
change master to master_host='118.xxx.xxx.1',master_user='repl163',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=746;
change master to master_host='118.xxx.xxx.2',master_user='repl163',master_password='password',master_log_file='mysql-bin.000001',master_log_pos=746;
四、經過show slave status \G查看監聽狀態
錯誤:Last_IO_Error: error connecting to master 'repl163@118.xxx.xxx.1:3306' - retry-time: 60 retries: 2
表示鏈接出錯,檢查得知爲ip寫錯了;
ERROR 1198 (HY000): This operation cannot be performed with a running slave; run STOP SLAVE first
表示在沒有解鎖的狀況下中止slave進程:須要clear slave;
而後再執行change master to...
五、show slave status \G沒有問題後啓動;
start slave
三:mysql-proxy實現負載均衡和讀寫分離
//install yum install mysql-proxy
//101.xxx.xxx.1代理mysql端口4040;沒有守護進程 mysql-proxy -P 101.xxx.xxx.1:4040 --proxy-backend-addresses=101.xxx.xxx.1:3306 --proxy-backend-addresses=101.xxx.xxx.2:3306
//讀寫分離寫法,守護進程啓動 mysql-proxy -b 101.xxx.xxx.1:3306 -r 101.xxx.xxx.1:3306 -s /usr/local/mysql-proxy/share/doc/mysql-proxy/rw-splitting.lua --daemon