最近在做項目高可用時,需要使用數據同步。由於只有雙節點,且採用主主同步可能存在循環同步的風險,故綜合考慮採用Mysql主從同步(Master-Slave同步)。

可能沒有接觸過Mysql數據同步時,可能會覺得數據同步很難,但你按照如下操作一遍之後,會發現原來同步如此簡單,畢竟我們只需要會配置,會排查問題,底層具體實現Mysql團隊早幫忙實現了。廢話不多說,直入話題:

(1)首先,保證有兩臺設備(主、從),分別在兩臺設備上安裝Mysql數據庫。安裝完成之後,

使用 mysql -u[數據庫用戶名] -p[用戶密碼] ,若能夠登陸mysql則表示安裝成功。

(2)編輯mysql配置文件,路徑一般爲 /etc/mysql/mysql.conf.d/mysqld.cnf (用戶在安裝Mysql時指定的目錄,

如: /etc/my.conf 等)。分別按要求在主、從mysql中的[mysqld]模塊下添加如下內容:

[mysqld]

default-storage-engine=innodb

innodb_file_per_table=1

collation-server=uft8_general_ci

init-connect='SET NAMES uft8'

bind-address=0.0.0.0

log_bin=mysql-bin

relay_log=mysql-relay-bin

expire_logs_days=100

skip-slave-start=1

binlog_do_db=[需要同步的數據庫名稱]

binlog-ignore-db=mysql,sys,information_schema,performance_schema

server-id=[主填寫1,從填寫2]

auto-increment-increment=2

auto-increment-offset=1

open_files_limit=65535

mac_connections=1000

slave-skip-errors=all

(3)shell連接主、從服務器, mysql -u[數據庫用戶名] -p[用戶密碼], 分別登錄到主、從節點mysql,創建同步用戶repl,執行如下命令:

grant all privileges on *.* to 'repl'@'%' identified by 'repl' with grant option;

然後exit退出Mysql操作頁,重新啓動Mysql服務,命令如下:

systemctl restart mysql.service

然後進入 主節點 Mysql,查看Mysql的 File列Positon列 。執行命令: show master status; 出現結果如下

(4)登錄到從服務器, mysql -u[數據庫用戶名] -p[用戶密碼] 進入Mysql,執行:

stop slave;

reset slave;

change master to master_host='[主節點IP]',master_user='repl',master_password='repl',master_log_file='[mysql-bin.000001,參考(3)中的File列]',master_log_pos=[245,參考(3)中的Postion列];

exit;

執行 systemctl restart mysql.service 重啓Mysql服務。

(5)啓動從服務器slave庫, mysql -u[數據庫用戶名] -p[用戶密碼] 進入從節點Mysql,執行如下命令:

start slave;

執行: show slave status\G; 查看備份服務狀態。如果以下兩個狀態爲Yes則表示主從同步成功。

接下來,大家就可以嘗試向主數據庫中插入一條數據,看是夠從數據庫中會自動增加該條數據,是不是有點小激動呢?趕緊測試下吧。

PS:若出現無法同步問題?

(1)請查看上圖中Master_Log_File屬性、Read_Master_Log_Pos屬性與主節點查詢結果是否一致。

(2)可能是從數據庫連接主數據庫超時,去吧連接延時改大一點吧。

(3)如果上述無法解決,請查看mysql日誌排查原因。

相關文章