激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

Mysql|Sql Server|Oracle|Redis|MongoDB|PostgreSQL|Sqlite|DB2|mariadb|Access|數(shù)據(jù)庫技術|

服務器之家 - 數(shù)據(jù)庫 - Mysql - MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)

MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)

2019-11-16 16:17火丁筆記 Mysql

首先主服務器把數(shù)據(jù)變化記錄到主日志,然后從服務器通過I/O線程讀取主服務器上的主日志,并且把它寫入到從服務器的中繼日志中,接著SQL線程讀取中繼日志,并且在從服務器上重放,從而實現(xiàn)MySQL復制。

同MongoDB,Redis這樣的NoSQL數(shù)據(jù)庫的復制相比,MySQL復制顯得相當復雜! 

概述 

首先主服務器把數(shù)據(jù)變化記錄到主日志,然后從服務器通過I/O線程讀取主服務器上的主日志,并且把它寫入到從服務器的中繼日志中,接著SQL線程讀取中繼日志,并且在從服務器上重放,從而實現(xiàn)MySQL復制。具體如下圖所示: 
MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)
整個過程反映到從服務器上,對應三套日志信息,可在從服務器上用如下命令查看: 

復制代碼代碼如下:


mysql> SHOW SLAVE STATUS; 



Master_Log_File & Read_Master_Log_Pos:下一個傳輸?shù)闹魅罩拘畔ⅰ?nbsp;
Relay_Master_Log_File & Exec_Master_Log_Pos:下一個執(zhí)行的主日志信息。 
Relay_Log_File & Relay_Log_Pos:下一個執(zhí)行的中繼日志信息。 
理解這些日志信息的含義對于解決故障至關重要,后文會詳細闡述。 
安裝 
先在主服務器上創(chuàng)建復制賬號: 

復制代碼代碼如下:


mysql> GRANT REPLICATION SLAVE ON *.* 
TO '<SLAVE_USER>'@'<SLAVE_HOST>' 
IDENTIFIED BY '<SLAVE_PASSWORD>'; 


注:出于安全性和靈活性的考慮,不要把root等具有SUPER權限用戶作為復制賬號。然后設置主服務器配置文件(缺省:/etc/my.cnf):

復制代碼代碼如下:


[mysqld] 

server_id = 100 
log_bin = mysql-bin 
log_bin_index = mysql-bin.index 
sync_binlog = 1 
innodb_flush_log_at_trx_commit = 1 
innodb_support_xa = 1 

 

注:一定要保證主從服務器各自的server_id唯一,避免沖突。

注:如果沒有指定log_bin的話,缺省會使用主機名作為名字,如此一來一旦主機名發(fā)生改變,就會出問題,所以推薦指定log_bin(從服務器的relay_log存在一樣的問題)。

注:sync_binloginnodb_flush_log_at_trx_commit,innodb_support_xa三個選項都是出于安全目的設置的,不是復制的必須選項。

接著設置從服務器配置文件(缺?。?etc/my.cnf):

復制代碼代碼如下:


[mysqld] 
server_id = 200 
log_bin = mysql-bin 
log_bin_index = mysql-bin.index 
relay_log = mysql-relay-bin 
relay_log_index = mysql-relay-bin.index 
read_only = 1 
skip_slave_start = 1 
log_slave_updates = 1 


注:如果用戶有SUPER權限,則read_only無效。

 

注:有了skip_slave_start,除非使用START SLAVE命令,否則從服務器不會開始復制。

注:設置log_slave_updates,讓從服務器記錄日志,有助于在必要時把從切換成主。

下面最重要的步驟是如何克隆一份主服務器的數(shù)據(jù):

如果數(shù)據(jù)庫使用的是MyISAM表類型的話,可按如下方式操作:

復制代碼代碼如下:


shell> mysqldump --all-databases --master-data=1 > data.sql 


注:master-data選項缺省會打開lock-all-tables,并寫入CHANGE MASTER TO語句。

 

如果數(shù)據(jù)庫使用的是InnoDB表類型的話,則應該使用single-transcation

復制代碼代碼如下:


shell> mysqldump --all-databases --single-transaction --master-data=1 > data.sql 


有了數(shù)據(jù)文件,傳輸?shù)綇姆掌魃喜耄?nbsp;

復制代碼代碼如下:


shell> mysql < data.sql 


如果數(shù)據(jù)量很大的話,mysqldump會非常慢,此時直接拷貝數(shù)據(jù)文件能節(jié)省不少時間: 
在拷貝之前要先鎖定數(shù)據(jù),然后再獲得相關的日志信息(FILE & POSITION): 

復制代碼代碼如下:


mysql> FLUSH TABLES WITH READ LOCK; 
mysql> SHOW MASTER STATUS; 


接下來拷貝數(shù)據(jù)文件時,如果是MyISAM表類型的話,直接拷貝即可;如果是InnoDB表類型的話,一定要先停止MySQL服務再拷貝,否則拷貝文件可能無法使用。把拷貝的數(shù)據(jù)文件直接復制到從服務器的數(shù)據(jù)目錄。 
最后還需要再指定一下日志信息: 

復制代碼代碼如下:


mysql> CHANGE MASTER TO 
MASTER_HOST='<MASTER_HOST>', 
MASTER_USER='<SLAVE_USER>', 
MASTER_PASSWORD='<SLAVE_PASSWORD>', 
MASTER_LOG_FILE='<FILE>', 
MASTER_LOG_POS=<POSITION>; 




注:不要在my.cnf配置文件里設置MASTER_USER和MASTER_PASSWORD,因為最終生效的是CHANGE MASTER TO生成的master.info文件里的信息。 

在主服務器上直接拷貝數(shù)據(jù)文件雖然很快,但需要鎖表或者停止服務,這會影響線上服務。如果先前已經(jīng)有了從服務器,那么可以用舊的從服務器做母本來克隆新的從服務器: 

先在舊的從服務器上查詢?nèi)罩拘畔ⅲ?nbsp;

復制代碼代碼如下:


mysql> SHOW SLAVE STATUS; 




我們需要的是其中的Relay_Master_Log_File & Exec_Master_Log_Pos。 

然后在舊的從服務器上按照前面的方法得到數(shù)據(jù),并在新的從服務器上還原。 

接著在新的從服務器上設置日志信息: 

復制代碼代碼如下:


mysql> CHANGE MASTER TO 
MASTER_HOST='<MASTER_HOST>', 
MASTER_USER='<SLAVE_USER>', 
MASTER_PASSWORD='<SLAVE_PASSWORD>', 
MASTER_LOG_FILE='<Relay_Master_Log_File>', 
MASTER_LOG_POS=<Exec_Master_Log_Pos>; 



不管用那個方法,最后記得在從服務器上啟動復制,并檢查工作是否正常: 

復制代碼代碼如下:


mysql> START SLAVE; 
mysql> SHOW SLAVE STATUS; 


如果IO線程和SQL線程都顯示Yes,就可以感謝上帝了: 

Slave_IO_Running 對應:Master_Log_File & Read_Master_Log_Pos 

Slave_SQL_Running 對應:Relay_Master_Log_File & Exec_Master_Log_Pos 

如果顯示No,則說明前面某些配置步驟出錯,或者對應的日志文件有問題。 

故障 

問題:主從復制不止何故停止了,我該怎么辦? 

答案:復制錯誤多半是因為日志錯誤引起的,所以首先要搞清楚是主日志錯誤還是中繼日志錯誤,從錯誤信息里一般就能判斷,如果不能可以使用類似下面的mysqlbinlog命令: 

復制代碼代碼如下:


shell> mysqlbinlog <MASTER_BINLOG_FILE> > /dev/null 
shell> mysqlbinlog <SLAVE_BINLOG_FILE> > /dev/null 


如果沒有錯誤,則不會有任何輸出,反之如果有錯誤,則會顯示出來。 
如果是主日志錯誤,則需要在從服務器使用SET GLOBAL sql_slave_skip_counter,如下:

復制代碼代碼如下:


mysql> SET GLOBAL sql_slave_skip_counter = 1; 
mysql> START SLAVE; 



注:如果有多個錯誤,可能需要執(zhí)行多次(提醒:主從服務器數(shù)據(jù)可能因此不一致)。 
如果是中繼日志錯誤,只要在從服務器使用SHOW SLAVE STATUS結果中的日志信息重新CHANGE MASTER TO即可,系統(tǒng)會拋棄當前的中繼日志,重新下載: 

復制代碼代碼如下:


mysql> CHANGE MASTER TO 
MASTER_LOG_FILE='<Relay_Master_Log_File>', 
MASTER_LOG_POS=<Exec_Master_Log_Pos>; 
mysql> START SLAVE; 



至于為什么使用的是Relay_Master_Log_File & Exec_Master_Log_Pos,參見概述。 
問題:主服務器宕機了,如何把從服務器提升會主服務器? 
答案:在一主多從的環(huán)境總,需選擇數(shù)據(jù)最新的從服務器做新的主服務器。如下圖所示: 
MySQL復制的概述、安裝、故障、技巧、工具(火丁分享)

 

提升從服務器為主服務器

在一主(Server1)兩從(Server2,、Server3)的環(huán)境中,Server1宕機后,等到Server1和Server2把宕機前同步到的日志都執(zhí)行完,比較Master_Log_File和Read_Master_Log_Pos就可以判斷出誰快誰慢,因為Server2從 Server1同步的數(shù)據(jù)(1582)比Server3從Server1同步的數(shù)據(jù)(1493)新,所以應該提升Server2為新的主服務器,那么 Server3在CHANGE MASTER TO到Server2的時候應該使用什么樣的參數(shù)呢?1582-1493=89,而Server2的最后的二進制日志位置是8167,所以答案是 8167-89=8078。

技巧

主從服務器中的表可以使用不同的表類型。比如主服務器可以使用InnoDB表類型,提供事務,行鎖等高級特性,從服務器可以使用MyISAM表類型,內(nèi)存消耗少,易備份等優(yōu)點。還有一個例子,一臺主服務器如果同時帶很多個從服務器的話,勢必會影響其性能,此時可以拿出一臺服務器作為從服務器代理,使用BLACKHOLE表類型,只記錄日志,不寫數(shù)據(jù),由它帶多臺從服務器,從而提升性能。

主從服務器中的表可以使用不同的鍵類型。比如主服務器用InnoDB,鍵用VARCHAR的話節(jié)省空間,從服務器使用MyISAM,鍵用CHAR提高速度,因為MyISAM有靜態(tài)表一說。

主從服務器中的表可以使用不同的索引。主服務器主要用來應付寫操作,所以除了主鍵和唯一索引等保證數(shù)據(jù)關系的索引一般都可以不加,從服務器一般用來應付讀操作,所以可以針對查詢特征設置索引,再進一步,不同的從服務器可以針對不同的查詢設置不同的索引。

工具

有一些優(yōu)秀的工具可以讓你的復制工作得到事半功倍的效果,詳細內(nèi)容請參考各自文檔:

Multi-Master Replication Manager for MySQL

Percona XtraBackup

Maatkit

Tungsten-replicator

此外,Google Project Hosting里還有很多有趣的項目,可用mysql+replication標簽搜索。

說明:本文參考了下面列出的書籍中相關的內(nèi)容:

High Performance MySQL: Optimization, Backups, Replication, and More

MySQL High Availability: Tools for Building Robust Data Centers

(來源:火丁筆記

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 免费国产在线视频 | 黄色免费在线电影 | 中文字幕四区 | 欧美日韩经典在线 | 91色一区二区三区 | 成人免费福利视频 | 国产黄色一区二区 | 欧美人与牲禽动交精品一区 | 九九热精品视频在线播放 | 成熟女人特级毛片www免费 | 主人在调教室性调教女仆游戏 | 日本a∨精品中文字幕在线 欧美1—12sexvideos | 久久精品一级片 | av不卡免费在线观看 | 国产在线免 | 成人一级黄色 | 免费一级毛片在线播放视频 | 国产精品午夜小视频观看 | 久久国产精品久久精品国产演员表 | 黄色av网站在线观看 | 91成人亚洲 | 久久亚洲线观看视频 | 欧美日韩高清一区二区三区 | 欧美性生活免费视频 | 久久精品欧美视频 | 日韩黄色av | 国产一区二区在线观看视频 | 91 在线视频观看 | 国产午夜精品久久久久久免费视 | 国产成人免费高清激情视频 | 97视频| 国产午夜精品一区二区三区嫩草 | 免费看一级视频 | 日本在线播放一区二区 | 曰批全过程40分钟免费视频多人 | 成人福利在线免费观看 | 依人九九宗合九九九 | av免费不卡国产观看 | 一区二区三区视频在线 | 日韩视频一二三 | 色欧美视频 |