国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MySQL主從復(fù)制讀寫分離及奇怪的問(wèn)題

galois / 1085人閱讀

摘要:當(dāng)時(shí)是使用阿里云鏡像,安裝了兩臺(tái),結(jié)果配置的時(shí)候出現(xiàn)了重復(fù)問(wèn)題。以上操作過(guò)程,主從服務(wù)器配置完成。監(jiān)控?fù)?jù)說(shuō)可以編寫一腳本,用監(jiān)控的兩個(gè)及進(jìn)程,如發(fā)現(xiàn)只有一個(gè)或零個(gè),就表明主從有問(wèn)題了。

聯(lián)系郵箱:hi@jackcool.net

一直都沒(méi)有寫blog的習(xí)慣,以前總覺(jué)得自己的腦子就是最好的記憶容器,現(xiàn)在覺(jué)得我好像有個(gè)假腦子。

當(dāng)時(shí)是使用阿里云鏡像,安裝了兩臺(tái)ECS,結(jié)果配置MySQL的時(shí)候出現(xiàn)了UUID重復(fù)問(wèn)題。
先從配置主從開(kāi)始吧,值得記錄。

文中很多部分引用了網(wǎng)絡(luò)上的零碎資料!

場(chǎng)景

一般應(yīng)用對(duì)數(shù)據(jù)庫(kù)而言都是“讀多寫少”,也就說(shuō)對(duì)數(shù)據(jù)庫(kù)讀取數(shù)據(jù)的壓力比較大,有一個(gè)思路就是說(shuō)采用數(shù)據(jù)庫(kù)集群的方案,
基本的原理是讓主數(shù)據(jù)庫(kù)處理事務(wù)性查詢,而從數(shù)據(jù)庫(kù)處理SELECT查詢。數(shù)據(jù)庫(kù)復(fù)制被用來(lái)把事務(wù)性查詢導(dǎo)致的變更同步到集群中 的從數(shù)據(jù)庫(kù)。 當(dāng)然,主服務(wù)器也可以提供查詢服務(wù)。使用讀寫分離最大的作用無(wú)非是環(huán)境服務(wù)器壓力

讀寫分離的好處(資料):

1.MySQL復(fù)制另外一大功能是增加冗余,提高可用性,當(dāng)一臺(tái)數(shù)據(jù)庫(kù)服務(wù)器宕機(jī)后能通過(guò)調(diào)整另外一臺(tái)從庫(kù)來(lái)以最快的速度恢復(fù)服務(wù),因此不能光看性能,也就是說(shuō)1主1從也是可以的。

2.多機(jī)器(集群)的處理能力

3.對(duì)于讀操作為主的應(yīng)用,使用讀寫分離是最好的場(chǎng)景,因?yàn)榭梢源_保寫的服務(wù)器壓力更小,而讀又可以接受點(diǎn)時(shí)間上的延遲。

4.主從只負(fù)責(zé)各自的寫和讀,極大程度的緩解X鎖和S鎖爭(zhēng)用

5.從庫(kù)可配置myisam引擎,提升查詢性能以及節(jié)約系統(tǒng)開(kāi)銷

6.從庫(kù)同步主庫(kù)的數(shù)據(jù)和主庫(kù)直接寫還是有區(qū)別的,通過(guò)主庫(kù)發(fā)送來(lái)的binlog恢復(fù)數(shù)據(jù),但是,最重要區(qū)別在于主庫(kù)向從庫(kù)發(fā)送binlog是異步的,從庫(kù)恢復(fù)數(shù)據(jù)也是異步的

7.讀寫分離適用與讀遠(yuǎn)大于寫的場(chǎng)景,如果只有一臺(tái)服務(wù)器,當(dāng)select很多時(shí),update和delete會(huì)被這些select訪問(wèn)中的數(shù)據(jù)堵塞,等待select結(jié)束,并發(fā)性能不高。 對(duì)于寫和讀比例相近的應(yīng)用,應(yīng)該部署雙主相互復(fù)制

8.可以在從庫(kù)啟動(dòng)是增加一些參數(shù)來(lái)提高其讀的性能,例如--skip-innodb、--skip-bdb、--low-priority-updates以及--delay-key-write=ALL。當(dāng)然這些設(shè)置也是需要根據(jù)具體業(yè)務(wù)需求來(lái)定得,不一定能用上

9.分?jǐn)傋x取。假如我們有1主3從,不考慮上述1中提到的從庫(kù)單方面設(shè)置,假設(shè)現(xiàn)在1 分鐘內(nèi)有10條寫入,150條讀取。那么,1主3從相當(dāng)于共計(jì)40條寫入,而讀取總數(shù)沒(méi)變,因此平均下來(lái)每臺(tái)服務(wù)器承擔(dān)了10條寫入和50條讀取(主庫(kù)不 承擔(dān)讀取操作)。因此,雖然寫入沒(méi)變,但是讀取大大分?jǐn)偭耍岣吡讼到y(tǒng)性能。另外,當(dāng)讀取被分?jǐn)偤螅珠g接提高了寫入的性能。所以,總體性能提高了,說(shuō)白 了就是拿機(jī)器和帶寬換性能。MySQL官方文檔中有相關(guān)演算公式:官方文檔 見(jiàn)6.9FAQ之“MySQL復(fù)制能夠何時(shí)和多大程度提高系統(tǒng)性能”

原理

