天天看點

mysql replication(主從複制)(一)MS模式

1、理論部分

1.1、mysql replication的概念:

enables data from one mysql database server(the master) to be replicated to one or more mysql database servers(the slaves).

1)可以将資料從一台資料庫伺服器(master)複制到一到多台資料庫伺服器(slave)

2)預設情況下,屬于異步複制。是以無需維持長連接配接。

3)通過配置,你可以複制所有的庫或者某幾個庫,甚至庫中的幾個表。

<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4G6zIfwrAAENUmMX6Bs957.jpg" target="_blank"></a>

1.2、mysql replication的實作基礎:

Binary Log(二進制日志)是實作mysql主從複制的基礎

Binary Log的概念:所有的、無論是明确的或隐含的可以引起資料庫發生改變的語句都要記錄于Binary Log。

主從備份涉及的日志檔案有:

Binary log(二進制日志)

Relay log(中繼日志)

簡單的說,就是master将資料庫的改變寫進二進制日志,slave同步這些二進制日志,并根據這些二進制日志進行資料庫操作。

<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA4Jey1H3ZAABXQUhjG1Y416.jpg" target="_blank"></a>

1.3、mysql Replication的用途

1)Fail Over(故障切換)

2)Backup Server(備份服務,不能應對錯誤的指令操作)

3)High Perfomance(高性能)

1.4、mysql replication的分類:

1)主從(M-S)

2)主主(M-M)

1.5、mysql replication的商業價值:

首先伺服器的擴充方式有:

1)scale up:提高原有應用的伺服器性能

2)scale out:原有伺服器以及應用不變,增加伺服器。

伺服器遇到性能瓶頸,向上擴充(scale up)的成本過高,假設伺服器現有價格是M,性能擴充N倍,成本往往是M*N倍還要多的多的代價才能提高N倍的性能。

<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA4MfTWL5_AAJmAtONtSI303.jpg" target="_blank"></a>

1.6、mysql的叢集類型

cluster分類:

1)Load Balancing(負載均衡叢集),兩台伺服器均同時提供服務。

2)High Availability(高可用叢集),屬于備援機制,隻單台提供服務。

3)High Preformance(高性能叢集),例子如超級計算機,将非常大的運算需求,自動分割成N片,每一片交給一台計算機處理,處理完成後再傳回結果給切割的計算機重新整合。

mysql既有負載均衡能力,又有高可用的特征,從某種意義來講,負載均衡本身就具有高可用的特征,但高可用并不能提供負載均衡的能力。

1.7、mysql的同步異步問題

同步異步概念:

Async(異步)-通訊無确認信号傳回,發送方無需等待接收方回應任務即中止,異步可以提供更好的性能表現。

Sync(同步)-通訊有确認信号傳回,發送方需等待接收方回應任務才中止。

mysql主從架構屬于異步架構

1.8、實作主從複制的相關線程

mysql主從的線程:

1)Dump thread,負責把資料傾瀉給從伺服器的線程。

2)I/o thread,負責接收主伺服器傾瀉過來的線程。

3)sql thread,從中繼日志中讀取資料并在本地應用資料的線程。

<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4PyDS6hkAAFaxPaiI_8602.jpg" target="_blank"></a>

2、實驗部分

2.1、實驗環境

2.1.1、基本資訊

1)mysql主伺服器(Master):

ipaddress=10.168.0.103

hostname=sql-m

2)mysql從伺服器(Slave):

ipaddress=10.168.0.104

hostname=sql-s

2.1.2、mysql的安裝與初始化

In Master&amp;Slave:

以上主機均需要先安裝mysql相關rpm包:

1

2

3

4

<code>yum -y </code><code>install</code> <code>mysql-server mysql-devel mysql</code>

<code>chkconfig mysqld on</code>

<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>start</code>

<code>mysql_secure_installation</code>

初始化步驟如下(請根據實際情況選):

<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA3wHSw-NKAAIFED6_9nc456.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA4WKzbcSfAAJaTMPrYr8142.jpg" target="_blank"></a>

