首頁 資料庫 mysql教程 詳解centos7下mysql5.6的主從複製的範例程式碼分享

詳解centos7下mysql5.6的主從複製的範例程式碼分享

Mar 29, 2017 pm 01:41 PM

本篇文章主要介紹了centos7下mysql5.6的主從複製詳解,小編覺得挺好的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧

一、mysql主從複製介紹

mysql的主從複製並不是資料庫磁碟上的檔案直接拷貝,而是透過邏輯的binlog日誌複製到要同步的伺服器本地,然後由本地的執行緒讀取日誌裡面的sql語句,重新應用到mysql資料庫中。

mysql資料庫支援單向,雙向,鍊式級聯,環狀等不同業務場景的複製,一台伺服器充當主伺服器master,接收來自使用者的更新,而一個或多個其他伺服器充當從伺服器slave,接收來自主伺服器binlog檔案的日誌內容,解析出sql,更新到從伺服器。

一主一從(A -> B, A為主,B為從)

一主多從(A -> B, A -> C, A為主,B與C為從)

雙主雙向同步(A -> B , B -> A , A與B同為主,互相備份)

線性級聯(A -> B -> C , A與B主主互備,C為從)

#環狀級聯(A -> B -> C -> A, A、 B、C都為主,各節點都可寫入資料)

二、實作mysql主從讀寫分離的方案

1.透過程式實作讀寫分離(判斷語句關鍵字,去連接主從資料庫)

2、透過開源的軟體實現讀寫分離(mysql-proxy,amoeba,穩定性與功能一般,不建議生產使用)

3、獨立開發DAL層軟體

#三、mysql主從複製原理介紹

mysql主從複製是一個非同步的複製過程,將一個主函式庫複製到一個從函式庫,master與slave之間實作整個過程是由三個執行緒參與完成。其中sql線程與I/O線程在slave端,另一個I/O線程在master端。

複製原理程序

1、在slave上執行start slave指令,開啟主從複製開關,開始進行主從複製。

2、slave的I/O執行緒透過master上已經授權的複製使用者請求master,請求指定binlog日誌的指定位置。

3、master接收slave的I/O執行緒的請求後,其自身負責複製的I/O執行緒會根據slave的請求資訊分批讀取指定binlog日誌的指定位置之後的日誌訊息,然後回傳給slave的I/O線程,回傳資訊除了binlog日誌外,還有master的新binlog檔名稱,以及新binlog中的下一個指定更新位置。

4、slave取得來自master上I/O執行緒發送的binlog日誌內容,日誌檔案及位置點後,會將binlog內容依序寫到slave自身的relay log(中繼日誌)檔案尾部,並將新的binlog檔名和位置記錄到master-info檔中,以便下次從master讀取新binlog日誌時,能告訴master從新binlog的新位置讀取。

5、slave的sql線程會即時偵測本地relay log中I/O線程新增加的日誌內容,及時把relay log檔案中的內容解析成sql語句,並按解析sql語句的位置順序執行這些sql語句。 relay-log.info中記錄目前應用程式中繼日誌的檔案名稱及位置點。

四、mysql主從複製操作

#我這裡是mysql單機多實例,3306、3308、3309

主庫為3306,從庫為3308,3309

(1)、在master主庫上

1、設定server-id值並開啟binlog功能

> vi /etc/my.cnf
登入後複製
 [mysqld]
 #用于同步的每台机器server-id都不能相同

server-id = 10

log-bin = /data/mysql56/data/mysql-bin
登入後複製

2、重啟主庫

> service mysqld restart
登入後複製

3、登陸主庫,查看server-id

> mysql -uroot -p

> show variables like 'server_id';
登入後複製

4、主庫上建立用於從庫複製的帳號

> grant replication slave on *.* to "rep"@"%" identified by "123456";

> flush privileges;

> select user,host from mysql.user;

> show grants for rep@"%";
登入後複製

5、對主庫資料庫鎖定表只讀(目前視窗不要關掉)

> flush table with read lock;
登入後複製

查看主庫狀態

> show master status;
登入後複製

6 、備份主庫所有資料檔

> mysqldump -uroot -p -A -B | gzip > /data/mysql_bak.$(date +%F).sql.gz
登入後複製

7、備份完主庫資料後,解鎖

> unlock tables;
登入後複製

8、把主庫匯出的資料移轉到從庫

( 2)、在slave從庫上

1、設定server-id值並關閉binlog功能  

①有兩種情況下需開啟binlog   

②級聯同步A->B->C中間的B,就要開啟binlog   