MySQL主(稱master)從(稱slave)復(fù)制的原理:

master將數(shù)據(jù)改變記錄到二進(jìn)制日志(binary log)中,也即是配置文件log-bin指定的文件(這些記錄叫做二進(jìn)制日志事件,binary log events)

slave將master的binary log events拷貝到它的中繼日志(relay log)

slave重做中繼日志中的事件,將改變反映它自己的數(shù)據(jù)(數(shù)據(jù)重演)

注意

主DB server和從DB server數(shù)據(jù)庫(kù)的版本一致

主DB server和從DB server數(shù)據(jù)庫(kù)數(shù)據(jù)一致,這里就會(huì)可以把主的備份在從上還原,也可以直接將主的數(shù)據(jù)目錄拷貝到從的相應(yīng)數(shù)據(jù)目錄

主DB server開(kāi)啟二進(jìn)制日志,主DB server和從DB server的server_id及auto.cnf中的UUID都必須唯一

操作

1、主從服務(wù)器分別作以下操作:

  1.1、版本一致
  1.2、初始化表,并在后臺(tái)啟動(dòng)mysql
  1.3、修改root的密碼

2、修改主服務(wù)器Master的MySQL配置文件

$ vi /etc/my.cnf(默認(rèn))
[mysqld]
log-bin=mysql-bin     //[必須]啟用二進(jìn)制日志
server-id=93      //[必須]服務(wù)器唯一ID,默認(rèn)是1,一般取IP最后一段
# 指定同步的數(shù)據(jù)庫(kù), 如果 不指定則同步全部數(shù)據(jù)庫(kù)
binlog-do-db= testdb

3、修改從服務(wù)器slave

$ vi /etc/my.cnf
[mysqld]
server-id=211      //[必須]服務(wù)器唯一ID,默認(rèn)是1,一般取IP最后一段

4、重啟兩臺(tái)服務(wù)器的MySQL

$ /etc/init.d/mysql restart
或
$ service mysqld restart

5、在主服務(wù)器上建立帳戶并授權(quán)slave:

$ /usr/local/mysql/bin/mysql -uroot -p 或直接 mysql -u root -p
mysql>GRANT REPLICATION SLAVE ON *.* to "slave"@"%" identified by "123456"; 
mysql>flush privileges;
//一般不用root帳號(hào),%表示所有客戶端都可能連,只要帳號(hào)、密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強(qiáng)安全。

6、登錄主服務(wù)器的MySQL,查詢Master的狀態(tài)

   mysql>show master statusG;

   +-------------+----------+--------------+------------+
   | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
   +-------------+----------+--------------+------------+
   | mysql-bin.000004 |      308 |              |                  |
   +-------------+----------+--------------+------------+
   1 row in set (0.00 sec)

注:執(zhí)行完此步驟后不要再操作主服務(wù)器MYSQL,防止主服務(wù)器狀態(tài)值變化

7、配置從服務(wù)器Slave:

mysql>change master to master_host="192.168.145.222",master_user="slave",master_password="123456",
master_log_file="mysql-bin.000004",master_log_pos=308; 

//注意不要斷開(kāi),308數(shù)字前后無(wú)單引號(hào)。
Mysql>start slave;    //啟動(dòng)從服務(wù)器復(fù)制功能

8、檢查從服務(wù)器(Slave)復(fù)制功能狀態(tài):

  mysql> show slave statusG

   *************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.2.222  //主服務(wù)器地址
              Master_User: slave   //授權(quán)帳戶名,盡量避免使用root
              Master_Port: 3306    //數(shù)據(jù)庫(kù)端口,部分版本沒(méi)有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600   //#同步讀取二進(jìn)制日志的位置,大于等于Exec_Master_Log_Pos
              Relay_Log_File: ddte-relay-bin.000003
              Relay_Log_Pos: 251
              Relay_Master_Log_File: mysql-bin.000004
              Slave_IO_Running: Yes    //此狀態(tài)必須YES
              Slave_SQL_Running: Yes     //此狀態(tài)必須YES
                    ......

注:Slave_IO及Slave_SQL進(jìn)程必須正常運(yùn)行,即YES狀態(tài),否則都是錯(cuò)誤的狀態(tài)(如:其中一個(gè)NO均屬錯(cuò)誤)。

以上操作過(guò)程,主從服務(wù)器配置完成。

10、監(jiān)控:

據(jù)說(shuō)可以編寫一shell腳本,用nagios監(jiān)控slave的兩個(gè)yes(Slave_IO及Slave_SQL進(jìn)程),如發(fā)現(xiàn)只有一個(gè)或零個(gè)yes,就表明主從有問(wèn)題了。
問(wèn)題

配置mysql主從時(shí),由于是阿里云鏡像系統(tǒng)盤拷貝的MySQL目錄,導(dǎo)致主從MySQL UUID相同, Slave_IO無(wú)法啟動(dòng),報(bào)錯(cuò)信息如下:

The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.

解決辦法:

mysql>show variables like "%log_error%";//查看配置的日志地址,查看日志

修改MySQL data 目錄下auto.cnf 文件中uuid的值,使兩臺(tái)MySQL不同即可,

$ find / -name auto.cnf 或 find / -name "auto.cnf"

修改后重啟MySQL服務(wù)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/67236.html

相關(guān)文章

發(fā)表評(píng)論

0條評(píng)論

galois

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<