mysql 集群 數據同步


mysql集群配置在網站負載均衡中是必不可少的;

首先說下我個人准備的負載均衡方式;

  1、通過nginx方向代理來將服務器壓力分散到各個服務器上;

  2、每個服務器中代碼邏輯一樣;

  3、通過使用redis緩存來保存內存中數據,使用redis同步功能來同步不同服務器內存中的數據;

  4、在通過mysql的集群配置來實現數據庫數據同步;

這里我整理了幾種數據同步方式;

 

一:主從服務器同步;

  顧名思義:主服務器負責數據的增刪改查,從服務器負責同步數據;

  主服務器建立二進制文件;每產生語句變化或磁盤變化寫入日至;

  從服務器讀主服務二進制日至;將讀到的日至轉成從服務的relaylog,從服務讀取relaylog同步主主服務器;

  主服務器建立授權復制賬號;

  從服務器利用賬號來監聽主服務器;

  步驟:

  1、首先需要至少兩台服務器,我這邊118.xxx.xxx.1(主),118.xxx.xxx.2(從)兩台服務器;兩台搭建mysql方式不同,一台安裝mysql,和mysql-server;一台通過直接安裝mariadb方式;沒什么影響;

  2、主服務器修改/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根據條件自動選擇使用哪一個參數

  3、從服務器修改/etc/my.cnf

#[mysqld]下添加relay-log

#server-id一般用服務器后一位
server-id=2
relay-log=mysql-relay

  4、重啟兩台服務器mysql 服務

//1
systemctl restart mysql

//2
systemctl restart mariadb

  5、主服務建立授權賬號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

  6、從服務通過賬號鏈接主服務器

復制代碼
#進入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目前使用的日志文件中的位置;開始從這個位置往后同步;

  7、查看從服務同步信息狀態,並啟動;

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;

  7、查看啟動后的狀態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同步數據;

  兩台服務器建立授權復制賬號;

  兩台服務器利用賬號來監聽另一台服務器;

  1、兩台服務器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

  2、兩台服務器都建立授權監聽賬號

  

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';

  3、兩台服務器都監聽對方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;

  4、通過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...

  5、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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM