1. 程式人生 > 資料庫 >MySQL主從複製詳細操作

MySQL主從複製詳細操作

一、介紹

簡稱AB複製,在A主機上做create、update、insert、drop、delete等資料庫、表、記錄的增、刪、改操作,B主機上會自動做資料庫、表、記錄的同步更新。

主從複製,是用來建立一個和主資料庫完全一樣的資料庫環境,稱為從資料庫,主資料庫一般是準實時的業務資料庫 事務處理庫,從庫做查詢庫

二、A工作原理(即工作過程)

a. 在主庫上把資料更改記錄到二進位制日誌(Binary Log)中。

b. 備庫將主庫上的日誌複製到自己的中繼日誌(Relay Log)中。

c. 備庫讀取中繼日誌中的事件,將其重放到備庫資料庫之上。

三、AB複製的一主一從模式工作過程

A主機: create database db1 ----> 會將此命令自動寫入本機的二進位制日誌檔案中

B主機:
I/O執行緒: 監測並讀A主機上的二進位制日誌檔案新增的內容,且將新內容寫入到B主機自己的中繼日誌檔案中
SQL執行緒 : 讀取B主機上中繼日誌檔案中心的SQL語句,並且自動執行這些SQL語句。最終在B主機上建立了db1這個庫。

四、主從複製的作用

一是確保資料安全;做資料的熱備,作為後備資料庫,主資料庫伺服器故障後,可切換到從資料庫繼續工作,避免資料的丟失。

二是提升I/O效能;隨著日常生產中業務量越來越大,I/O訪問頻率越來越高,單機無法滿足,此時做多庫的儲存,有效降低磁碟I/O訪問的頻率,提高了單個裝置的I/O效能。

三是讀寫分離,使資料庫能支援更大的併發;在報表中尤其重要。由於部分報表sql語句非常的慢,導致鎖表,影響前臺服務。如果前臺使用master,報表使用slave,那麼報表sql將不會造成前臺鎖,保證了前臺速度


實驗準備(本實驗都在VMware中完成)

兩臺主機,分為安裝MySQL,一臺作為主庫,一臺作為從庫

1、主庫 IP:192.168.112.130

2、從庫 IP:192.168.112.140

3、一個寫好的test.sql表


1、主庫引數配置

在C盤下開啟這個目錄(注:programData為隱藏檔案!!!)

開啟 my.ini 配置檔案

C:\ProgramData\MySQL\MySQL Server 5.7   
[mysqld] 
# Binary Logging.
# log-bin          ---把這一行的註釋取消,並改為以下
log-bin=binlog

# server ID
Server-id=1
Binlog_format=row    ---新增這一行

開啟命令提示符(cmd)

net stop mysql57     ---停止mysql
net start mysql57    ---啟動mysql


2、配置從庫引數

在C盤下開啟這個目錄(注:programData為隱藏檔案!!!)

開啟 my.ini 配置檔案

C:\ProgramData\MySQL\MySQL Server 5.7  
[mysqld] 
# Binary Logging
# log-bin
relay-log = relay-bin   ---新增這個

# server ID
server-id = 2  ---改一下ID

開啟Data檔案,裡面有一個 auto.cnf

把UUID的最後一個字母改成其他的,因為我們這個兩個主機是複製出來的,所以會出現UUID相同的狀況


[auto]server-uuid=bb8a3677-f728-11ea-913a-000c29035395   ---末尾最後一個數字隨便改成什麼都可以

開啟命令提示符執行以下命令

net stop mysql57 停止
net start mysql57 啟動

3、回到主庫操作

把資料表test.sql檔案複製到C盤下面

建立一個數據庫名叫 test(以下命令在資料庫中進行)

reate database test default character set utf8;   

然後在命令提示符(cmd)上把我們的資料表文件複製到新建立的 test庫中

Mysql -uroot -pXXGC.lab123 test < C:\test.sql

主庫建立同步賬號(資料庫中進行)

create user 'edc'@'%' identified by '123456';
grant replication slave on *.* to 'edc'@'%';

檢視主庫binlog檔案位置

show master logs;

展示日誌檔案

show binlog events in ‘binlog.000001’

重新整理日誌檔案

Flush logs;

再執行

show master logs 

可以看到已經多了一個000002的日誌檔案


4、回到從庫操作

把資料表test.sql檔案複製到C盤下面

建立一個數據庫名叫 test(以下命令在資料庫中進行)

reate database test default character set utf8;   

然後在命令提示符(cmd)上把我們的資料表文件複製到新建立的 test庫中

Mysql -uroot -pXXGC.lab123 test < C:\test.sql

在新建的test資料庫裡執行此操作

CHANGE MASTER TO MASTER_HOST='192.168.112.130',
MASTER_PORT=3306,
MASTER_USER='edc',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='binlog.000002',
MASTER_LOG_POS=154;

開啟主從複製 並檢查狀態

Start SLAVE;
Show SLAVE status;

這個時候就可以在主庫裡面寫資料,然後可以看到從庫就已經同步了;


此文件寫於2020/12/18