成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

MySQL主從復制讀寫分離及奇怪的問題

galois / 1098人閱讀

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

聯(lián)系郵箱:[email protected]

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

當時是使用阿里云鏡像,安裝了兩臺ECS,結(jié)果配置MySQL的時候出現(xiàn)了UUID重復問題。
先從配置主從開始吧,值得記錄。

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

場景

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

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

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

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

3.對于讀操作為主的應用,使用讀寫分離是最好的場景,因為可以確保寫的服務器壓力更小,而讀又可以接受點時間上的延遲。

4.主從只負責各自的寫和讀,極大程度的緩解X鎖和S鎖爭用

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

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

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

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

9.分攤讀取。假如我們有1主3從,不考慮上述1中提到的從庫單方面設置,假設現(xiàn)在1 分鐘內(nèi)有10條寫入,150條讀取。那么,1主3從相當于共計40條寫入,而讀取總數(shù)沒變,因此平均下來每臺服務器承擔了10條寫入和50條讀?。ㄖ鲙觳?承擔讀取操作)。因此,雖然寫入沒變,但是讀取大大分攤了,提高了系統(tǒng)性能。另外,當讀取被分攤后,又間接提高了寫入的性能。所以,總體性能提高了,說白 了就是拿機器和帶寬換性能。MySQL官方文檔中有相關(guān)演算公式:官方文檔 見6.9FAQ之“MySQL復制能夠何時和多大程度提高系統(tǒng)性能”

原理

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

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

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

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

注意

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

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

主DB server開啟二進制日志,主DB server和從DB server的server_id及auto.cnf中的UUID都必須唯一

操作

1、主從服務器分別作以下操作:

  1.1、版本一致
  1.2、初始化表,并在后臺啟動mysql
  1.3、修改root的密碼

2、修改主服務器Master的MySQL配置文件

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

3、修改從服務器slave

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

4、重啟兩臺服務器的MySQL

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

5、在主服務器上建立帳戶并授權(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帳號,%表示所有客戶端都可能連,只要帳號、密碼正確,此處可用具體客戶端IP代替,如192.168.145.226,加強安全。

6、登錄主服務器的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í)行完此步驟后不要再操作主服務器MYSQL,防止主服務器狀態(tài)值變化

7、配置從服務器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; 

//注意不要斷開,308數(shù)字前后無單引號。
Mysql>start slave;    //啟動從服務器復制功能

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

  mysql> show slave statusG

   *************************** 1. row ***************************
              Slave_IO_State: Waiting for master to send event
              Master_Host: 192.168.2.222  //主服務器地址
              Master_User: slave   //授權(quán)帳戶名,盡量避免使用root
              Master_Port: 3306    //數(shù)據(jù)庫端口,部分版本沒有此行
              Connect_Retry: 60
              Master_Log_File: mysql-bin.000004
              Read_Master_Log_Pos: 600   //#同步讀取二進制日志的位置,大于等于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進程必須正常運行,即YES狀態(tài),否則都是錯誤的狀態(tài)(如:其中一個NO均屬錯誤)。

以上操作過程,主從服務器配置完成。

10、監(jiān)控:

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

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

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的值,使兩臺MySQL不同即可,

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

修改后重啟MySQL服務。

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67236.html

相關(guān)文章

發(fā)表評論

0條評論

galois

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<