本篇內(nèi)容介紹了“如何安裝配置MySQL主從”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站設(shè)計(jì)、網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的襄城網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!
環(huán)境:
主從服務(wù)器上的MySQL版本同為5.1.34
主機(jī)IP:192.168.0.1
從機(jī)IP:192.168.0.2
一. MySQL主服務(wù)器配置
1.編輯配置文件/etc/my.cnf
# 確保有如下行
server-id = 1
log-bin=-bin
binlog-do-db=mysql #需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
binlog-ignore-db=mysql #不需要備份的數(shù)據(jù)庫(kù)名,如果備份多個(gè)數(shù)據(jù)庫(kù),重復(fù)設(shè)置這個(gè)選項(xiàng)即可
log-slave-updates #這個(gè)參數(shù)一定要加上,否則不會(huì)給更新的記錄些到二進(jìn)制文件里
slave-skip-errors #是跳過錯(cuò)誤,繼續(xù)執(zhí)行復(fù)制操作
2.建立用戶
mysql> grant replication slave on *.* to identified by ‘111111′;
# grant replication slave on *.* to ‘用戶名主機(jī)’ identified by ‘密碼’;
# 可在Slave上做連接測(cè)試: mysql -h 192.168.0.1 -u test -p
3.鎖主庫(kù)表
mysql> FLUSH TABLES WITH READ LOCK;
4.顯示主庫(kù)信息
記錄File和Position,從庫(kù)設(shè)置將會(huì)用到
=====================
mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_do_db | Binlog_ignore_db |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 106 | | |
+------------------+----------+--------------+------------------+
5.另開一個(gè)終端,打包主庫(kù)
cd /usr/local/mysql #mysql庫(kù)目錄
tar zcvf var.tar.gz var
============================
二.MySQL從服務(wù)器配置
1、傳輸拿到主庫(kù)數(shù)據(jù)包、解包
# cd /usr/local/mysql
# scp 192.168.0.1:/usr/local/mysql/var.tar.gz .
# tar zxvf var.tar.gz
2、查看修改var文件夾權(quán)限
# chown -R mysql:mysql var
3.編輯 /etc/my.cnf
server-id=2
log-bin=mysql-bin
master-host=192.168.0.1
master-user=slave
master-password=111111
master-port=3306
replicate-do-db=test #需要備份的數(shù)據(jù)庫(kù)名
replicate-ignore-db=mysql #忽略的數(shù)據(jù)庫(kù)
master-connect-retry=60 #如果從服務(wù)器發(fā)現(xiàn)主服務(wù)器斷掉,重新連接的時(shí)間差(秒)
log-slave-updates #這個(gè)參數(shù)一定要加上,否則不會(huì)給更新的記錄些到二進(jìn)制文件里
slave-skip-errors #是跳過錯(cuò)誤,繼續(xù)執(zhí)行復(fù)制操作
4、驗(yàn)證連接MASTER
# mysql -h292.168.0.1 -uslave -ppassword
mysql> show grants for ;
5、在SLAVE上設(shè)置同步
設(shè)置連接MASTER MASTER_LOG_FILE為主庫(kù)的File,MASTER_LOG_POS為主庫(kù)的Position
============================
mysql> slave stop;
mysql> CHANGE MASTER TO MASTER_HOST=192.168.0.1,MASTER_USER=slave,MASTER_PASSWORD=111111,MASTER_LOG_FILE=mysql-bin.000001,MASTER_LOG_POS=106;
6、啟動(dòng)SLAVE服務(wù)
mysql> slave start;
7、查看SLAVE狀態(tài)
mysql> SHOW SLAVE STATUSG;
其中 Slave_IO_Running 和 Slave_SQL_Running 兩列的值都為 "Yes",表明 Slave 的 I/O 和 SQL 線程都在正常運(yùn)行。
8、解鎖主庫(kù)表
mysql> UNLOCK TABLES;
到此主從庫(kù)搭建成功??梢栽谥鲙?kù)上插入數(shù)據(jù)測(cè)試同步是否正常。
常見錯(cuò)誤及解決方法:
常見問題的處理:
1:在從庫(kù)上面show slave statusG;出現(xiàn)下列情況,
Slave_IO_Running: Yes
Slave_SQL_Running: No
Seconds_Behind_Master: NULL
原因:
a.程序可能在slave上進(jìn)行了寫操作
b.也可能是slave機(jī)器重起后,事務(wù)回滾造成的.
解決方法:
進(jìn)入master
mysql> show master status;
+----------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+----------+--------------+------------------+
| mysql-bin.000040 | 324 | | |
+----------------------+----------+--------------+------------------+
然后到slave服務(wù)器上執(zhí)行手動(dòng)同步
slave stop;
change master to
master_host=10.14.0.140,
master_user=repl,
master_password=111111,
master_port=3306,
master_log_file=mysql-bin.000040,
master_log_pos=324;
slave start;
show slave statusG;
2、現(xiàn)象:從數(shù)據(jù)庫(kù)無法同步,show slave status顯示Slave_IO_Running為No,Seconds_Behind_Master為null
解決:重啟主數(shù)據(jù)庫(kù)
service mysql restart
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 | 98 | | |
+------------------+----------+--------------+------------------+
slave stop;
change master to Master_Log_File=mysql-bin.000001,Master_Log_Pos=98
slave start;
或是這樣:
stop slave;
set global sql_slave_skip_counter =1;
start slave;
這個(gè)現(xiàn)象主要是master數(shù)據(jù)庫(kù)存在問題,我在實(shí)際的操作中先重啟master后重啟slave即可解決這問題,出現(xiàn)此問題,必須要要重啟master數(shù)據(jù)庫(kù)。
1.主輔庫(kù)同步主要是通過二進(jìn)制日志來實(shí)現(xiàn)同步的。
2.在啟動(dòng)輔庫(kù)的時(shí)候必須先把數(shù)據(jù)同步,并刪除日志目錄下的:master.info文件。因?yàn)閙aster.info記錄了上次要連接主庫(kù)的信息,如果不刪除,即使my.cnf里進(jìn)行了修改,也不起作用。因?yàn)樽x取的還是master.info文件里的信息。
在mysql復(fù)制環(huán)境中,有8個(gè)參數(shù)可以讓我們控制,需要復(fù)制或需要忽略不進(jìn)行復(fù)制的DB或table分別為:
下面二項(xiàng)需要在Master上設(shè)置:
Binlog_Do_DB:設(shè)定哪些數(shù)據(jù)庫(kù)需要記錄Binlog
Binlog_Ignore_DB:設(shè)定哪里數(shù)據(jù)庫(kù)不需要記錄Binlog
優(yōu)點(diǎn)是Master端的Binlog記錄所帶來的Io量減少,網(wǎng)絡(luò)IO減少,還會(huì)讓slave端的IO線程,SQL線程減少,從而大幅提高復(fù)制性能,
缺點(diǎn)是mysql判斷是否需要復(fù)制某個(gè)事件不是根據(jù)產(chǎn)生該事件的查詢所在的DB,而是根據(jù)執(zhí)行查詢時(shí)刻所在的默認(rèn)數(shù)據(jù)庫(kù)(也就是登錄時(shí)指定的庫(kù)名或運(yùn)行"use database"中指定的DB),只有當(dāng)前默認(rèn)DB和配置中所設(shè)定的DB完全吻合時(shí)IO線程才會(huì)將該事件讀取給slave的IO線程.所以,如果在默認(rèn)DB和設(shè)定須要復(fù)制的DB不一樣的情況下改變了須要復(fù)制的DB中某個(gè)Table中的數(shù)據(jù),該事件是不會(huì)被復(fù)制到Slave中去的,這樣就會(huì)造成Slave端的數(shù)據(jù)和Master的數(shù)據(jù)不一致.同樣,在默認(rèn)的數(shù)據(jù)庫(kù)下更改了不須要復(fù)制的數(shù)據(jù)庫(kù)中的數(shù)據(jù),則會(huì)被復(fù)制到slave端,當(dāng)slave端并沒有該數(shù)據(jù)庫(kù)時(shí),則會(huì)造成復(fù)制出錯(cuò)而停止.
下面六項(xiàng)需要在slave上設(shè)置:
Replicate_Do_DB:設(shè)定需要復(fù)制的數(shù)據(jù)庫(kù),多個(gè)DB用逗號(hào)分隔
Replicate_Ignore_DB:設(shè)定可以忽略的數(shù)據(jù)庫(kù).
Replicate_Do_Table:設(shè)定需要復(fù)制的Table
Replicate_Ignore_Table:設(shè)定可以忽略的Table
Replicate_Wild_Do_Table:功能同Replicate_Do_Table,但可以帶通配符來進(jìn)行設(shè)置。
Replicate_Wild_Ignore_Table:功能同Replicate_Do_Table,功能同Replicate_Ignore_Table,可以帶通配符。
優(yōu)點(diǎn)是在slave端設(shè)置復(fù)制過濾機(jī)制,可以保證不會(huì)出現(xiàn)因?yàn)槟J(rèn)的數(shù)據(jù)庫(kù)問題而造成Slave和Master數(shù)據(jù)不一致或復(fù)制出錯(cuò)的問題.
缺點(diǎn)是性能方面比在Master端差一些.原因在于:不管是否須要復(fù)制,事件都會(huì)被IO線程讀取到Slave端,這樣不僅增加了網(wǎng)絡(luò)IO量,也給Slave端的IO線程增加了Relay Log的寫入量.
同步原理說明
MySQL的Replication基于主服務(wù)器在二進(jìn)制日志中跟蹤所有對(duì)數(shù)據(jù)庫(kù)的更改(更新、刪除等)。
MySQL使用3個(gè)線程來完成Replication工作,具體分布是主上1個(gè)相關(guān)線程、從上2個(gè)相關(guān)線程;
主的相關(guān)線程可以理解為主服務(wù)器上SHOW PROCESSLIST的輸出中的Binlog Dump線程、從服務(wù)器分別為IO和SQL線程;
主服務(wù)器創(chuàng)建將binlog中的內(nèi)容發(fā)送到從服務(wù)器。從服務(wù)器I/O線程讀取主服務(wù)器Binlog Dump線程發(fā)送的內(nèi)容并將該數(shù)據(jù)拷貝到從服務(wù)器數(shù)據(jù)目錄中的中繼日志文件(relay-log)里,SQL線程用于讀取中繼日志并執(zhí)行日志中包含的更新。
MySQL的Replication是單向,異步同步
MySQL同步機(jī)制基于master把所有對(duì)數(shù)據(jù)庫(kù)的更新、刪除等)都記錄在二進(jìn)制日志里。因此,想要啟用同步機(jī)制,在master就必須啟用二進(jìn)制日志。每個(gè)slave接受來自master上在二進(jìn)制日志中記錄的更新操作,因此在slave上執(zhí)行了這個(gè)操作的一個(gè)拷貝。應(yīng)該非常重要地意識(shí)到,二進(jìn)制日志只是從啟用二進(jìn)制日志開始的時(shí)刻才記錄更新操作的。所有的 slave必須在啟用二進(jìn)制日志時(shí)把master上已經(jīng)存在的數(shù)據(jù)拷貝過來。如果運(yùn)行同步時(shí)slave上的數(shù)據(jù)和master上啟用二進(jìn)制日志時(shí)的數(shù)據(jù)不一致的話,那么slave同步就會(huì)失敗。把master上的數(shù)據(jù)拷貝過來的方法之一實(shí)在slave上執(zhí)行 LOAD DATA FROM MASTER 語句。不過要注意,LOAD DATA FROM MASTER 是從MySQL 4.0.0之后才開始可以用的,而且只支持master上的 MyISAM 類型表。同樣地,這個(gè)操作需要一個(gè)全局的讀鎖,這樣的話傳送日志到slave的時(shí)候在master上就不會(huì)有更新操作了。當(dāng)實(shí)現(xiàn)了自由鎖表熱備份時(shí)(在 MySQL 5.0中),全局讀鎖就沒必要了。由于有這些限制,因此我們建議只在master上相關(guān)數(shù)據(jù)比較小的時(shí)候才執(zhí)行 LOAD DATA FROM MASTER 語句,或者在master上允許一個(gè)長(zhǎng)時(shí)間的讀鎖。由于每個(gè)系統(tǒng)之間 LOAD DATA FROM MASTER 的速度各不一樣,一個(gè)比較好的衡量規(guī)則是每秒能拷貝1MB數(shù)據(jù)。這只是的粗略的估計(jì),不過master和slave都是奔騰700MHz的機(jī)器且用 100MBit/s網(wǎng)絡(luò)連接時(shí)就能達(dá)到這個(gè)速度了。slave上已經(jīng)完整拷貝master數(shù)據(jù)后,就可以連接到master上然后等待處理更新了。如果 master當(dāng)機(jī)或者slave連接斷開,slave會(huì)定期嘗試連接到master上直到能重連并且等待更新。重試的時(shí)間間隔由 –master-connect-retry 選項(xiàng)來控制,它的默認(rèn)值是60秒。每個(gè)slave都記錄了它關(guān)閉時(shí)的日志位置。master是不知道有多少個(gè)slave連接上來或者哪個(gè)slave從什么時(shí)候開始更新。
MySQL同步功能由3個(gè)線程(master上1個(gè),slave上2個(gè))來實(shí)現(xiàn)。執(zhí)行 START SLAVE 語句后,slave就創(chuàng)建一個(gè)I/O線程。I/O線程連接到master上,并請(qǐng)求master發(fā)送二進(jìn)制日志中的語句。master創(chuàng)建一個(gè)線程來把日志的內(nèi)容發(fā)送到slave上。這個(gè)線程在master上執(zhí)行 SHOW PROCESSLIST 語句后的結(jié)果中的 Binlog Dump 線程便是。slave上的I/O線程讀取master的 Binlog Dump 線程發(fā)送的語句,并且把它們拷貝到其數(shù)據(jù)目錄下的中繼日志(relay logs)中。第三個(gè)是SQL線程,salve用它來讀取中繼日志,然后執(zhí)行它們來更新數(shù)據(jù)。如上所述,每個(gè)mster/slave上都有3個(gè)線程。每個(gè) master上有多個(gè)線程,它為每個(gè)slave連接都創(chuàng)建一個(gè)線程,每個(gè)slave只有I/O和SQL線程。在MySQL 4.0.2以前,同步只需2個(gè)線程(master和slave各一個(gè))。slave上的I/O和SQL線程合并成一個(gè)了,它不使用中繼日志。slave上使用2個(gè)線程的優(yōu)點(diǎn)是,把讀日志和執(zhí)行分開成2個(gè)獨(dú)立的任務(wù)。執(zhí)行任務(wù)如果慢的話,讀日志任務(wù)不會(huì)跟著慢下來。例如,如果slave停止了一段時(shí)間,那么 I/O線程可以在slave啟動(dòng)后很快地從master上讀取全部日志,盡管SQL線程可能落后I/O線程好幾的小時(shí)。如果slave在SQL線程沒全部執(zhí)行完就停止了,但I(xiàn)/O線程卻已經(jīng)把所有的更新日志都讀取并且保存在本地的中繼日志(relay-log)中了,因此在slave再次啟動(dòng)后就會(huì)繼續(xù)執(zhí)行它們了。這就允許在 master上清除二進(jìn)制日志,因?yàn)閟lave已經(jīng)無需去master讀取更新日志了。執(zhí)行 SHOW PROCESSLIST 語句就會(huì)告訴我們所關(guān)心的master和slave上發(fā)生的情況。
“如何安裝配置Mysql主從”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!
文章題目:如何安裝配置Mysql主從
當(dāng)前路徑:http://jinyejixie.com/article10/ipjgdo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導(dǎo)航、商城網(wǎng)站、網(wǎng)站改版、網(wǎng)站建設(shè)、服務(wù)器托管、網(wǎng)站排名
聲明:本網(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í)需注明來源: 創(chuàng)新互聯(lián)