成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MySQL復制的概述、安裝、故障、技巧、工具

數據庫 MySQL
同MongoDB,Redis這樣的NoSQL數據庫的復制相比,MySQL復制顯得相當復雜!下文中將為大家講解詳細的MySQL復制的概述、安裝、故障、技巧、工具的有關內容,希望大家能夠從中有所收獲。

同MongoDB,Redis這樣的NoSQL數據庫的復制相比,MySQL復制顯得相當復雜!接下來就是詳細的介紹,相信下文中的內容對大家掌握MySQL數據庫的復制是非常有幫助的。

概述

首先主服務器把數據變化記錄到主日志,然后從服務器通過I/O線程讀取主服務器上的主日志,并且把它寫入到從服務器的中繼日志中,接著SQL線程讀取中繼日志,并且在從服務器上重放,從而實現MySQL復制。具體如下圖所示:

MySQL復制

整個過程反映到從服務器上,對應三套日志信息,可在從服務器上用如下命令查看:

mysql> SHOW SLAVE STATUS;

Master_Log_File & Read_Master_Log_Pos:下一個傳輸的主日志信息。

 

Relay_Master_Log_File & Exec_Master_Log_Pos:下一個執行的主日志信息。

Relay_Log_File & Relay_Log_Pos:下一個執行的中繼日志信息。

理解這些日志信息的含義對于解決故障至關重要,后文會詳細闡述。

安裝

先在主服務器上創建復制賬號:

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的話,缺省會使用主機名作為名字,如此一來一旦主機名發生改變,就會出問題,所以推薦指定log_bin(從服務器的relay_log存在一樣的問題)。

注:sync_binlog,innodb_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,讓從服務器記錄日志,有助于在必要時把從切換成主。

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

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

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

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

 

如果數據庫使用的是InnoDB表類型的話,則應該使用single-transcation:

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

有了數據文件,傳輸到從服務器上并導入:

 

shell> mysql < data.sql

如果數據量很大的話,mysqldump會非常慢,此時直接拷貝數據文件能節省不少時間:

 

在拷貝之前要先鎖定數據,然后再獲得相關的日志信息(FILE & POSITION):

mysql> FLUSH TABLES WITH READ LOCK;

mysql> SHOW MASTER STATUS;

接下來拷貝數據文件時,如果是MyISAM表類型的話,直接拷貝即可;如果是InnoDB表類型的話,一定要先停止MySQL服務再拷貝,否則拷貝文件可能無法使用。把拷貝的數據文件直接復制到從服務器的數據目錄。

 

#p#

最后還需要再指定一下日志信息:

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文件里的信息。

 

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

先在舊的從服務器上查詢日志信息:

mysql> SHOW SLAVE STATUS;

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

 

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

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

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;

注:如果有多個錯誤,可能需要執行多次(提醒:主從服務器數據可能因此不一致)。

 

如果是中繼日志錯誤,只要在從服務器使用SHOW SLAVE STATUS結果中的日志信息重新CHANGE MASTER TO即可,系統會拋棄當前的中繼日志,重新下載:

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,參見概述。

 

問題:主服務器宕機了,如何把從服務器提升會主服務器?

答案:在一主多從的環境總,需選擇數據最新的從服務器做新的主服務器。如下圖所示:

提升從服務器為主服務器

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

技巧

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

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

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

工具

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

Multi-Master Replication Manager for MySQL

Percona XtraBackup

Maatkit

Tungsten-replicator

關于MySQL復制的概述、安裝、故障、技巧、工具的內容就為大家講解到這里,希望對大家學習MySQL數據庫有所幫助,本文僅供大家參考。

【編輯推薦】

  1. 阿里巴巴運維部DBA張瑞:Oracle與MySQL搭檔滿足業務需求
  2. 論MySQL數據庫中兩種數據引擎的差別
  3. MySQL數據庫中char與varchar之爭
  4. MySQL性能優化教程一
責任編輯:迎迎 來源: 站長之家
相關推薦

2009-09-03 11:23:54

Eclipse技巧

2010-05-31 17:15:39

MySQL數據庫

2013-08-26 14:18:12

SELinux

2009-12-16 15:11:10

DCC常見故障

2021-01-28 10:15:09

MySQL架構數據庫

2010-05-14 16:34:31

Mysql安裝

2019-03-29 10:22:08

Linux系統故障技巧

2023-10-30 09:01:08

Nginx日志分析

2009-12-07 16:49:03

RHEL用戶技巧

2013-01-16 08:56:53

iOS故障排除指南

2011-08-25 16:20:18

MPLS VPN故障熱備份

2023-07-26 15:46:52

Docker管理容器

2009-12-10 10:30:31

PHP刪除復制文件

2020-04-26 11:16:46

KubernetesPodLinux

2009-12-22 16:09:09

2010-01-07 17:41:19

JSON定義法

2011-05-07 15:14:59

噴墨打印機故障維護

2011-08-22 12:24:56

nagios

2010-05-31 10:26:27

2024-08-20 18:00:56

Python文件開發
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 涩色视频在线观看 | 国产在线第一页 | 久久毛片 | 中文字幕免费在线 | 韩日一区 | 成人激情视频在线播放 | 综合成人在线 | 久久精品成人热国产成 | 久久久久久综合 | 野狼在线社区2017入口 | 国产 亚洲 网红 主播 | 亚洲一区高清 | 午夜a v电影 | 欧美亚洲国产日韩 | 成人妇女免费播放久久久 | 久久久99国产精品免费 | 国产精品无码久久久久 | 亚洲国产二区 | 亚洲视频一区在线观看 | 精品自拍视频在线观看 | 国产一区二区三区亚洲 | 国产精品日韩欧美一区二区三区 | 一色一黄视频 | 日韩一区二区免费视频 | 久久精品国产一区二区电影 | 国产91精品久久久久久久网曝门 | 国产亚洲一区二区三区 | 中文字幕在线免费视频 | 亚洲日韩欧美一区二区在线 | 成在线人视频免费视频 | 久久久免费在线观看 | 91亚洲精品国偷拍自产在线观看 | 久久久一区二区三区 | 99精品国产一区二区三区 | 国产精品18久久久久久久 | 中文字幕伊人 | 久久精品视频免费看 | 国产一区三区在线 | 97精品国产97久久久久久免费 | www.国产视频 | 久久福利电影 |