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