MariaDB主從複製的邏輯與實現

一、關係型數據庫的劣勢

  “關係型數據庫:指採用了關係模型來組織數據的數據庫,而關係模型指的就是二維表格模型,而一個關係型數據庫就是由二維表及其之間的聯繫所組成的一個數據組織。”——Wiki

  關係型數據庫有着龐大的用戶羣體,並且實現邏輯很符合人的理解,但它也同時存在一些劣勢:1.關係型數據庫中最大的瓶頸就是磁盤I/O。由於傳統的關係型數據庫在執行每一次執行增刪改查時都會要用到磁盤I/O,當併發量很高時就會很明顯的降低整個架構的性能。2.在關係型數據庫中,導致性能欠佳的最主要原因是多表的關聯查詢,以及複雜的數據分析類型的複雜SQL報表查詢。

  關係型數據庫的主從複製與讀寫分離可以一定程度上緩解I/O壓力,提高關係型數據庫的併發性能。下面以MariaDB示例主從複製的原理與實現。

二、什麼是主從複製

  在整個系統架構中,數據庫可能是最重要的環節之一,因爲數據丟失造成的損失可以說是不可估量的。但由於MariaDB的天生屬性,所以很難做到分佈式存儲,所以MariaDB在生產中是一定不允許存在單點的。另一方面,關係型數據庫是有狀態的,不能像其他一些無狀態應用那樣做HA,在數據庫做HA時一定要考慮數據的同步,這裏就需要將數據不停的向備用節點進行復制。過程如下圖:

 

  主節點將二進制日誌通過API傳輸至從節點,從節點會啓用兩個進程:I/O thread進程和SQL進程。I/O thread進程將主節點的二進制日誌存入從節點的中繼日誌,再生成二進制日誌,最後通過SQL進程將二進制日誌中的操作進行還原,這樣就能保證主從節點數據的同步特性了。

三、MariaDB主從架構存在的問題

  在上面的描述中,表面上似乎可以很完美的實現數據庫的冗餘,並且還能實現主節點和從節點的數據同步,但理想是美好的,顯示是殘酷的。在實際生產環境中因爲種種原因,很有可能會出現主從節點的數據不一致的情況。對於這樣的情況最好的辦法就是預防,時刻監控主從節點的數據同步性,一旦發生不一致的現象,儘可能的將主節點的數據全部重新複製到從節點。

四、MariaDB主從複製配置示例

1.同步服務器時間。

2.確定從服務器從哪一點開始複製(從0開始或從指定位置開始)。

3.主節點配置:

vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=1 #主節點id
log-bin=master-log #開啓二進制日誌

4.從節點配置:

vim /etc/my.cnf.d/server.cnf 
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=11 #從節點id
relay_log=relay-log #開啓中繼日誌
read_only=ON #只讀

5.在主節點上創建擁有複製權限的賬號:

mysql -uroot -p
Enter password:  
MariaDB [(none)]> GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO 'slave'@'192*.* TO 'slave'@'192.168.29.103' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.10 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> SHOW MASTER STATUS; #查看日誌處在的位置
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000001 |      671 |              |                  |
+-------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

6.在從節點上配置主節點信息:

MariaDB [(none)]> CHANGE MASTER TO
MASTER_HOST='192.168.29.102',
MASTER_USER='slave', MASTER_PASSWORD='123456', MASTER_PORT=3306, MASTER_LOG_FILE='master-log.000001', #複製的起始文件 MASTER_LOG_POS=671; #起始點
MariaDB [(none)]> SHOW SLAVE STATUS \G #查看從節點信息
MariaDB [(none)]> START SLAVE; #啓動從節點,可選項爲(IO_THREAD | SQL_THREAD)不寫默認都開啓

  以上就是MariaDB主從複製的配置過程,根據實際需求,還可以實現一主多從,多主多從等結構。

 

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