1、複製概述
1.1、複製解決的問題
數據複製技術有以下一些特點:
(1) 數據分佈
(2) 負載平衡(load balancing)
(3) 備份
(4) 高可用性(high availability)和容錯
1.2、複製如何工作
從sql layer中邏輯模塊上來看
複製模塊分爲master模塊和slave模塊兩部分,master模塊主要負責在replication環境中讀取master端的binary日誌,以及與slave端的I/O thread交互等工作。slave模塊比master模塊所要做的事情稍多一些,在系統中主要體現在兩個線程上面。一個是負責從master請求和接受binary日誌,並寫入本地relay_log的I/O thread。另外一個是負責從relay_log中讀取相關的日誌事件的SQLthread,然後解析成可以在slave端正確執行並得到和master端完全相同的結果的命令並再交給slave執行的過程。
1.3 實驗環境:
主從 | ip地址 | 數據庫版本 | 系統版本 |
master | 172.16.8.8 | MariaDB-10.0.10 | Centos6.5 |
slave | 172.16.8.9 | MariaDB-10.0.10 | Centos6.5 |
版本:雙方的版本要一致,如果不一致,主的要低於從的
時間:兩臺服務器的時間應該同步
SElinux 關閉
1.4 GTID簡介
MySQL 5.6之後引入的GTID(Global Transaction IDs)使得其複製功能的配置、監控及管理變得更加易於實現,且更加健壯。
gtid是一個 unique 唯一的表示符,他是由服務器的uuid 全局唯一標示,是由128位的隨機符組成,mysql-5.6是依靠server-id和uuid 來標示覆制架構中的每一個主機,因爲是128位的隨機字符串在全局都不會重複,server-id 和uuid以及每一個mysql事物的事物序號組成了唯一的gtid ,自從引進mysql-5.6之後每一個二進制日誌當中在每一個事物的首部都會寫上gtid 標記,因此gtid使得追蹤和比較複製事物變得非常簡單而且能夠實現從崩潰中快速恢復。尤其是innodb 引擎要想實現高可用功能必須要藉助於gtid來實現。
1.5 mysql配置文件設置
要在MariaDB-10.0.10中使用複製功能,其服務配置段[mysqld]中於少應該定義如下選項:
binlog-format:二進制日誌的格式,有row、statement和mixed幾種類型;
需要注意的是:當設置隔離級別爲READ-COMMITED必須設置二進制日誌格式爲ROW,現在MySQL官方認爲STATEMENT這個已經不再適合繼續使用;但mixed類型在默認的事務隔離級別下,可能會導致主從數據不一致;
log-slave-updates、report-port和report-host:用於啓動GTID及滿足附屬的其它需求;
master-info-repository和relay-log-info-repository:啓用此兩項,可用於實現在崩潰時保證二進制及從服務器安全的功能;
sync-master-info:啓用之可確保無信息丟失;
slave-parallel-workers:設定從服務器的SQL線程數;0表示關閉多線程複製功能;
binlog-checksum、master-verify-checksum和slave-sql-verify-checksum:啓用複製有關的所有校驗功能;
binlog-rows-query-log-events:啓用之可用於在二進制日誌記錄事件相關的信息,可降低故障排除的複雜度;
log-bin:啓用二進制日誌,這是保證複製功能的基本前提;
server-id:同一個複製拓撲中的所有服務器的id號必須惟一.
一、簡單主從模式配置步驟
1.配置master節點
下面是配置文件部分 ,值得注意的是在下面配置文件中server-id 此項的值 不能重複。主從不能一樣。
[root@master ~]# vim /etc/my.cnf //添加或者修改以下內容 log-bin=/binlog/mysql-bin //二進制日誌文件目錄 innodb_file_per_table=1 //innodb表空間獨立 server-id = 1 //從服務器不能跟此id重複 binlog-format=ROW //二進制日誌文件格式 log-slave-updates=true master-info-repository=TABLE //用於實現在崩潰時保證二進制及從服務器安全的功能; relay-log-info-repository=TABLE //用於實現在崩潰時保證二進制及從服務器安全的功能; sync-master-info=1 //啓用之可確保無信息丟失 slave-parallel-threads=2 //設定從服務器的SQL線程數;0表示關閉多線程複製功能 binlog-checksum=CRC32 //啓用複製有關的所有校驗功能 master-verify-checksum=1 //啓用複製有關的所有校驗功能 slave-sql-verify-checksum=1 //啓用複製有關的所有校驗功能 binlog-rows-query-log_events=1 //啓用之可用於在二進制日誌記錄事件相關的信息,可降低故障排除的複雜度; report-host=master.gulong.com report-port=3306
創建二進制日誌目錄
# mkdir /binlog # chown -R mysql.mysql /binlog
2.配置主機名稱:
在master和slave服務器上分別配置主機名:
master:
# hostname master.gulong.com #vim /etc/hosts //添加以下內容 172.16.8.8 master.gulong.com 172.16.8.9 slave.gulong.com
slave:
# hostname slave.gulong.com #vim /etc/hosts //添加以下內容 172.16.8.8 master.gulong.com 172.16.8.9 slave.gulong.com
3.在master上創建有複製權限的帳號
MariaDB [(none)]> grant replication slave,replication client on *.* to "backup"@'172.16.8.9' identified by '123'; MariaDB [(none)]> flush privileges;
4.配置slave節點
server-id = 3 relay-log=/relay/relay-bin vim /etc/my.cnf //添加修改如下 server-id = 3 relay-log=/relay/relay-bin //開啓中繼日誌 binlog-format=ROW log-slave-updates=true master-info-repository=TABLE relay-log-info-repository=TABLE sync-master-info=1 slave-parallel-threads=2 binlog-checksum=CRC32 master-verify-checksum=1 slave-sql-verify-checksum=1 binlog-rows-query-log_events=1 report-port=3306 report-host=slave.gulong.com log-bin=/logbin/master-bin
創建中繼日誌目錄
# mkdir /relay # chown -R mysql.mysql /relay
5 、在slave服務器使用主mysql上創建的賬號密碼登陸
MariaDB [(none)]> change master to master_host='172.16.8.8',master_user='backup',master_password='123',master_use_gtid=current_pos;
在slave上查看是否啓用gtid與多線程
執行show slave status;
從圖看出,基於GTID的主從複製配置成功
現在來測試下
在主mysql 上創建數據庫 監測 從是否能複製
到此,基於MariaDB的主從複製已經配置完成!