1. 程式人生 > 實用技巧 >mysql的主從複製及實現過程

mysql的主從複製及實現過程

mysql的主從複製


為什麼需要用到mysql的主從複製功能?

一般在實際生產中,僅僅有一臺資料庫伺服器作為獨立的資料庫是很少見的,因為一旦這臺獨立的伺服器掛掉,那麼前端的程式或使用者將無法訪問後端的資料了,這樣會造成服務中斷的。對於有些企業來說,保證服務的連續性是非常重要的,因此在這種情況下需要保證資料庫伺服器的高可用性。

有時某個資料庫伺服器臺過於繁忙的話,我們需要減輕伺服器的負載,那麼我們可以將這個伺服器上的寫請求和讀請求分開,分別由不同的伺服器來完成,這樣豈不是更好。對於一個數據庫伺服器而言,保證資料的安全性是至關重要的,因此我們需要定期的對資料庫上的資料做備份。

如果使用熱備方式的話,操作起來可能不太容易,使用冷備的話又不能保證其正常服務。如果能有一臺資料庫伺服器上面也存有相同的資料,但是我們卻可以手動將資料庫上的服務停止掉,然後在將該資料庫上面的資料備份起來。等等這些功能,我們都可以利用mysql的主從複製功能來完成。


mysql的主從複製原理

在mysql主從複製架構中,有一臺伺服器作為MASTER伺服器,該伺服器負責所有的讀請求和寫請求。另外一臺或多臺作為slave伺服器。當master上的某個應用程式發起寫請求時,該請求會被核心響應並在核心中執行,然後在將其資料寫入到磁碟中去。並且將此次的操作以事件的形式記錄到二進位制檔案中去。

此時master上的Binlog dump thread等待slave上的I/O thread連線請求。一旦slave I/O thread連線上了master的Binlog dump thread,則Binlog dump thread會將本地二進位制檔案中更新的事件複製給slave。

當slave上的I/O thread接受從master複製過來的二進位制檔案中的事件時,會將其事件寫入到slave上的中繼日誌檔案中。然後slave會呼叫本地的SQL thread重新應用(或回放)中繼日誌中的事件,然後在將其資料寫入到slave上的磁碟中。這就是mysql的主從複製功能。

由於slave上更新的資料不能複製給master,因此,對於slave而言,不能執行寫操作。切記切記!!!


mysql的主從複製原理如下圖所示:

wKiom1UHHr_jL4hHAADDYUB56ZA855.jpg



複製執行緒

Binlog dump thread:接受slave I/O thread的連線請求,並將master上的二進位制檔案中更新的事件複製給slave I/O thread。Binlog dump thread位於master上。

slave I/O thread:接受Binlog dump thread複製過來的時間,並將其寫入到slave上的中繼日誌檔案中。slave I/O thread位於slave上。

slave SQL thread:讀取中繼日誌檔案中的事件重新應用(或回放),並將其資料寫入到磁碟中去。




mysql的主從複製具有如下功能:

1、實現mysql資料庫的高可用性

2、可以輔助實現資料備份

3、可以異地容災

4、實現伺服器分攤負載,即通過mysql的讀寫分離來實現分攤負載。


mysql的主從複製需要注意的事項:

一個master可以用於多個slave,而一個slave只能屬於某一個master

在主從架構中,如果只有一個slave,那麼在slave上重新回放中繼日誌檔案中的事件會引起資料庫的改變,因此,這個過程也會以事件的形式寫入到二進位制日誌檔案中去。由於二進位制日誌是用來做及時點還原的,且master儲存著一份完整的資料,因此在slave上不需要開啟二進位制日誌功能,但是master上必須要開啟。

如果有多個slave的情況下,在這多個slave中,有一個slave即當做master的slave又可以當做其他slave的master,那麼此時這個slave上必須開啟二進位制日誌功能。即此時這個slave即充當slave又充當master。

mysql複製過程中資料是以明文的方式進行傳輸的,不過可以將其配置為基於ssl來傳輸。




mysql的三種複製模式

mysql的非同步模複製式

