主從複製基本前提如下:
基本前提是,時間同步。如果裏面有敏感數據,mysql協議是明文傳輸的,
很顯然,我們要使用mysqlssl.
一般我們很少有直接在規劃架構的時候就考慮到了,應該是有幾臺從服務器,或是要不要從服務器。
只有當業務量能夠達到了一定的規模時,這個時候架構纔會出現迭代,比如加緩存,加從服務器。
而真正等到要加從服務器的時候,主服務器上可能已經跑了大量的數據了。
(大量數據的情況如下處理)
那麼我們一般是在主服務上做好備份,然後在備份這次備份後的二進制日誌,
然後在從服務器上,先恢復主服務器的備份,然後在恢復二進制日誌。
(極少量數據時)
那就可以直接複製了。
實驗:
現模擬當雙方都是空庫的時候怎麼複製
node1是主節點
node2是從節點
[ root@node1 ~ ]# vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = ON #不要反解主機名,這樣我們很多授權的主機名就能通過了。
innodb_file_per_table = ON #
max_connections = 20000 #(上面折現並不關鍵)
log_bin = /mydata/logs/master-log #(下面的一定要保證這像是添加的)
server_id = 1 #(服務器的id)
接下來
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000022 | 245 | | |
+-------------------+----------+--------------+------------------+
因爲是手動清理的庫,日誌已經到了22節點了,記下這個數字就好了,
另外一個服務器複製就從這個節點往後複製就好了。
編輯node2
[ root@node2 ~ ]# vim /etc/my.cnf.d/server.cnf
[server]
skip_name_resolve = ON
innodb_file_per_table = ON
max_connections = 20000
relay_log = relay-log
server_id = 2
時間必須要同步
主節點上要授權一個用戶帳號用來做複製操作。
MariaDB [(none)]> grant replication client,replication slave on *.* to 'repluser'@'172.18.25.%' identified by 'replpass';
MariaDB [(none)]> flush privileges;#刷新權限
#replication 複製
#client 客戶
#slave 奴隸
#identified 確定
#privileges 權限
#relay-log 中繼日誌
MariaDB [(none)]> show master status;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000022 | 497 | | |
+-------------------+----------+--------------+------------------+
那麼是從497開始複製
接下來就可以讓從服務器開始複製了
在node2沖服務器上
MariaDB [(none)]> change master to master_host='172.18.25.51',master_user='repluser',master_password='replpass',master_log_file='master-log.000022',master_log_pos=497;
查看基本從服務器的複製的基本信息
MariaDB [(none)]> show slave status\G;
然後啓動從服務器
MariaDB [(none)]> start slave io_thread,sql_thread;
然後在主服務器上面創建一個數據庫然後在從服務器上面查看。
node1:
MariaDB [(none)]> create database mydb;
node2:
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mydb |
| mysql |
| performance_schema |
| test |
+--------------------+
如果是要基於ssl的主從
那麼給主配一個證書,在給從配一個證書
然後那麼互相認證就好
實驗:
加入我們的主節點上面有數據,怎麼加從服務器
首先如果把主服務器上的最近一次的全量備份,或是全量備份加各種增量備份
提出來,然後疊加重放,最後回滾。
然後記錄下節點號。
MariaDB [(none)]> show master status;
然後
在主服務器上面加入這個從服務器
MariaDB [(none)]> change master to master_host='172.18.25.51',master_user='repluser',master_password='replpass',master_log_file='master-log.000022',master_log_pos=497;
修改從服務器的配置文件
relay_log = relay-log
server_id = 3
然後啓動從服務器
MariaDB [(none)]> start slave io_thread,sql_thread;
結束