③在從庫做資料庫備份,必須要有全備和binlog日誌才是完整備份。

> vi /mysql-instance/3308/my.cnf 

[mysqld]

server-id = 11

relay-log = /mysql-instance/3308/relay-bin

relay-log-info-file = /mysql-instance/3308/relay-log.info
登入後複製

2、重新啟動從庫

> /mysql-instance/3308/mysql restart
登入後複製

3、登陸從庫檢查參數

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock

> show variables like 'log_bin';

> show variables like 'server_id';
登入後複製

4、將主庫mysqldump導出的資料恢復到從庫

> gzip -d /data/mysql_bak.2017-01-15.sql.gz
登入後複製

 把主庫資料還原到從庫

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock < /data/mysql_bak.2017-01-15.sql
登入後複製

5、登入從庫,設定複製參數

CHANGE MASTER TO

MASTER_HOST=&#39;127.0.0.1&#39;,

MASTER_PORT=3306,

MASTER_USER=&#39;rep&#39;,

MASTER_PASSWORD=&#39;123456&#39;,

MASTER_LOG_FILE=&#39;mysql-bin.000001&#39;,

MASTER_LOG_POS=396;
登入後複製

注意上面的MASTER_LOG_FILE和MASTER_LOG_POS是在主庫中用show master status;查看的資訊。

查看master.info檔

> cat /mysql-instance/3308/data/master.info
登入後複製

6、啟動從庫同步開關,測試主從複製情況

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "start slave;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show slave status\G" | egrep "IO_Running|SQL_Running|_Behind_Master"
登入後複製

7、測試主從複製

> mysql -uroot -p -e "create database wohehe;"

> mysql -uroot -p -S /mysql-instance/3308/mysql.sock -e "show databases;"
登入後複製

五、mysql主从复制线程状态说明及用途

1、主库线程的同步状态

> show processlist\G; 


*************************** 1. row ***************************

   Id: 5

  User: rep

  Host: localhost:47605

   db: NULL

Command: Binlog Dump

  Time: 4728

 State: Master has sent all binlog to slave; waiting for binlog to be updated

  Info: NULL
登入後複製

说明主库线程已从binlog读取更新,发送到了从库,线程处理空闲状态,等待binlog的事件更新。

2、从库线程的同频状态

> show processlist\G; 

*************************** 2. row ***************************

   Id: 6

  User: system user

  Host:

   db: NULL

Command: Connect

  Time: 5305

 State: Slave has read all relay log; waiting for the slave I/O thread to update it

  Info: NULL
登入後複製

说明从库已读取所有中继日志,等待从库I/O线程的更新。

六、主从复制故障

如果我在从库上创建了一个库,然后去主库创建同名的库,那么这就会冲突了。

> show slave status; 

Slave_IO_Running: Yes

Slave_SQL_Running: No

Seconds_Behind_Master: NULL

Last_Error: Error &#39;Can&#39;t create database &#39;xxxxx&#39;; database exists&#39; on query. Default database: &#39;xxxxx&#39;. Query: &#39;create database xxxxx&#39;
登入後複製

对于该冲突解决方法

方法一

> stop slave;

#将同步指针移动下一个,如果多次不同步,可重复操作

> set global sql_slave_skip_counter = 1;

> start slave;
登入後複製

方法二

> vi /mysql-instance/3308/my.cnf 

#把可以忽略的错误号事先在配置文件中配置

slave-skip-errors = 1002,1007,1032
登入後複製

以上是詳解centos7下mysql5.6的主從複製的範例程式碼分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

CentOS7各版本鏡像下載地址及版本說明(包括Everything版) CentOS7各版本鏡像下載地址及版本說明(包括Everything版) Feb 29, 2024 am 09:20 AM

載CentOS-7.0-1406的時候,有很多可選則的版本,對於普通用戶來說,不知道選擇哪個好,下面做一下簡單介紹:(1)CentOS-xxxx-LiveCD.ios和CentOS-xxxx- bin-DVD.iso有什麼差別?前者只有700M,後者有3.8G。其差異不僅在大小上,其更本質的差異是,CentOS-xxxx-LiveCD.ios只能載入到記憶體裡運行,不能安裝。 CentOS-xxx-bin-DVD1.iso才可以安裝到硬碟上。 (2)CentOS-xxx-bin-DVD1.iso,Ce

CentOS 7 緊急修復模式的進入步驟 CentOS 7 緊急修復模式的進入步驟 Jan 13, 2024 am 09:36 AM

