傳統的MySQL在運作時,通常都會將資料庫備份,一旦設備或資料庫有問題就可以將其作復原,以達到資料損失最少的情況,但如果假設遇到資料不可遺失的情況,備份資料庫的方法就不太適用,這裡介紹如何讓資料庫可以做到Always On,資料不遺失,至於原理文章很多就不再細說。


STEP 1:安裝MySQL
—- CentOS 7 改為內建MariaDB —-

  • 不安裝內建的MariaDB,強制安裝 Oracle版的MySQL

# wget http://dev.MySQL.com/get/MySQL57-community-release-el7-9.noarch.rpm
# rpm ivh MySQL57communityreleaseel79.noarch.rpm
# yum install y MySQLserver

 

STEP 2:調整設定檔 my.cnf
vi /etc/my.cnf

[mysqld]
# Sync Imformation
 server-id = 2    # Master 上的server-id為1,2者不可相同
 read-only = 0    # read-only = 1為啟用唯獨,適合用在Master-Slave架構
 log-bin = mysql-bin
 binlog-do-db = DBName   # 需要被同步的DB
 expire-logs-days=7    # Log 保留7天
 auto_increment_increment = 2
 auto_increment_offset = 2
# to ensure that changes that happened on the other master are also reflected in this machine's binary log
 relay-log = relay-bin
 relay-log-index = relay-bin.index
 relay-log-info-file = relay-bin.info
 log_slave_updates = 1
 binlog_format="mixed"    # 將資料庫的檔案格式設定成混合模式,避免因為同步產生的讀寫錯誤
 slave-skip-errors = all    # 忽略slave同步Premary Key值產生的錯誤導致無法同步

 

STEP 3:設定同步專用帳號

# mysql -u root -p

mysql>USE mysql;
mysql>CREATE USER 'replication'@'%' IDENTIFIED BY '<password>';
mysql>GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%';
mysql>FLUSH PRIVILEGES;
 
 STEP 4:查詢Master資訊
  • 這邊需要2邊同時設定,在這裡範例中介紹單一台,另一台設定方式相同
mysql>show master status;

  • 將File與Position記起來,設定Slave會用到
 
STEP 5:設定同步
這要在Slave設定,這要在Slave設定,這要在Slave設定,很重要
mysql>SLAVE STOP;
mysql>CHANGE MASTER TO
          MASTER_HOST='mysql-master',
          MASTER_USER='replication',
          MASTER_PASSWORD='<password>',
          MASTER_LOG_FILE='mysql-bin.00005',
          MASTER_LOG_POS=24809168;
mysql>SLAVE START;

 

STEP 6:檢查同步狀態

mysql>show slave status \G;

  • 2邊出現上圖紅框訊息表示設定成功正在執行同步