MySQL主從復(fù)制詳細(xì)介紹

本篇內(nèi)容主要講解“MySQL主從復(fù)制詳細(xì)介紹”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“MySQL主從復(fù)制詳細(xì)介紹”吧!

成都創(chuàng)新互聯(lián)專注于企業(yè)營(yíng)銷型網(wǎng)站建設(shè)、網(wǎng)站重做改版、陸港網(wǎng)站定制設(shè)計(jì)、自適應(yīng)品牌網(wǎng)站建設(shè)、成都h5網(wǎng)站建設(shè)商城開(kāi)發(fā)、集團(tuán)公司官網(wǎng)建設(shè)、成都外貿(mào)網(wǎng)站建設(shè)公司、高端網(wǎng)站制作、響應(yīng)式網(wǎng)頁(yè)設(shè)計(jì)等建站業(yè)務(wù),價(jià)格優(yōu)惠性價(jià)比高,為陸港等各大城市提供網(wǎng)站開(kāi)發(fā)制作服務(wù)。

一、前言

隨著應(yīng)用業(yè)務(wù)數(shù)據(jù)不斷的增大,應(yīng)用的響應(yīng)速度不斷下降,在檢測(cè)過(guò)程中我們不難發(fā)現(xiàn)大多數(shù)的請(qǐng)求都是查詢操作。

此時(shí),我們可以將數(shù)據(jù)庫(kù)擴(kuò)展成主從復(fù)制模式,將讀操作和寫(xiě)操作分離開(kāi)來(lái),多臺(tái)數(shù)據(jù)庫(kù)分?jǐn)傉?qǐng)求,從而減少單庫(kù)的訪問(wèn)壓力,進(jìn)而應(yīng)用得到優(yōu)化。整理了一份328頁(yè)MySQLPDF文檔

本次測(cè)試使用兩個(gè)虛擬機(jī):ip:192.168.2.21(主) ip:192.168.2.22(從)

二、主從復(fù)制原理

MySQL主從復(fù)制詳細(xì)介紹

同步操作通過(guò) 3 個(gè)線程實(shí)現(xiàn),其基本步驟如下:

服務(wù)器將數(shù)據(jù)的更新記錄到二進(jìn)制日志中(記錄被稱作二進(jìn)制日志事件)-- 主庫(kù)線程;
從庫(kù)將主庫(kù)的二進(jìn)制日志復(fù)制到本地的中繼日志(relay log)-- 從庫(kù) I/O 線程;
從庫(kù)讀取中繼日志中的事件,將其重放到數(shù)據(jù)中 -- 從庫(kù) SQL 線程。

三、配置主庫(kù)

# 3.1 創(chuàng)建用戶

為了安全起見(jiàn),準(zhǔn)備創(chuàng)建一個(gè)新用戶用于從庫(kù)連接主庫(kù)。

# 創(chuàng)建用戶
create user 'repl'@'%' identified by 'repl';

# 授權(quán),只授予復(fù)制和客戶端訪問(wèn)權(quán)限
grant replication slave,replication client on *.* to 'repl'@'%' identified by 'repl';

# 3.2 修改配置文件

1)vim /etc/my.cnf 在[mysqld]下添加:

log-bin         = mysql-bin
log-bin-index   = mysql-bin.index
binlog_format   = mixed
server-id       = 21
sync-binlog     = 1
character-set-server = utf8

2)保存文件并重啟主庫(kù):

service mysqld restart

配置說(shuō)明:

log-bin:設(shè)置二進(jìn)制日志文件的基本名;
log-bin-index:設(shè)置二進(jìn)制日志索引文件名;
binlog_format:控制二進(jìn)制日志格式,進(jìn)而控制了復(fù)制類型,三個(gè)可選值
    -STATEMENT:語(yǔ)句復(fù)制
    -ROW:行復(fù)制
    -MIXED:混和復(fù)制,默認(rèn)選項(xiàng)
server-id:服務(wù)器設(shè)置唯一ID,默認(rèn)為1,推薦取IP最后部分;
sync-binlog:默認(rèn)為0,為保證不會(huì)丟失數(shù)據(jù),需設(shè)置為1,用于強(qiáng)制每次提交事務(wù)時(shí),同步二進(jìn)制日志到磁盤(pán)上。

# 3.3 備份主數(shù)據(jù)庫(kù)數(shù)據(jù)

若主從數(shù)據(jù)庫(kù)都是剛剛裝好且數(shù)據(jù)都是一致的,直接執(zhí)行 show master status 查看日志坐標(biāo)。

若主庫(kù)可以停機(jī),則直接拷貝所有數(shù)據(jù)庫(kù)文件。

若主庫(kù)是在線生產(chǎn)庫(kù),可采用 mysqldump 備份數(shù)據(jù),因?yàn)樗鼘?duì)所有存儲(chǔ)引擎均可使用。