<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA3yTwEufbAAEobaPoK-s347.jpg" target="_blank"></a>

初始化完成後,做登入測試:

<code>mysql -uroot -p</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA31fzWxfqAAG54Hx7jtw762.jpg" target="_blank"></a>

2.1.2、防火牆配置

vim編輯/etc/sysconfig/iptables檔案:

<code>-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT</code>

編輯完成效果:

<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA3_ngFHX6AAGQpl6bevU671.jpg" target="_blank"></a>

重新開機防火牆:

<code>/etc/init</code><code>.d</code><code>/iptables</code> <code>restart</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4mLhWdvnAAC7qWNI_yQ645.jpg" target="_blank"></a>

2.1.3、percona xtrabackup的安裝

<code>yum </code><code>install</code> <code>http:</code><code>//www</code><code>.percona.com</code><code>/downloads/percona-release/redhat/0</code><code>.1-3</code><code>/percona-release-0</code><code>.1-3.noarch.rpm</code>

<code>yum </code><code>install</code> <code>percona-xtrabackup</code>

以上如果安裝後執行innobackupex指令提示不支援mysql版本錯誤,請改為20版本:

<code>yum -y remove percona-xtrabackup</code>

<code>yum -y </code><code>install</code> <code>percona-xtrabackup-20</code>

2.2、實驗步驟

2.2.1、step1

Slave是通過mysql連接配接登入到Master上讀取二進制日志的。是以需要在Master上給Slave配置權限。

In Master:

資料庫設定:

<code>mysql&gt;</code><code>grant</code> <code>replication slave </code><code>on</code> <code>*.* </code><code>to</code> <code>'repl'</code><code>@</code><code>'10.168.0.104'</code> <code>identified </code><code>by</code> <code>'repl'</code><code>;</code>

<code>mysql&gt;flush </code><code>privileges</code><code>;</code>

<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA37yyU5uiAABgmqtvCz4707.jpg" target="_blank"></a>

In Slave:

做如下測試:

<code>mysql&gt;mysql -h10.168.0.103 -urepl -prepl</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4FyzIsabAAF6cUiX44Y196.jpg" target="_blank"></a>

2.2.2、step2

In Master:

1)打開二進制日志,并辨別server-id

2)server-id用于唯一辨別主機,數字取值範圍1至2的32處方減1

vim編輯/etc/my.cnf:

5

<code>[mysqld]</code>

<code>log-bin                  </code><code>#開啟二進制日志</code>

<code>binlog-</code><code>format</code><code>=row        </code><code>#指定二進制日志以row格式記錄(增加實物支援性、增加同步性能)</code>

<code>sync</code><code>-binlog=1            </code><code>#官方推薦打開的參數</code>

<code>server-</code><code>id</code><code>=1              </code><code>#設定server id</code>

<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA4suDDp0cAAEw2ScJkv4450.jpg" target="_blank"></a>

重新啟動mysqld服務:

<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>restart</code>

<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4LmzUpBEAABbvII6St8357.jpg" target="_blank"></a>

檢查設定是否成功:

<code>ls</code> <code>/var/lib/mysql/</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA4y2wg6lrAAB26irlj54265.jpg" target="_blank"></a>

2.2.3、step3

制作一個Master的完整備份,并執行prepare.

<code>mkdir</code> <code>/var/lib/backup</code>

<code>innobackupex --user=root --password=xxx </code><code>/var/lib/backup/</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/89/wKioL1YA417wGtAyAAMHufte5jg312.jpg" target="_blank"></a>

<code>innobackupex --use-memory=500m --apply-log </code><code>/var/lib/backup/2015-09-21_07-18-34</code>

<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4UvSs-Z4AAMjeF55C3A007.jpg" target="_blank"></a>

以上工具可以記錄二進制編号,從伺服器導入資料後再後執行同步會從該編号後面開始執行。

2.2.4、step4

把備份拷貝到slave,并放入資料庫檔案目錄。

In Slave

<code>scp</code> <code>-r </code><code>/var/lib/backup/2015-09-21_07-18-34</code> <code>10.168.0.104:</code><code>/var/lib/backup/</code>

<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA4ZiyMZ0-AAIieH4aZ_M263.jpg" target="_blank"></a>

6

<code>/etc/init</code><code>.d</code><code>/mysqld</code> <code>stop</code>

<code>cd</code> <code>/var/lib/backup/2015-09-21_07-18-34</code>

<code>cp</code> <code>-R * </code><code>/var/lib/mysql</code>

<code>chown</code> <code>-R mysql:mysql </code><code>/var/lib/mysql</code>

登入後做資料庫檢查:

<code>mysql&gt;show databases;</code>

<code>mysql&gt;</code><code>exit</code>

2.2.5、step5

In Slave:

在Slave上配置server-id,辨別伺服器。

vim編輯/etc/my.cnf

<code>server-</code><code>id</code><code>=2</code>

配置效果:

<a href="http://s3.51cto.com/wyfs02/M02/73/89/wKioL1YA5DeQMI5aAAD90D2ZoCk317.jpg" target="_blank"></a>

配置完成後重新開機服務:

<a href="http://s3.51cto.com/wyfs02/M02/73/93/wKioL1YBZCqQfaJhAAB3BOIj0Rs369.jpg" target="_blank"></a>

2.2.6、step6

檢視并記錄二進制日志中的position ID。

<code>cd</code> <code>/var/lib/mysql</code>

<code>cat</code> <code>xtrabackup_binlog_info</code>

<a href="http://s3.51cto.com/wyfs02/M02/73/8B/wKiom1YA4lTg88uiAABFPcWYHKU926.jpg" target="_blank"></a>

記錄下以上标紅部分,step7要用。

2.2.7、step7

配置Slave Replication。

<code>mysql&gt;change master </code><code>to</code>

<code>  </code><code>-&gt;master_host=</code><code>'10.168.0.103'</code><code>,</code>

<code>  </code><code>-&gt;master_user=</code><code>'repl'</code><code>,</code>

<code>  </code><code>-&gt;master_password=</code><code>'repl'</code><code>,</code>

<code>  </code><code>-&gt;master_log_file=</code><code>'mysqld-bin.000004'</code><code>,</code>

<code>  </code><code>-&gt;master_log_pos=106;</code>

2.2.8、step8

啟動Replication,并檢查結果。

<code>mysql&gt;start slave;</code>

<code>mysql&gt;show slave status\G;</code>

<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4prwVSbTAALnfDo5lf4564.jpg" target="_blank"></a>

紅标部分都要為Yes

<a href="http://s3.51cto.com/wyfs02/M00/73/8B/wKiom1YA4rzB9rfjAAIYJBxjV88741.jpg" target="_blank"></a>

In Master

<a href="http://s3.51cto.com/wyfs02/M01/73/89/wKioL1YA5RmiAfN7AAIUPVm5FiU631.jpg" target="_blank"></a>

<code>show databases;</code>

<code>create</code> <code>database</code> <code>cmdschool;</code>

對比效果如下(左Master,右Slave):

<a href="http://s3.51cto.com/wyfs02/M01/73/8B/wKiom1YA41LAUJQMAAHUP34rS3A059.jpg" target="_blank"></a>

MSS模式請參閱博文:

<a href="http://tanzhenchao.blog.51cto.com/2420395/1697067" target="_blank">http://cmdschool.blog.51cto.com/2420395/1697067</a>

開啟GTIDs技術請參閱:

<a href="http://cmdschool.blog.51cto.com/2420395/1697570" target="_blank">http://cmdschool.blog.51cto.com/2420395/1697570</a>

MM模式請參閱博文:

<a href="http://cmdschool.blog.51cto.com/2420395/1699623" target="_blank">http://cmdschool.blog.51cto.com/2420395/1699623</a>

本文轉自 tanzhenchao 51CTO部落格,原文連結:http://blog.51cto.com/cmdschool/1696474,如需轉載請自行聯系原作者