mysql/mariadb-主從複製

主從複製基本前提如下:

基本前提是,時間同步。如果裏面有敏感數據,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;

結束

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