這是mysql的預設複製模式。非同步複製模式就是當master上的寫操作完成後,即資料已寫入到磁碟上,事件也入到到二進位制日誌檔案中去了。master上的dump thread將其更新的二進位制日誌中的事件複製給slave I/O thread並被其接受時,則認為複製成功。這種複製模式並不能保證複製過去的事件一定能寫入到slave上的中繼日誌中,因此,可能會導致slave上的資料丟失。導致slave和master上的資料不一致。

而且一般說來,資料的讀寫操作都是由master先完成的,然後在將其更新的事件複製給slave,因此,資料的同步並不是同時進行的,一般slave寫入資料到磁碟都會比master要慢一些,這取決於網路頻寬、伺服器負載等因素。不過非同步複製模式的好處就是可以提升master的效能。


mysql的半同步複製模式

在mysql5.5之後的版本中,引入半同步的概念。不過要想讓mysql5.5支援半同步,必須要安裝由google提供的一個開源補丁才行。

mysql的半同步複製模式就是當master上的寫操作完成後,master上的dump thread會將其更新的二進位制日誌中的事件複製給slave,並且這些事件至少能夠在一個slave上正常寫入到中繼日誌中,且中繼日誌中的事件經過回放將其資料寫入到磁碟中。則認為複製操作成功。即至少有一個slave完成寫操作就表示所有的複製操作成功了。

在這個過程中,如果沒有一個slave能夠將其複製過來的事件寫入到中繼日誌中,則master會一直等待,當這個等待超時時長(timeout,預設為10s)過後,則半同步複製模式轉變成非同步複製模式。


mysql的同步複製模式

mysql的InnoDB和MyISAM引擎預設不支援這種複製模式。所謂同步複製模式即master和slave上的寫操作都完成後 ,則表示複製成功。



mysql的複製過濾

有時候我們不想接受從其他伺服器複製過來的所有資料,只是想選擇性的接受我們自己想要的資料,則就可以使用mysql的複製過濾功能。mysql的複製過濾既可以在master上使用,又可以在slave上使用,但是如果在master上配置複製過濾功能會導致其二進位制日誌的完整性,不利用資料及時點恢復。因此,我們一般不再master上配置複製過濾功能,一般配置在slave上。



mysql的主從複製實驗過程

實驗前提:

這裡我使用的linux系統為RHEL 5.8 64bit

本次實驗共2臺主機,其ip地址分別為:

master.xsl.com 192.168.108.202

slave.xsl.com 192.168.108.150



主從複製

這裡使用的是預設的複製模式,即非同步複製模式


一、master上的配置

1、安裝mysql

這裡我使用的mysql-5.5.28,關於mysql的安裝方式將不再這裡介紹了。


2、修改mysql的配置檔案,並新增如下資訊:

#vim /etc/my.cnf

如下資訊全部新增到[mysqld]這個容器中

datadir=/mydata/data #指定mysql的儲存目錄

log-bin=master-bin #指定master上二進位制日誌檔案

log-bin-index=master-bin.index 指定二進位制日誌的索引檔案

server-id = 1 指定master的id號,這個id號一定要是唯一的。server-id的有效取值為[1-2^32-1]

innodb_file_per_table = 1 如果mysql的工作引擎是innodb的話,那麼就指定配一個表使用一個表空間


3、啟動mysqld服務

#service mysqld start


4、修改環境變數

如果在第一步中已經修改了環境變數,那麼這一步就不需要操作了。如果還沒有修改,那麼想修改環境變數可以這麼做。

編輯/etc/profile.d/mysql.sh,並新增如下內容:

#vim /etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin


執行如下命令,可以讓記憶體重讀環境變數

#. /etc.profile.d/mysql.sh


5、建立具有複製許可權的使用者

#mysql -uroot -p

mysql> grant replication slave on *.* to 'repluser'@'192.168.108.%' identified by 'repluser';

讓記憶體重讀授權表

mysql> flush privileges;


6、檢視授權資訊

mysql> show grants for 'repluser'@'192.168.108.%';

+---------------------------------------------------------------------------------------------------------------------------------+

| Grants for [email protected]% |

+---------------------------------------------------------------------------------------------------------------------------------+

| GRANT REPLICATION SLAVE ON *.* TO 'repluser'@'192.168.108.%' IDENTIFIED BY PASSWORD '*89A63F9688240669B54B5C2649EEFB795850597E' |

+---------------------------------------------------------------------------------------------------------------------------------+

1 row in set (0.00 sec)



二、slave上的配置

1、安裝mysql,這裡安裝的也是mysql-5.5.28,安裝過程和上面一樣。


2、修改mysql的配置檔案,並新增如下資訊:

#vim /etc/my.cnf

如下資訊全部新增到[mysqld]這個容器中

datadir=/mydata/data

relay-log=relay-log 指定中繼日誌檔案

relay-log-index=relay-log.index 指定中繼日誌索引檔案

server-id=11 記住server-id一定要是唯一的.server-id的有效取值為[1-2^32-1]

innodb_file_per_table = 1 如果工作引擎是innodb的話,建議開啟一個表使用一個表空間功能

read_only = on 由於slave上不能進行寫操作,因此,需要設定為只讀操作。不過這個選項,對於具有super許可權的使用者無效。

sync_log = 1 為了保證事務的安全性及二進位制日誌的完整性,還需要設定每一次寫操作都同步二進位制日誌一次。


3、啟動mysqld服務

#service mysqld start


4、修改環境變數

如果在第一步中已經修改了環境變數,那麼這一步就不需要操作了。如果還沒有修改,那麼想修改環境變數可以這麼做。

編輯/etc/profile.d/mysql.sh,並新增如下內容:

#vim /etc/profile.d/mysql.sh

export PATH=$PATH:/usr/local/mysql/bin




5、連鍥master伺服器

在連線master伺服器之前,我們還需要檢視一下master正在使用的二進位制日誌檔案是哪一個,以及二進位制日誌檔案中事件的相對位置。這樣我們只需要複製這個二進位制日誌檔案中這個position以後的事件即可。

檢視master正在使用的二進位制日誌檔案以及事件所處的相對位置,可以在master上使用如下命令完成。

mysql> show master status;

+-------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+-------------------+----------+--------------+------------------+

| master-bin.000001 | 344 | | |

+-------------------+----------+--------------+------------------+

1 row in set (0.00 sec)


檢視完成之後,我們在連線master伺服器

#mysql -uroot -p

mysql> change master to master_host='192.168.108.202',master_port=3306,master_log_file='master-bin.000001',master_log_pos=344,master_user='repuser',master_password='repuser';

這裡的master_log_file就是用來指定我們要複製master上的哪個二進位制日誌檔案中的事件,msater_log_pos用來指定複製二進位制日誌檔案這個相對位置以後的事件。

master_user就是在master上建立的具有複製許可權的使用者,master_password就是這個使用者的密碼


6、啟動slave上的I/O執行緒和SQL 執行緒

mysql> start slave ;

使用這個命令會將slave I/O執行緒和slave SQL執行緒同時開啟。如果想手動的開啟某個執行緒可以使用如下命令來完成:

mysql> start slave IO_Thread ; 啟動I/O執行緒

mysql> start slave SQL_Thread ; 啟動SQL執行緒


7、檢視slave上的I/O執行緒和SQL執行緒是否啟用,以及slave上的其他相關資訊

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.108.202

Master_User: repluser

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: master-bin.000001

Read_Master_Log_Pos: 344

Relay_Log_File: relay-log.000002

Relay_Log_Pos: 254

Relay_Master_Log_File: master-bin.000001

Slave_IO_Running: Yes #這裡已經啟動了IO執行緒

Slave_SQL_Running: Yes #這裡已經啟動了SQL執行緒

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table:

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 344

Relay_Log_Space: 404

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)


ERROR:

No query specified




三、測試,在master上新增資料,觀看資料是否會複製到slave上。

在master上建立一個數據庫testrepl

mysql> create database testrepl;

檢視master上所有庫;

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

| testrepl |

+--------------------+

5 rows in set (0.00 sec)

master上已經建立了testrepl庫


看看,在master上剛剛建立的testrepl庫是否會複製到slave上去。


在slave上使用如下命令檢視slave上的所有庫:

