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

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