MySQL互為主從及Keepalived配置vip——主從配置篇

在上一篇日志中,介紹了配置主從及keepalived所需的軟件環境的安裝方法。在本篇文章中,將介紹數據庫主從環境的配置。

1、服務器角色及ip:

服務器角色 IP VIP
master A 192.168.112.133 192.168.112.88
master B 192.168.112.135 192.168.112.88
user 192.168.112.134 -

2、互為主從配置

  • master A:192.168.112.133(數據庫節點)
    my.cnf文件配置如下:
[mysqld]
skip-name-resolve
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin
# 為服務器分配id,可以自定義,不區分大小,起標識作用。不同數據庫節點分配不同的id
server-id=1
binlog_format=mixed
# replicate-do-db/replicate-ignore-db這兩個設置針對從服務器,當兩臺數據庫服務器并非互為主從關系時,從服務器如此設置
# replicate-do-db = ...這項設置指定需要同步數據的數據庫
replicate-do-db=eleting
# replicate-ignore-db = ...這項設置指定不需要同步數據的數據庫
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# binlog-do-db/binlog-ignore-db這兩個設置針對主服務器,當兩臺數據庫服務器并非互為主從關系時,主服務器如此設置
# binlog-do-db = ... 這項設置指定需要同步數據的數據庫
binlog-do-db=eleting
# binlog-ignore-db = ... 這項設置指定不需要同步數據的數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay_log=mysqld-relay-bin
log-slave-updates = ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • master B:192.168.112.135(數據庫節點)
    my.cnf文件配置如下:
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html

[mysqld]
skip-name-resolve
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
log-bin=mysql-bin
# 為服務器分配id,可以自定義,不區分大小,起標識作用。不同數據庫節點分配不同的id
server-id=2
binlog_format=mixed
# replicate-do-db/replicate-ignore-db這兩個設置針對從服務器,當兩臺數據庫服務器并非互為主從關系時,從服務器如此設置
# replicate-do-db = ...這項設置指定需要同步數據的數據庫
replicate-do-db=eleting
# replicate-ignore-db = ...這項設置指定不需要同步數據的數據庫
replicate-ignore-db=mysql
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
# binlog-do-db/binlog-ignore-db這兩個設置針對主服務器,當兩臺數據庫服務器并非互為主從關系時,主服務器如此設置
# binlog-do-db = ... 這項設置指定需要同步數據的數據庫
binlog-do-db=eleting
# binlog-ignore-db = ... 這項設置指定不需要同步數據的數據庫
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay_log=mysql-relay-bin
log-slave-updates=ON
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

關于數據庫主從設置的相關知識點,大家可以查看下面一篇文章:
學一點 mysql 雙機異地熱備份----快速理解mysql主從,主主備份原理及實踐
本篇文章中基礎的數據庫主從備份設置,都是根據上面這篇文章所講述的內容,調整優化而成。文章中的原理部分講解的很清楚,大家可以學習下。

  • 為數據庫節點分配遠程訪問權限
# 遠程登錄數據庫
mysql -uname -p -hxxx.xxx.xxx.xxx

在沒有對相應的遠程服務器分配權限之前,很可能會被拒絕登錄。

# 對遠程服務器進行MySQL登錄授權
# 第一種方式
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%'IDENTIFIED BY 'password' WITH GRANT OPTION; 
# 第二種方式
GRANT ALL PRIVILEGES ON *.* TO 'username'@'tel server ip' IDENTIFIED BY 'password' WITH GRANT OPTION;
# 刷新配置,使遠程權限生效
flush privileges;

說明:在以上分配遠程訪問權限的方式中,'username'是允許遠程登錄的用戶名,@'%'是允許所有遠程服務器通過設定的用戶名和密碼來登錄數據庫,@'tel server ip'是允許指定的遠程服務器通過用戶名和密碼來登錄數據庫,'password'是用戶名相對應的密碼。