打開centos7頁面出現:welcometoemergencymode! afterloggingin,type“journalctl-xb”toviewsystemlogs,“systemctlreboot”toreboot,“systemctldefault”totryagaintobootintodefaultmode。 giverootpasswordformaintenance(??Control-D???):解決方法:執行r

如何在CentOS 7中存取並清理/tmp目錄中的垃圾檔案? 如何在CentOS 7中存取並清理/tmp目錄中的垃圾檔案? Dec 27, 2023 pm 09:10 PM

centos7系統中tmp目錄下有很多垃圾,想要清除垃圾,該怎麼清除呢?下面我們就來看看詳細的教學。查看tmp檔案目錄下檔案列表,執行指令cdtmp/切換到tmp目前檔案目錄,執行ll指令,查看目前目錄下檔列表。如下圖所示。使用rm刪除檔案指令,需要注意的是rm指令是將檔案永遠從系統中刪除,因此建議在使用rm指令時,最好是在刪除檔案前給予提示。使用指令rm-i檔名,等用戶確認刪除(y)或跳過刪除(n),系統進行對應的操作。如下圖所示。

centos7如何設定密碼規則?centos7設定密碼規則的方法 centos7如何設定密碼規則?centos7設定密碼規則的方法 Jan 07, 2024 pm 01:17 PM

出於安全考慮設定密碼規則設定密碼到期的天數。使用者必須在天內更改密碼。此設定僅影響建立用戶,而不會影響現有用戶。如果設定為現有用戶,請執行指令「chage-M(days)(user)」。 PASS_MAX_DAYS60#密碼到期時間PASS_MIN_DAYS3#初始密碼更改時間PASS_MIN_LEN8#密碼最小長度PASS_WARN_AGE7#密碼過期提示時間重複密碼限制使用[root@linuxprobe~]#vi/etc/pam.d/system-auth#nearline15:

CENTOS7下如何安裝mbstring擴充? CENTOS7下如何安裝mbstring擴充? Jan 06, 2024 pm 09:59 PM

1.UncaughtError:Calltoundefinedfunctionmb_strlen();出現如上錯誤時,說明我們沒裝上mbstring擴展;2.進入PHP安裝目錄cd/temp001/php-7.1.0/ext/mbstring3.啟動phpize(/usr/local/bin /phpize或/usr/local/php7-abel001/bin/phpize)指令來安裝php擴充4../configure--with-php-config=/usr/local/php7-abel

CentOS7怎麼安裝Mysql並設定開機自啟動 CentOS7怎麼安裝Mysql並設定開機自啟動 Jun 02, 2023 pm 08:36 PM

centos7不帶mysql資料庫了,預設的資料庫是mariadb(mysql的一個分支)。可以依照以下步驟手動安裝mysql資料庫。 1.下載rpm安裝檔wgethttp://repo.mysql.com/mysql-community-release-el7.rpm2.執行rpm安裝rpm-ivhmysql-community-release-el7.rpm依賴解析完成後,出現下列選項:dependenciesresolved ===================================

centos7下解壓縮檔案指令(zip)詳解 centos7下解壓縮檔案指令(zip)詳解 Jan 07, 2024 pm 06:30 PM

1.壓縮資料夾為zip檔[root@cgls]#zip-rmydata.zipmydata2.把mydata.zip解壓縮到mydatabak目錄裡面[root@cgls]#unzipmydata.zip-dmydatabak3.mydata01資料夾和mydata02.txt mydata.zip[root@cgls]#zipmydata.zipmydata01mydata02.txt4.直接解壓縮mydata.zipmydata.zipmydata01mydata02.txt4.直接解壓縮mydata.zip檔[root@cgls]#unzipmydata.zip5.查看myd

如何修改和設定CentOS7的預設快捷鍵? 如何修改和設定CentOS7的預設快捷鍵? Jan 09, 2024 pm 06:14 PM

當預設快捷鍵與使用的軟體按鍵衝突或需要按照自己的習慣使用快捷鍵,這時候只好修改和設定預設快捷鍵,該怎麼修改CentOS7預設的快捷鍵額?下面我們就來看看詳細的教學。 1.開啟虛擬機器中的Centos7系統,進入桌面2、點選左上角的應用程式->系統工具->設定3、進入設定介面,點選裝置4、選擇Keyboard,點選右邊任一項,並在鍵盤上按下要設定的快捷鍵,即可更改其快捷鍵,(注意有些是無法更改的!)5、更改後如下所示,最後點擊設置,這樣快捷鍵的設定修改就完成了。

See all articles