1)為了獲取一個(gè)一致性的快照,需對(duì)所有表設(shè)置讀鎖:

flush tables with read lock;

2)獲取二進(jìn)制日志的坐標(biāo):

 show master status;

返回結(jié)果:

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3)備份數(shù)據(jù):

# 針對(duì)事務(wù)性引擎
mysqldump -uroot -ptiger --all-database -e --single-transaction --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql

# 針對(duì) MyISAM 引擎,或多引擎混合的數(shù)據(jù)庫(kù)
mysqldump -uroot --all-database -e -l --flush-logs --max_allowed_packet=1048576 --net_buffer_length=16384 > /data/all_db.sql
1 row in set (0.00 sec)

4)恢復(fù)主庫(kù)的寫(xiě)操作:

unlock tables;

四、配置從庫(kù)

# 4.1 修改配置文件

1)vim /etc/my.cnf 在[mysqld]下添加:

log-bin             = mysql-bin
binlog_format       = mixed
log-slave-updates   = 0
server-id           = 22
relay-log           = mysql-relay-bin
relay-log-index     = mysql-relay-bin.index
read-only           = 1
slave_net_timeout   = 10

2)保存文件并重啟從庫(kù):

service mysqld restart

配置說(shuō)明:

log-slave-updates:控制 slave 上的更新是否寫(xiě)入二進(jìn)制日志,默認(rèn)為0;若 slave 只作為從服務(wù)器,則不必啟用;若 slave 作為其他服務(wù)器的 master,則需啟用,啟用時(shí)需和 log-bin、binlog-format 一起使用,這樣 slave 從主庫(kù)讀取日志并重做,然后記錄到自己的二進(jìn)制日志中;
relay-log:設(shè)置中繼日志文件基本名;
relay-log-index:設(shè)置中繼日志索引文件名;
read-only:設(shè)置 slave 為只讀,但具有super權(quán)限的用戶仍然可寫(xiě);
slave_net_timeout:設(shè)置網(wǎng)絡(luò)超時(shí)時(shí)間,即多長(zhǎng)時(shí)間測(cè)試一下主從是否連接,默認(rèn)為3600秒,即1小時(shí),這個(gè)值在生產(chǎn)環(huán)境過(guò)大,我們將其修改為10秒,即若主從中斷10秒,則觸發(fā)重新連接動(dòng)作。

# 4.2 導(dǎo)入備份數(shù)據(jù)

如果 3.3 步驟中沒(méi)進(jìn)行備份,忽略此步驟。

mysql -uroot -p < /data/all_db.sql

# 4.3 統(tǒng)一二進(jìn)制日志的坐標(biāo)

根據(jù) 3.3 步驟獲取的坐標(biāo),統(tǒng)一到從庫(kù)中:

change master to
master_host='192.168.2.21',
master_user='repl',
master_password='repl',
master_port=3306,
master_log_file='mysql-bin.000001',
master_log_pos=120;

注意:此處使用的是新創(chuàng)建的賬戶。

# 4.4 啟動(dòng)主從復(fù)制

1)啟動(dòng)從庫(kù) slave 線程:

start slave;

2)查看從服務(wù)器復(fù)制功能狀態(tài):

show slave status\G;

返回結(jié)果:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.2.21
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 120
               Relay_Log_File: mysql-relay-bin.000002
                Relay_Log_Pos: 283
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 120

此處只張貼部分返回結(jié)果。

結(jié)果說(shuō)明:

Slave_IO_Running:此進(jìn)程負(fù)責(zé) slave 從 master 上讀取 binlog 日志,并寫(xiě)入 slave 上的中繼日志。
Slave_SQL_Running:此進(jìn)程負(fù)責(zé)讀取并執(zhí)行中繼日志中的 binlog 日志。

這兩個(gè)進(jìn)程的狀態(tài)需全部為 YES,只要有一個(gè)為 NO,則復(fù)制就會(huì)停止。

當(dāng) Relay_Master_Log_File = Master_Log_File 且 Read_Master_Log_Pos = Exec_Master_Log_Pos 時(shí),則表明 slave 和 master 處于完全同步的狀態(tài)。

五、驗(yàn)證

使用一個(gè)簡(jiǎn)單的例子:

在主庫(kù)創(chuàng)建名為 mysql_test 的數(shù)據(jù)庫(kù),如果同步成功,那么在從庫(kù)中也能查詢出名為 mysql_test 數(shù)據(jù)庫(kù)。

到此,相信大家對(duì)“MySQL主從復(fù)制詳細(xì)介紹”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

網(wǎng)站欄目:MySQL主從復(fù)制詳細(xì)介紹
當(dāng)前鏈接:http://bm7419.com/article36/igsdsg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、微信小程序網(wǎng)站排名、全網(wǎng)營(yíng)銷推廣、關(guān)鍵詞優(yōu)化營(yíng)銷型網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

小程序開(kāi)發(fā)