mysql> show databases;

+--------------------+

| Database |

+--------------------+

| information_schema |

| mysql |

| performance_schema |

| test |

| testrepl |

+--------------------+

5 rows in set (0.00 sec)

看看,果然master上的testrepl這個庫複製過來了,說明mysql的主從複製功能已經實現了。



說明:在slave上的資料目錄下即/mydata/data/下,有2個檔案master.info和relay-log.info 。這兩個檔案都是文字檔案,其中master.info保留的是連線到master主機上的一些資訊,因此,當mysql開啟自啟動或重啟時會自動連線到master上去。一般建議mysql自啟動時不要自動連線到master上。而relay-log.info保留的是當前使用的中繼日誌檔案和master上正在使用的二進位制日誌檔案以及這些檔案中事件的相對位置。

如果不要讓slave開機就直接連上master,可以將這兩個檔案放置在其他目錄下;或者在配置檔案中新增skip-slave-start=on等引數都可以來實現。


配置半同步模式的主從複製(這裡使用的複製模式為半同步複製模式)

如果在主從複製中要想使用半同步複製模式,還需要如下步驟:

mysql的半同步複製模式是在mysql-5.5以後才有的,不過要想使用半同步複製模式,還要安裝由google提供的一些開源外掛,這些外掛位於安裝目錄下的/lib/plugin/下,在我的系統上則是位於/usr/local/mysql/lib/plugin/下。

在這個目錄下有2個外掛,分別是semisync_master.so, semisync_slave.so。其中semisync_master.so是master上的外掛,semisync_slave.so是slave上的外掛。分別在各自的伺服器上安裝即可。


一、在master上的配置

1、在master上安裝外掛

mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';

這裡的rpl_semi_sync_master soname為外掛名稱,semisync_master.so為模組名稱


刪除外掛的語法格式為:

UNINSTALL PLUGIN plugin_name


2、設定全域性變數,啟用半同步複製功能,並設定超時時長

mysql> set global rpl_semi_sync_master_enabled=1;

mysql> set global rpl_semi_sync_master_timeout=10000; 設定超時時長為10秒,預設單位為毫秒


3、檢視與半同步複製相關的變數資訊

mysql> show global variables like '%semi%';

+------------------------------------+-------+

| Variable_name | Value |

+------------------------------------+-------+

| rpl_semi_sync_master_enabled | ON |

| rpl_semi_sync_master_timeout | 10000 |

| rpl_semi_sync_master_trace_level | 32 |

| rpl_semi_sync_master_wait_no_slave | ON |

+------------------------------------+-------+

4 rows in set (0.00 sec)




二、slave上的配置

1、在slave上安裝外掛

mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';


2、啟用半同步複製功能

mysql> set global rpl_semi_sync_slave_enabled =1;

檢視設定是否成功

mysql> show global variables like '%semi%';

+---------------------------------+-------+

| Variable_name | Value |

+---------------------------------+-------+

| rpl_semi_sync_slave_enabled | ON |

| rpl_semi_sync_slave_trace_level | 32 |

+---------------------------------+-------+

2 rows in set (0.01 sec)


3、啟動slave上的兩個程序

mysql> slave stop;

mysql> slave start;



4、驗證半同步複製是否生效

在master上執行如下命令,可以檢視半同步複製是否生效

mysql> show global status like '%semi%';

+--------------------------------------------+-------+

| Variable_name | Value |

+--------------------------------------------+-------+

| Rpl_semi_sync_master_clients | 1 | 說明已經有一個客戶端連線上來了

| Rpl_semi_sync_master_net_avg_wait_time | 0 |

| Rpl_semi_sync_master_net_wait_time | 0 |

| Rpl_semi_sync_master_net_waits | 0 |

| Rpl_semi_sync_master_no_times | 0 |

| Rpl_semi_sync_master_no_tx | 0 |

| Rpl_semi_sync_master_status | ON |說明半同步複製功能已開啟

| Rpl_semi_sync_master_timefunc_failures | 0 |

| Rpl_semi_sync_master_tx_avg_wait_time | 0 |

| Rpl_semi_sync_master_tx_wait_time | 0 |

