文章目錄
- 一、需要主從復制原因與改造方法
- 1.1、原因
- 1.2、改造方法
- 1.3、更高級解決方案
- 二、MySQL 主從復制原理
- 2.1、MySQL 支持的復制型別
- 2.2、復制的作業程序
- 三、案例實施
- 3.1、環境準備
- 3.1.1、主機
- 3.1.2、拓撲圖
- 3.1.3、實驗目的
- 3.2、實驗程序
- 3.2.1、主節點建立時間同步環境
- 3.2.2、從節點上進行時間同步
- 3.2.3、安裝MySQL 資料庫
- 3.2.4、配置主服務器
- 3.2.5、配置從服務器
- 3.2.6、驗證
一、需要主從復制原因與改造方法
1.1、原因
在企業網站中,后端MySQL資料庫只有一臺時,會有以下問題:
遇到單點故障,服務不可用
無法處理大量的并發資料請求
資料丟失將會造成很大損失

1.2、改造方法
增加MySQL資料庫服務器,對資料進行備份,形成主備
確保主備MySQL資料庫服務器資料是一樣的
主服務器宕機了,備份服務器繼續作業,資料有保障
MySQL主從復制與讀寫分離是密切相關的

1.3、更高級解決方案
通過主從復制的方式來同步資料,再通過讀寫分離來提升資料庫的并發負載能力

二、MySQL 主從復制原理
首先要部署主從復制,只有主從復制完成了,才能在基礎上進行資料的讀寫分離
2.1、MySQL 支持的復制型別
基于陳述句的復制(默認)
在主服務器上執行的陳述句,從服務器執行同樣的陳述句
基于行的復制
把改變的內容復制到從服務器
混合型別的復制
一旦發現基于陳述句無法精確復制時,就會采用基于行的復制
2.2、復制的作業程序
(1)在每個事務更新資料完成之前,Master在二進制日志記錄這些改變,寫入二進制日志完成后,Master通知存盤引擎提交事務
(2)Slave將Master的Binary log復制到其中繼日志,首先,Slave開始一個作業執行緒——I/O執行緒,I/O執行緒在Master上打開一個普通的連接,然后開始Binlog dump process,Binlog dump process從Master的二進制日志中讀取事件,如果已經跟上Master,他會睡眠并等待Master產生新的事件,I/O執行緒將這些事件寫入中繼日志,
(3)SQL slave thread(SQL從執行緒)處理該程序的最后一步,SQL執行緒從中繼日志讀取事件,并重放其中的事件而更新Slave的資料,使其與Master中的資料一致,只要該執行緒與I/O執行緒保持一致,中繼日志通常會位于OS的快取中,所以中繼日志的開銷很小,
復制程序有一個很重要的限制,即復制在Slave上是串行化的,也就是說Master上的并行更新操作不能再Slave上并行操作,

三、案例實施
3.1、環境準備
實驗環境防火墻和核心防護均已關閉
systemctl stop firewalld.service
setenforce 0
3.1.1、主機
三臺centos7.6 主機
一臺主mysql服務器 ip地址為20.0.0.25
兩臺從mysql服務器 ip地址為20.0.0.23和20.0.0.22
3.1.2、拓撲圖

3.1.3、實驗目的
實作主從復制
3.2、實驗程序
3.2.1、主節點建立時間同步環境
安裝配置NTP
[root@localhost ~]# yum -y install ntp
[root@localhost ~]# vi /etc/ntp.conf //最后面添加這兩行
server 127.127.1.0
fudge 127.127.1.0 stratum 8
[root@localhost ~]# systemctl restart ntpd
3.2.2、從節點上進行時間同步
[root@localhost mysql]# yum -y install ntpdate
[root@localhost mysql]# ntpdate 20.0.0.25
兩臺從服務器都如此操作
3.2.3、安裝MySQL 資料庫
三臺主機都需要安裝MySQL 資料庫,安裝資料庫方法可以參考我以前博客
https://blog.csdn.net/weixin_48191211/article/details/108320638
3.2.4、配置主服務器
(1)修改/etc/my.cnf組態檔,增加服務器id,配置二進制日志選項
[root@localhost ~]# vi /etc/my.cnf
server-id = 11 //修改
log-bin=master-bin //增加下兩行
log-slave-updates=true
[root@localhost ~]# systemctl restart mysqld.service
(2)登陸mysq,給從服務器授權
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'20.0.0.%' IDENTIFIED BY '123456';
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 | 599 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
3.2.5、配置從服務器
(1)修改/etc/my.cnf組態檔,增加服務器id,配置二進制日志選項
[root@localhost ~]# vim /etc/my.cnf
[root@localhost ~]# systemctl restart mysqld.service
server-id = 22 //修改 另一臺改成33,三個id不能相同
relay-log=relay-log-bin //增加下兩行
relay-log-index=slave-relay-bin.index
[root@localhost ~]# systemctl restart mysqld.service
(2)登陸mysql,配置同步
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> change master to master_host='20.0.0.25',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=599;
Query OK, 0 rows affected, 2 warnings (0.00 sec)
mysql> start slave
-> ;
Query OK, 0 rows affected (0.00 sec)
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 20.0.0.25
Master_User: myslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master-bin.000001
Read_Master_Log_Pos: 599
Relay_Log_File: relay-log-bin.000002
Relay_Log_Pos: 321
Relay_Master_Log_File: master-bin.000001
Slave_IO_Running: Yes //開啟
Slave_SQL_Running: Yes //開啟
Replicate_Do_DB:
Replicate_Ignore_DB:
3.2.6、驗證
(1)主服務器創建一個庫
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> create database lx
-> ;
(2)兩臺從服務器查看是否同步
[root@localhost ~]# mysql -uroot -p
Enter password:
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| lx | //同步成功
| mysql |
| performance_schema |
| sys |
+--------------------+
5 rows in set (0.00 sec)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/55802.html
標籤:其他
上一篇:開箱即用的Dubbo模版
下一篇:java打怪升級地圖
