mariadb/mysql建立主從

前提

本方案是兩節點主從方案,只要建立好主從,及時數據庫掛掉又拉起主從模式不會失效。

  • 保證時間同步
  • 保證都安裝了mysql/mariadb

建立主從的過程

這裏介紹的是兩節點主從,如果是集羣模式,至少需要三個節點,因爲偶數個節點是導致腦裂高發的原因(無法確定該同步誰的)。

  1. 主從服務器節點設置不同的server-id
  2. 啓用二進制日誌和relaylog
  3. 主節點創建一個擁有複製權限的用戶賬號
  4. 查詢主節點binlog信息
  5. 設置從節點同步主節點

停止所有寫入

在所有服務器上執行此步

在所有服務器上執行此步

在所有服務器上執行此步

停止所有寫入是爲了防止數據設置同步的過程中數據不一致。

如果 mariadb 是通過 hosts 文件中的域名進行訪問的,那麼只需要編輯 /etc/hosts , 把mysql的域名解析刪掉就可以停止所有讀寫,執行以下命令。

關掉所有讀寫mysql的服務,你也可以直接用iptables來禁用端口通信(如果應用有自動重連機制的話,否則只能重啓應用了)

等待 1 分鐘,依次進入集羣中所有的 mariadb ,查看進程狀態,確保沒有額外的讀寫操作( command 列除了 show processlist 外沒有多餘的 sleepquery )。

MariaDB [(none)]> show processlist;

備份與導入

首先,你需要保證所有的節點數據一致,在升級過程中萬一升級失敗能及時的恢復數據。

請參考本小冊備份數據庫

添加一個專門用來同步的用戶

在從節點中的 mariadb 執行以下命令,如果全部輸出 ok,則繼續。

/usr/local/mariadb/bin/mysql -A -e "GRANT replication slave ON *.* TO 'rep'@'%' IDENTIFIED BY '123456'; flush privileges;"
mysql -A -urep -p123456 -e "select 'ok';"

停止所有節點

執行以下命令停止

/usr/local/mariadb/bin/mysqladmin  shutdown

此時節點應該自動停止了,檢查是否沒有 mariadbmysql 進程,如果有按需求判斷是否停掉(kill)。

ps -ef | grep -E "mariadb|mysql"

更新 mysql 配置(從節點)

先創建relaylog日誌存儲的目錄,用來防止同步波動緩存同步信息。(注意,請設置成你自己的數據目錄)

mkdir /data/mariadb/relaylog
chown -R mysql.mysql /data/mariadb/relaylog/

添加配置到 [mysqld] 配置節中(注意現在不啓動),該配置表示我們只同步 cloud 庫和其下的表,如果要同步更多的庫和表可以用逗號分隔,追加。

如果想了解各個參數是什麼含義可以到本小冊relaylog裏看

vim /etc/my.cnf.d/server.cnf
# 添加內容如下
replicate-do-db=cloud #cloud是你想同步的庫名,如果有多個請用逗號隔開
log-slave-updates
replicate-wild-do-table=cloud.% #cloud是你想同步的庫名,cloud.% 代表這個庫下面的所有表,如果有多個請用逗號隔開
binlog-ignore-db=mysql # 忽略mysql庫
slave-skip-errors=1032,1062,1053,1146,2003
max_relay_log_size = 0
relay_log=/data/mariadb/relaylog/relay-bin #請設置成正確的目錄,上面剛剛創建的那個,最後的relay-bin是文件前綴
relay_log_purge = 1
relay_log_recovery = 1
sync_relay_log =0
sync_relay_log_info = 0
slave-skip-errors=1032,1062,1053,1146,2003

參考添加成功的圖片

啓動主節點並獲取主節點信息

如果你的目錄不同請自行修改

mkdir -p /var/run/mariadb; chown -R mysql:mysql /var/run/mariadb; /usr/local/mariadb/bin/mysqld_safe --datadir=/data/mariadb/data --pid-file=/var/run/mariadb/mariadb.pid  > /dev/null 2>&1  &

獲取同步主節點的關鍵信息

進入主節點數據庫中,執行命令

unlock tables;
show master status;

得到同步主節點的關鍵信息

啓動從節點並設置同步信息

mkdir -p /var/run/mariadb; chown -R mysql:mysql /var/run/mariadb; /usr/local/mariadb/bin/mysqld_safe --datadir=/data/mariadb/data --pid-file=/var/run/mariadb/mariadb.pid  > /dev/null 2>&1  &

建立主從結構

進入從節點的數據庫,指定主庫信息,完成主從關係建立(注意:下面命令中的【主節點 ip 地址】別忘記替換,使用 eth0 本地網卡的 ip ,不要使用浮動 ip ,也不要使用 vip

賬號和密碼就是我們剛剛設置的,

unlock tables;
CHANGE MASTER TO
MASTER_HOST='主節點的ip地址',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000171',
MASTER_LOG_POS=33105258;
start slave; #開始同步

查看 slave 的狀態,注意查看 slave 的進程狀態,下面紅色方框中圈起來的是兩個 Yes 就表示狀態正常了,注意等待主庫複製的延遲秒數變爲 0 Seconds_Behind_Master: 0

show slave status \G

the end

可能遇到的坑

請根據你的業務寫入速度和同步速度,設置好主節點的binlog大小和過期時間,具體設置方法請參考本小冊
mysql 正確清理 binlog 日誌的兩種方法中的方法二、通過設置 binlog 過期的時間,使系統自動刪除 binlog 文件

如果你想建立互爲主從

如果你想建立互爲主從,那麼你可以把主節點當作從節點,把從節點當作主節點,從本文的

添加一個專門用來同步的用戶開始重新執行,直到最後一步。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章