這么說還是有點不太好理解,下面我們將通過實例來說明:

# 本次配置中,需要對兩臺數據庫服務器進行相互授權,才能實現互為主從配置
# 本次配置中,遠程登錄的用戶名統一為'repl',密碼為'12345'
# master A(192.168.112.133)對 master B(192.168.112.135)進行遠程登錄授權
# 第一種方式 —— 任意ip通過用戶名repl和密碼12345均可登錄
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'%'IDENTIFIED BY '12345' WITH GRANT OPTION;
# 第二種方式 —— 僅 master B(192.168.112.135)可通過用戶名repl和密碼12345登錄
GRANT ALL PRIVILEGES ON *.* TO 'repl'@'192.168.112.135' IDENTIFIED BY '12345' WITH GRANT OPTION;
# 刷新,使配置生效
flush privileges;
# 關于 master B(192.168.112.135)對 master A(192.168.112.133)進行遠程登錄授權,大家參照上面的配置,選擇適合自己實際情況的方式配置即可。

測試遠程訪問配置是否生效:

mysql -urepl -p -h192.168.112.135
MasterB-MasterA.png
mysql -urepl -p -h192.168.112.133
MasterA-MasterB.png

遠程訪問權限配置成功!

  • 配置主從同步
# 查看master狀態
show master status\G

master A(192.168.112.133)

MasterA-status.png

master B(192.168.112.135)

MasterB-status.png

說明:File指向目前的binary log文件,文件中記錄了需要同步數據的數據庫的變更信息。新安裝的數據庫,這里一般是mysql-bin.000001,在寫這篇文章時,我的環境已經配置好了,數據庫多次重啟和讀寫,所以文件如圖所示。
Position指向目前的binary log文件中,是從什么位置開始記錄的變更集,新文件起始位置默認為120。可以簡單的將這個屬性比作斷點再續,這里記錄的是一個節點,從服務器配置好之后,就從這個節點位置開始同步數據。
剩下的兩個配置很好理解,分別是需要同步數據的庫和忽略的庫。

查看到File和Position之后,就可以配置對應的主庫了!
在 master A(192.168.112.133)執行

CHANGE MASTER TO 
       MASTER_HOST='192.168.112.135', 
       MASTER_USER='repl', 
       MASTER_PASSWORD='12345', 
       MASTER_LOG_FILE='mysql-bin.000032', 
       MASTER_LOG_POS=120;

在 master B(192.168.112.135)執行

CHANGE MASTER TO 
       MASTER_HOST='192.168.112.133', 
       MASTER_USER='repl', 
       MASTER_PASSWORD='12345', 
       MASTER_LOG_FILE='mysql-bin.000061', 
       MASTER_LOG_POS=120;

說明:上述語句中沒什么難理解的地方,每條屬性都是字面意思理解就可以啦。配置完成之后,不要忘記分別重啟下兩個數據庫。

# 重啟數據庫
service mysqld restart
# 或者
systemctl restart mysqld.service

驗證主從是否生效:

# 查看slave狀態
show slave status\G

master A(192.168.112.133)

MasterA-slave.png

master B(192.168.112.135)

MasterB-slave.png

說明:從圖中可以看出,兩個數據庫節點的主服務器都指向了對方。關鍵的地方是圖中紅色線框框起來的部分,當兩者狀態都為Yes時,說明主從備份已經開始工作,且狀態正常。
一者為No時,表示主從工作不正常,此時就需要開發同學耐心的去查找相關問題所在啦。造成這種情況的原因可能有很多種,在這里沒辦法一一列舉。

至此,互為主從的配置已經完成!

下篇文章將開始keepalived的配置!

MySQL互為主從及Keepalived配置系列文章鏈接:

MySQL互為主從及Keepalived配置vip——環境篇
MySQL互為主從及Keepalived配置vip——主從配置篇
MySQL互為主從及Keepalived配置vip——keepalived配置篇

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容