| Rpl_semi_sync_master_tx_waits | 0 |

| Rpl_semi_sync_master_wait_pos_backtraverse | 0 |

| Rpl_semi_sync_master_wait_sessions | 0 |

| Rpl_semi_sync_master_yes_tx | 0 |

+--------------------------------------------+-------+

14 rows in set (0.00 sec)


5、在master上建立表bincp,並驗證在slave上是否存在

mysql> use testrepl

mysql> create table bancp (id int);

mysql> show tables;

+--------------------+

| Tables_in_testrepl |

+--------------------+

| bancp |

+--------------------+

1 row in set (0.00 sec



在slave上驗證,是否存在表bincp

mysql> use testrepl

Database changed

mysql> show tables;

+--------------------+

| Tables_in_testrepl |

+--------------------+

| bancp |

+--------------------+

1 row in set (0.00 sec)

說明表複製成功,mysql的半複製功能也設定成功了。


如果在slave上停止其IO執行緒和SQL執行緒,然後在建立一個數據庫的話,你會發現建立需要好長時間,這個時間就是我們在master上設定的超時時長。一旦第一次連線超時,則就會自動切換成非同步模式。


說明:剛剛在上面修改全域性變數的操作都是在命令列中完成的,不會永久生效的,要想永久生效,需要將其變數寫入到配置檔案中去。



mysql的複製過濾功能的實現過程

一般說來,如果在master上做過濾的話,會影響到二進位制日誌的完整性的,會對以後做及時點恢復有影響的,因此,一般我們不會在master上做過濾。只在slave上做過濾。

如果slave上不想接受某些庫或表的話,可以在slave上做相應的配置,這樣slave就不會接受master上某些庫或指定表的相關資料了。

如果要在slave上開啟過濾功能,還需要配置如下步驟:

1、 在slave上的配置檔案中,且在[mysqld]這個容器中新增如下引數:

#replicate_do_db=db_name 表示只接受某個資料庫

#replicate_ignore_db=db_name表示不解釋某個資料庫

#replicate_do_table=db_table.tb_name表示只接受指定庫的某個表

#replicate_ignore_table=db_table.tb_name表示不接受指定庫的某個表

#replicate_wild_do_table=db_name.test%對於表來說,還可以萬用字元來進行匹配。這裡表示只接受指定庫中以test開頭且test後面為任意長度的任意字元的所有表

#replicate_wild_ignore_table=db_name.test_這也是使用萬用字元來進行匹配的。這裡表示不接受指定庫中以test開頭且後面為任意單個字元的所有表

replicate_ignore_table=testrepl.xsl


說明如果要指定多個庫或多個表,可以將命令多寫幾次就可以了。在設定過濾的時候,最好不要同時使用do和ignore引數


2、重啟mysqld服務

#service mysqld restart


2、在master的testrepl庫上建立兩個表,分別為xsl、abc

mysql> use testrepl

mysql> create table abc(id int);

mysql> create table xsl(id int);

檢視常見的表

mysql> show tables;

+--------------------+

| Tables_in_testrepl |

+--------------------+

| abc |

| bancp |

| xsl |

+--------------------+

3 rows in set (0.00 sec)



3、在slave上觀察表xsl是否複製過來了。

mysql> use testrepl

mysql> show tables;

+--------------------+

| Tables_in_testrepl |

+--------------------+

| abc |

| bancp |

+--------------------+

2 rows in set (0.00 sec)

看看,slave上確實是沒有表xsl,說明設定成功了。


mysql的資料基於ssl加密傳輸

預設情況下,mysql的資料是明文傳送的,不能夠保證資料的安全性和完整性。因此,需要藉助ssl的加密功能來完成資料傳輸。

預設情況下,mysql是沒有啟動加密功能的,這可以如果如下命令檢視:

mysql> show global variables like '%ssl%';

+---------------+----------+

| Variable_name | Value |

+---------------+----------+

| have_openssl | DISABLED |

| have_ssl | DISABLED |

| ssl_ca | |

| ssl_capath | |

| ssl_cert | |

| ssl_cipher | |

| ssl_key | |

+---------------+----------+

7 rows in set (0.00 sec)


如果要讓mysql的資料傳輸是通過加密方式進行的,那麼需要配置如下步驟:

1、在master上建立私有CA

# (umask 077 ;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)


2、生成自簽證書

# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3650


3、建立檔案和目錄

自簽證書生成完成後,還需要建立一些檔案和目錄。如index,serial,cert,crl,newcerts

# cd /etc/pki/CA/

#touch index.txt serial

#echo '01' > serial

#mkdir -p certs crl newcerts


建立完檔案和目錄以後,還需要修改ssl的配置檔案/etc/pki/tls/openssl.conf,修改CA的目錄為如下:

dir = /etc/pki/CA



3、在master上建立私鑰以及頒發證書

#mkdir /usr/local/mysql/ssl/

#cd /usr/local/mysql/ssl/

#(umask 077;openssl genrsa -out mysql.key 2048)

# openssl req -new -key mysql.key -out mysql.csr

為master頒發證書

#openssl ca -in mysql.csr -out mysql.crt -days 3650

#chwon -R mysql.mysql ./



4、在slave上配置

在slave上建立私鑰

#mkdir /usr/local/mysql/ssl

#cd /usr/local/mysql/ssl/

# (umask 077;openssl genrsa -out mysql.key 2048)


5、生成頒發請求

# openssl req -new -key mysql.key -out mysql.csr



6、將請求檔案傳送給master(在slave上執行)

# scp /usr/local/mysql/ssl/mysql.csr 192.168.108.202:/tmp


7、master為slave簽署請求檔案(在master上執行)

#openssl ca -in /tmp/mysql.csr -out /tmp/mysql.crt -days 3650



8、將簽署好的證書傳送給slave(在master上執行)

#scp /tmp/mysql.crt 192.168.108.150:/usr/local/mysql/ssl/

#scp /etc/pki/CA/cacert.pem 192.168.108.150:/etc/pki/CA/

9、修改master上的mysql配置檔案/etc/my.cnf,並在[mysqld]容器中新增如下資訊:

[mysqld]

ssl #這個就是用來啟用ssl功能的

ssl-ca=/etc/pki/CA/cacert.pem

ssl-cert=/usr/local/mysql/ssl/mysql.crt

ssl-key=/usr/local/mysql/ssl/mysql.key

檢視ssl功能是否啟用

mysql> show variables like '%ssl%';
+---------------+--------------------------------+
| Variable_name | Value |
+---------------+--------------------------------+
| have_openssl | YES |
| have_ssl | YES |
| ssl_ca | /etc/pki/CA/cacert.pem |
| ssl_capath | |
| ssl_cert | /usr/local/mysql/ssl/mysql.crt |
| ssl_cipher | |
| ssl_key | /usr/local/mysql/ssl/mysql.key |
+---------------+--------------------------------+
7 rows in set (0.00 sec)


然後在重啟master上的mysqld服務

#service mysqld restart


10、在master上建立具有複製許可權的使用者且基於ssl來傳輸

mysql>grant replication client,replication slave on *.* to 'repluser'@'192.168.108.%' identified by 'repluser' require ssl

mysql> flush privileges;

11、修改slave上的mysql配置檔案,並在[mysqld]容器下新增如下引數:

[mysqld]

ssl #啟用ssl


12、連線master伺服器

在連線master之前,最後是檢視一下master正在使用的二進位制日誌檔案是哪一個,以及事件正處在哪個position上。

可以在master上執行如下命令檢視:

mysql> show master status;

#service mysqld restart

#mysql

mysql> change master to master_host='192.168.108.202', master_user='repluser', master_password='repluser', master_log_file='mysql-bin.000018', master_log_pos=107,master_ssl=1, master_ssl_ca='/usr/local/mysql/ssl/cacert.pem',master_ssl_cert='/usr/local/mysql/ssl/mysql.crt',master_ssl_key='/usr/local/mysql/ssl/mysql.key';

mysql>slave start


檢視slave上的狀態資訊

mysql> show slave status\G






mysql的讀寫分離









轉載於:https://blog.51cto.com/xslwahaha/1621304