精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

深入了解MySQL主從復制的原理

數據庫 MySQL
讀寫分離的架構應用的其實非常廣泛,就比如MySQL,還有Redis,以及我們熟悉的Zookeeper,Zookeeper的Follower收到讀請求不會自己處理,而是會將讀請求轉發給Leader,感興趣的可以自己下來了解一下,這里就不偏題了。

 [[375183]]

本文轉載自微信公眾號「SH的全棧筆記」,作者SH。轉載本文請聯系SH的全棧筆記公眾號。SH  

0. 主從復制

首先主從復制是什么?簡單來說是讓一臺MySQL服務器去復制另一臺MySQL的數據,使兩個服務器的數據保持一致。

這種方式與Redis的主從復制的思路沒有太大的出入。如果你對Redis的主從復制感興趣可以去看看《Redis的主從復制》。那既然Redis和MySQL都采用了復制這種方式,主從復制所帶來的意義是什么呢?

通過復制功能,構建一個或者多個從庫,可以提高數據庫的高可用性、可擴展性,同時實現負載均衡。當主庫發生故障時,可以快速的切到其某一個從庫,并將該從庫提升為主庫,因為數據都一樣,所以不會影響系統的運行;當MySQL服務器需要扛住更多的讀請求時,可以把讀請求的流量分流到各個從庫上去,寫請求則轉發給主庫,形成讀寫分離的架構,來提供更好的讀擴展和請求的負載均衡。

讀寫分離的架構應用的其實非常廣泛,就比如MySQL,還有Redis,以及我們熟悉的Zookeeper,Zookeeper的Follower收到讀請求不會自己處理,而是會將讀請求轉發給Leader,感興趣的可以自己下來了解一下,這里就不偏題了。

1. 復制原理

MySQL的主從復制支持兩種方式:

  • 基于行
  • 基于語句

基于語句的復制在MySQL3.23中就已經有了,而基于語句的方式則在5.1中才實現。其本質都是基于主庫的binlog來實現的,主庫記錄binlog,然后從庫將binlog在自己的服務器上重放,從而保證了主、從的數據一致性。

1.1 binlog

MySQL中日志分為兩個維度,一個是MySQL服務器的,一個是底層存儲引擎的。而上文提到的binlog就是屬于MySQL服務器的日志,binlog也叫二進制日志,記錄了所有對MySQL所做的更改。

基于行、語句的復制方式跟binlog的存儲方式有關系。binlog有三種存儲格式,分別是Statement、Row和Mixed。

  • Statement 基于語句,只記錄對數據做了修改的SQL語句,能夠有效的減少binlog的數據量,提高讀取、基于binlog重放的性能
  • Row 只記錄被修改的行,所以Row記錄的binlog日志量一般來說會比Statement格式要多。基于Row的binlog日志非常完整、清晰,記錄了所有數據的變動,但是缺點是可能會非常多,例如一條update語句,有可能是所有的數據都有修改;再例如alter table之類的,修改了某個字段,同樣的每條記錄都有改動。
  • Mixed Statement和Row的結合,怎么個結合法呢。例如像update或者alter table之類的語句修改,采用Statement格式。其余的對數據的修改例如update和delete采用Row格式進行記錄。

為什么會有這么多方式呢?因為Statement只會記錄SQL語句,但是并不能保證所有情況下這些語句在從庫上能夠正確的被重放出來。因為可能順序不對。

MySQL什么時候會記錄binlog呢?是在事務提交的時候,并不是按照語句的執行順序來記錄,當記錄完binlog之后,就會通知底層的存儲引擎提交事務,所以有可能因為語句順序錯誤導致語句出錯。

1.2 查看binlog

這里拿MySQL 5.6舉例子,binlog默認是處于關閉狀態的。我們可以通過命令show variables like '%log_bin%' 來查看關于binlog的配置。

默認配置

log_bin代表是否開啟了binlog,其默認值為OFF。

  • log_bin 代表是否開啟了binlog,其默認值為OFF
  • log_bin_basename binlog存儲文件的完整名稱,會在默認的文件名后面添加上遞增的序號,就例如mysql-bin.000001
  • log_bin_index binlog索引文件名稱,例如mysql-bin.index
  • sql_log_bin 在binlog開啟的時候,可以禁用當前session的binlog

你可以在MySQL中通過命令show binary logs查看所有的binlog文件

圖片

查看binlog

知道了有哪些文件之后我們可以來看看binlog文件中的內容,可以在MySQL通過show binlog events命令來查看。

show binglog events 查看第一個binlog文件,我們也可以通過in參數來指定,假設我們想看的文件名是mysql-bin.000001,那么可以使用命令show binlog events in 'mysql-bin.000001'來查看指定的binlog文件

查看binlog

接下來我們來看看我們在MySQL中的操作所對應的binlog內容分別是什么。

初始化

我們上面提到過,binlog是由一個一個的event組成的。從MySQL 5.0開始,binlog的第一個event都為Format_desc,位于圖中的Event_type那一列。可以看到內容為Server ver;5.6.50-log, Binlog ver: 4,說明當前使用的MySQL版本為5.6.50,Binlog的版本是V4。

創建數據庫

然后我創建了一個名為student的DB,其Event_type是Query,這個event的內容為CREATE DATABASE student DEFAULT CHARACTER SET = utf8mb4,一個建庫語句。

新建表

然后我創建了一個名為student的表,Event_type也是Query,內容為use student; CREATE TABLE student (id INT(11) UNSIGNED NOT NULL PRIMARY KEY AUTO_INCREMENT),一個建表語句。

插入數據

然后我們執行INSERT語句給該表插入兩行數據,再次查看binlog。

  1. INSERT INTO `student` (`id`, `name`) VALUES (NULL'張三'); 
  2. INSERT INTO `student` (`id`, `name`) VALUES (NULL'李四'); 

image-20210106123550397

可以看到每次INSERT都會開啟一個事務,你可能會疑惑,我們只是簡單的執行了INSERT語句,沒有顯示的開啟事務。那為什么會有事務產生呢?

這是因為MySQL采用了自動提交(AUTOCOMMIT)的機制,我使用的InnoDB存儲引擎,是支持事務的,所有的用戶活動都發生在事務中。我們可以通過show variables like '%AUTOCOMMIT%';命令查看,如果結果是ON則代表是開啟的。

1.3 復制的核心步驟

我們假設主庫已經開啟了binlog,并正常的記錄binlog。

首先從庫啟動I/O線程,跟主庫建立客戶端連接。

主庫啟動binlog dump線程,讀取主庫上的binlog event發送給從庫的I/O線程,I/O線程獲取到binlog event之后將其寫入到自己的Relay Log中。

然后從庫啟動SQL線程,將Relay中的數據進行重放,完成從庫的數據更新。

總結來說,主庫上只會有一個線程,而從庫上則會有兩個線程。

主從復制流程

1.4 Relay Log

relay log其實和binlog沒有太大的區別,在MySQL 4.0 之前是沒有Relay Log這部分的,整個過程中只有兩個線程。但是這樣也帶來一個問題,那就是復制的過程需要同步的進行,很容易被影響,而且效率不高。例如主庫必須要等待從庫讀取完了才能發送下一個binlog事件。這就有點類似于一個阻塞的信道和非阻塞的信道。

阻塞信道

阻塞信道就跟你在柜臺一樣,你要遞歸柜員一個東西,但是你和柜員之間沒有可以放東西的地方,你就只能一直把文件拿著,直到柜員接手;而非阻塞信道就像你們之間有個地方可以放文件,你就直接放上去就好了,不用等柜員接手。

引入了Relay Log之后,讓原本同步的獲取事件、重放事件解耦了,兩個步驟可以異步的進行,Relay Log充當了緩沖區的作用。Relay Log有一個relay-log.info的文件,用于記錄當前復制的進度,下一個事件從什么Pos開始寫入,該文件由SQL線程負責更新。

1.5 Relay Log核心參數

接下來讓我們了解一下Relay Log的核心參數。

  • max_relay_log_size 中繼日志的最大size,默認值0,如果為0就會取默認的size 1G,否則就為設置的值
  • relay_log 定義relay的名稱,默認為主機名+relay-bin,例如像hostname-relay-bin
  • relay_log_basename 中繼日志的全路徑,即路徑 + 文件名,例如/path/to/hostname-relay-bin,最大長度為256
  • relay_log_index 定義中繼日志的索引文件的全路徑,同樣其最大的長度為256. 其默認值為hostname + relay-bin.index,例如/path/to/hostname-relay-bin.index
  • relay_log_info_file 定義relay-log.info文件的名稱
  • relay_log_info_repository 存放relay log重放的數據的方式,可以設置為FILE和TABLE。FILE代表將中繼日志重放的數據記錄在relay-info.log中,TABLE則將其存放在slave_relay_log_info這張表里。
  • relay_log_purge 是否自動清空不需要的中繼日志,默認值為ON
  • relay_log_recovery 當從庫宕機后,如果relay log損壞了導致部分的中繼日志沒有進行同步,則自動放棄所有未進行重放的中繼日志,并從主庫重新獲取,默認值為OFF
  • relay_log_space_limit 設置中繼日志的最大值,防止寫滿磁盤。但是不建議設置這個值,建議還是給中繼日志需要的空間,0就是不限制,0也是默認值
  • sync_relay_log 用于控制中繼日志寫入磁盤的變量,假設值為n,那么在中繼日志每接受n次binlog事件之后就會調用fdatasync()函數將中繼日志強制的刷入磁盤;相反,如果值為0,則寫入OS的緩沖區內,由OS調度決定何時將中繼日志刷入磁盤,這樣一來如果在沒有刷入之前報錯了,那么中繼日志就會丟失。默認值是10000,也就是每向中繼日志中寫入1w次binlog事件就將中繼日志強制的刷入磁盤。
  • sync_relay_log_info 該參數的影響跟參數relay_log_info_repository有一定關系,同時也跟是否使用支持事務的存儲引擎有關系。該值默認也是10000.
    • relay_log_info_repository為FILE,假設設置的值為N,那么每N次事務都會都會調用fdatasync()強制將relay-log.info刷入磁盤
    • relay_log_info_repository為TABLE,如果使用了支持事務的引擎,則該表每次事務結束都會被更新;如果沒有使用事務引擎則會在寫入N個binlog事件的時候更新該表。
    • relay_log_info_repository為FILE,MySQL不會調用fdatasync(),而是將刷入磁盤的調度交給OS;
    • relay_log_info_repository為TABLE,如果使用了支持事務的存儲引擎,則每次事務的時候該表都會被更新;如果沒有使用事務引擎,則永遠不會被更新
    • 當sync_relay_log_info為0時
    • 當sync_relay_log_info大于0時

2. 復制模型

平常的開發中,其實很少說一上來就直接搞主從架構的。費時間、費錢還引入了額外的復雜度,最后發現投入了這么多一個單MySQL服務器就完全能handle。

這就跟一個產品的架構迭代是一樣的,剛剛起步的時候一個單體應用足夠了。當你的業務擴展,請求膨脹,單體無法抗住壓力了,就會考慮開始部署多實例,開始采用微服務架構去做橫向擴展、負載均衡。

2.1 一主多從

當然你也可以把它當成一主一從。

這是最簡單的模型,特別適合少量寫、大量讀的情況。讀請求被分到了各個從庫上,有效的幫主庫分散了壓力,能夠提升讀并發。當然,你也可以只是把從庫當成一個災備庫,除了主從復制之外,沒有其他任何的請求和數據傳輸。

甚至你可以把其中一個備庫作為你的預發環境的數據庫,當然,這說到底還是直接動了生產環境的數據庫,是一種過于理想的用途,因為這還涉及到生產環境數據庫的數據敏感性。不是所有人都能夠接觸到的,需要有完善的權限機制。

MySQL一主多從

值得注意的是,如果有n個從庫,那么主庫上就會有n個binlog dump線程。如果這個n比較大的話在復制的時候可能會造成主庫的性能抖動。所以在從庫較多的情況下可以采用級聯復制。

2.2 級聯復制

級聯復制用大白話說就是套娃。

本來從庫B、C、D、E、F、G都是復制的主庫A,但是現在由于A的壓力比較大,就不這么干了,調整成了如下的模式。

B、C復制A

D、E復制B

F、G復制C

MySQL級聯復制

這就叫級聯復制,開啟瘋狂套娃模式。你甚至會覺得這種套娃很眼熟,在Redis主從復制中也可以采用級聯模式, slave去復制另一個slave。

級聯復制的好處在于很大程度上減輕了主庫的壓力,主庫只需要關心與其有直接復制關系的從庫,剩下的復制則交給從庫即可。相反,由于是這種層層嵌套的關系,如果在較上層出現了錯誤,會影響到掛在該服務器下的所有子庫,這些錯誤的影響效果被放大了。

2.3 主主復制

顧名思義,就是兩個主庫相互復制,客戶端可以對任意一臺主庫進行寫操作。任何一臺主庫服務器上的數據發生了變化都會同步到另一臺服務器上去。有點類似于Eureka Server的雙節點模式,兩個注冊中心相互注冊。這樣一來,任何一臺掛了都不會對系統產生影響。

而且主主復制可以打破數據庫性能瓶頸,一個很酷的功能——橫向擴展。為什么說很酷呢,如果DB能做到橫向擴展,那很多被數據庫并發所限制的瓶頸都可以被突破,然而...

但是主主復制其實并不可靠,兩邊的數據沖突的可能性很大。例如復制停止了,系統仍然在向兩個主庫中寫入數據,也就是說一部分數據在A,另一部分的數據在B,但是沒有相互復制,且數據也不同步了。要修復這部分數據的難度就會變得相當大。

所以我認為雙主的更多的意義在于HA,而不是負載均衡。

2.4 主、被動的主主復制

同樣還是雙主的結構,但是區別在于其中一臺是只讀的被動服務器,客戶端不會向該庫進行寫操作。

其用途在哪里呢?例如我們要在不中斷服務的前提下對MySQL進行維護、優化,舉個例子——修改表結構。假設我們有兩個數據庫,主庫A和被動主庫B,注意此處的被動主庫是只讀的,我們先停止A對B的復制,也就是停掉A上的SQL線程。

主主停止復制

這樣一來,我們之后在B上執行的非常耗時、可能需要鎖表的操作就不會立即同步到A上來。因為此時A正在對外提供服務,所以不能使其收到影響,但是由于采用的是異步的復制模式,所以Relay Log還是繼續由I/O線程寫入,只是不去進行重放。

然后我們在B上執行此次的維護操作,注意,此時A上面發生的更新還是會正常的同步到B來。執行完后交換讀寫的角色。也就是讓A變成只讀的被動主庫,而B變為主動主庫對外提供服務。

重新開啟SQL線程

然后重新開啟SQL線程,A開始去對之前Relay Log中積累的event進行重放。雖然A此時可能會阻塞住,但是A已經沒有對外提供服務了,所以沒有問題。

主、被動下的主主模式的好處大家也就清楚了,可以在不停止服務的情況下去做數據庫的結構更新,其次可以在主庫發生故障的情況下,快速的切換,保證數據庫的HA。

3. 復制方式

上文我們不止一次的提到了復制是異步的,接下來我們來了解一下MySQL的主從復制都有哪些方式。

3.1 異步復制

首先就是異步,這也是MySQL默認的方式。在異步復制下,主庫不會主動的向從庫發送消息,而是等待從庫的I/O線程建立連接,然后主庫創建binlog dump線程,把binlog event發送給I/O線程,流程如下圖。

MySQL復制模式

主庫在執行完自己的事務、記錄完binlog之后就會直接返回,不會與客戶端確認任何結果。然后后續由binlog dump線程異步的讀取binlog,然后發送給從庫。處理請求和主從復制是兩個完全異步化的過程。

3.2 同步復制

同步模式則是,主庫執行一個事務,那么主庫必須等待所有的從庫全部執行完事務返回commit之后才能給客戶端返回成功,

同步復制

值得注意的是,主庫會直接提交事務,而不是等待所有從庫返回之后再提交。MySQL只是延遲了對客戶端的返回,并沒有延后事務的提交。

同步模式用腳趾頭想知道性能會大打折扣,它把客戶端的請求和主從復制耦合在了一起,如果有某個從庫復制線程執行的慢,那么對客戶端的響應也會慢很多。

3.3 半同步復制

半同步相對于同步的區別在于,同步需要等待所有的從庫commit,而半同步只需要一個從庫commit就可以返回了。如果超過默認的時間仍然沒有從庫commit,就會切換為異步模式再提交。客戶端也不會一直去等待了。

MySQL復制模式

因為即使后面主庫宕機了,也能至少保證有一個從庫節點是可以用的,此外還減少了同步時的等待時間。

4. 復制中的數據一致性

我們在1.3中討論了復制的核心步驟,看似很簡單的一個流程,主庫的binlog dump去讀取binlog,然后從庫的I/O線程去讀取、寫入Relay Log,進而從庫的SQL線程再讀取Relay Log進行重放。

那如果I/O線程復制到一半自己突然掛掉了呢?又或者復制到一半主庫宕機了呢?如果和保證數據一致性的呢?

我們上面提到過,有一個relay-log.info的文件,用于記錄當前從庫正在復制的binlog和寫入的Relay Log的Pos,只要這個文件還在,那么當從庫意外重啟之后,就會重新讀取文件,從上次復制的地方開始繼續復制。這就跟Redis中的主從復制類似,雙方要維護一個offset,通過對比offset,來進行psync增量數據同步。

但是在MySQL 5.5以及之前,都只能將復制的進度記錄在relog-log.info文件中。換句話說,參數relay_log_info_repository只支持FILE,可以再回到上面的1.5 Relay Log核心參數看一下。所以只有在sync_relay_log_info次事務之后才會把relay-log.info文件刷入磁盤。

如果在刷入磁盤之前從庫掛了,那么重啟之后就會發現SQL線程實際執行到位置和數據庫記錄的不一致,數據一致性的問題就這么產生了。

所以在MySQL 5.6時,參數relay_log_info_repository支持了TABLE,這樣一來我們就可以將復制的進度放在系統的mysql.slave_relay_log_info表里去,并且把更新進度、SQL線程執行用戶事務綁定成一個事務執行。即使slave宕機了,我們也可以通過MySQL內建的崩潰恢復機制來使實際執行的位置和數據庫保存的進度恢復到一致。

其次還有上面提到的半同步復制,主庫會先提交事務,然后等待從庫的返回,再將結果返回給客戶端,但是如果在主庫等待的時候,從庫掛了呢?

此時主庫上由于事務已經提交了,但是從庫上卻沒有這個數據。所以在MySQL 5.7時引入了無損半同步復制,增加了參數rpl_semi_sync_master_wait_point的值,在MySQL 5.7中值默認為after_sync,在MySQL 5.6中默認值為after_commit。

  • after_sync 主庫先不提交事務,等待某一個從庫返回了結果之后,再提交事務。這樣一來,如果從庫在沒有任何返回的情況下宕機了,master這邊也無法提交事務。主從仍然是一致的
  • after_commit 與之前討論的一樣,主庫先提交事務,等待從庫返回結果再通知客戶端

 

責任編輯:武曉燕 來源: SH的全棧筆記
相關推薦

2024-07-04 08:00:24

2017-09-05 16:00:49

MySQL主從復制備份

2025-01-15 15:47:36

2020-04-14 16:26:22

MySQL線程同步

2021-04-28 10:13:58

zookeeperZNode核心原理

2021-01-19 12:00:39

前端監控代碼

2023-04-06 13:15:48

MySQL復制原理應用實踐

2024-07-04 17:22:23

2019-11-28 09:33:08

Redis架構互聯網

2018-09-04 16:20:46

MySQ索引數據結構

2020-11-13 07:11:23

MySQL復制日志

2021-06-08 07:48:27

MySQL主從配置

2024-03-01 18:33:59

MySQL節點數據

2025-02-10 10:55:16

2024-11-15 15:27:09

2018-05-16 15:26:43

數據庫MySQL主從復制

2025-04-07 00:00:00

MySQL數據庫服務器

2021-01-11 14:45:35

Redis數據庫命令

2024-07-01 00:00:04

ViteUMD瀏覽器

2023-12-25 08:02:09

點贊
收藏

51CTO技術棧公眾號

亚洲精品国产高清久久伦理二区| 在线免费观看日本欧美爱情大片| 一本色道久久综合精品竹菊| 欧美一区视久久| 中文字幕无线码一区| 欧美国产另类| 亚洲免费视频网站| 91看片破解版| 性国裸体高清亚洲| 亚洲欧洲99久久| 精品在线不卡| 国产精品久久久久久久一区二区 | 久久久精品视频网站| 天堂美国久久| 亚洲精品一二区| 成人在线短视频| 国产精品久久久久av电视剧| 一区二区三区91| 亚洲高清视频一区二区| 国产99对白在线播放| 久久亚洲视频| 久久亚洲成人精品| 日本xxxxxxxxx18| 精品中文在线| 欧美视频在线一区二区三区| 鲁一鲁一鲁一鲁一色| 免费高清在线观看| 91论坛在线播放| 成人区精品一区二区| 亚洲精品国产精品乱码视色| 国产午夜久久| 久久久久中文字幕| 538精品在线观看| 国产高清欧美| 日韩在线播放av| 国产又大又粗又爽的毛片| 黄色欧美在线| 精品国产一区二区三区久久久蜜月 | av在线播放国产| 国产精品久久久久影院色老大 | 久久久久美女| 中文字幕不卡av| 国产精久久一区二区三区| 精品自拍偷拍| 亚洲国产美女久久久久| 少妇伦子伦精品无吗| 亚洲日本视频在线| 欧美成人a视频| 黄页网站在线看| h视频久久久| 精品欧美一区二区三区精品久久| 亚洲国产日韩在线一区| 久久国产精品美女| 日韩视频免费观看高清完整版在线观看 | 九九热这里有精品视频| 亚洲激情中文在线| 欧美精品免费在线观看| 一区二区视频免费看| 欧美精品成人| 久久久久久亚洲精品不卡| 久久99久久久| 国产精品亚洲产品| 国产91色在线免费| 在线观看不卡的av| 精品一区二区三区久久久| 成人久久18免费网站图片| 国产精品女人久久久| 国产福利精品导航| 国产在线欧美日韩| 精品欧美不卡一区二区在线观看 | 成人av网站在线观看免费| 国产乱人伦精品一区二区| 无码精品视频一区二区三区| 久久综合九色综合久久久精品综合 | 国产美女www爽爽爽视频| 国产成人综合亚洲91猫咪| 国产91一区二区三区| 日批免费在线观看| 国产人伦精品一区二区| 一区二区日本| av小说在线播放| 日韩欧美一区视频| 亚洲娇小娇小娇小| 盗摄系列偷拍视频精品tp| 亚洲国产精品嫩草影院久久| 久久久久久久久久久久久久久| 日韩欧美视频在线播放| 欧美人与性动交a欧美精品| 日产精品久久久久久久| 日本伊人色综合网| 91久久国产自产拍夜夜嗨| 婷婷综合激情网| 国产精品欧美经典| 日韩伦理在线免费观看| 久久青草免费| 日韩电影免费观看在线观看| 91麻豆精品久久毛片一级| 亚洲福利一区| 国产欧美日韩91| 神马一区二区三区| 国产精品电影一区二区| 99精品在线免费视频| 亚洲tv在线| 亚洲片国产一区一级在线观看| 欧美激情精品久久久久久免费| 亚洲第一黄色| 成人激情电影一区二区| 婷婷国产在线| 亚洲免费观看高清完整版在线观看熊 | 精品婷婷伊人一区三区三| 李丽珍裸体午夜理伦片| 97精品一区二区| 欧洲亚洲妇女av| 亚洲精品一区二区三区新线路 | 日韩一区不卡| 国产精品论坛| 日韩欧美电影一二三| avhd101老司机| 亚洲一区二区三区高清| 99高清视频有精品视频| 国产三级在线看| 精品国产乱码久久久久酒店| 91亚洲一区二区| 日本不卡高清| 国产suv精品一区二区| 蜜臀久久久久久999| 亚洲天天做日日做天天谢日日欢| 福利在线一区二区三区| 在线一级成人| 91精品国产高清自在线| 蜜桃视频污在线观看| 1000精品久久久久久久久| 黄色国产小视频| 欧美精美视频| 啪一啪鲁一鲁2019在线视频| 秋霞av鲁丝片一区二区| 一区二区三区四区精品在线视频| 在线视频观看91| 久久综合成人| 91精品免费久久久久久久久| а√天堂中文在线资源bt在线| 色www精品视频在线观看| 国产精品福利导航| 9国产精品视频| 蜜桃视频日韩| 亚洲wwww| 深夜福利一区二区| 亚洲一区在线观| 国产精品国产馆在线真实露脸| 无限资源日本好片| 日韩大片在线| 成人网欧美在线视频| 欧美a在线看| 欧美日本视频在线| 中文字幕av播放| 国产成人精品亚洲日本在线桃色| www.激情网| av成人资源| 91精品国产高清自在线| 日本一级在线观看| 在线精品视频免费播放| 99久久99久久精品免费看小说.| 免费成人av在线| 中文一区一区三区免费| 日韩三级精品| 国内外成人免费激情在线视频网站 | 欧美片第一页| 色老头一区二区三区| 国产精品久久欧美久久一区| 夜夜夜精品看看| 最新在线黄色网址| 日本伊人色综合网| 超碰在线免费观看97| 日韩精品一区二区三区中文| 久久久久久久国产精品视频| 欧美色18zzzzxxxxx| 欧美午夜精品理论片a级按摩| 在线免费看av网站| 国产风韵犹存在线视精品| 欧美 日本 亚洲| 国产精品久久久乱弄| 国产乱码精品一区二区三区中文 | 中文字幕在线有码| www.久久久久久久久| 韩国视频一区二区三区| 在线观看日韩| 欧美日韩一区二 | 精品1区2区| 国内精品伊人| 久久久免费精品视频| 国产尤物视频在线| 日韩视频在线永久播放| 国产成人无码av| 亚洲欧美偷拍三级| 99久久久久久久久久| 国产一区二区看久久| 日本中文字幕片| 伊人青青综合网| 日本一区二区精品视频| 麻豆国产一区二区三区四区| 日韩免费在线播放| 伦理在线一区| 日韩在线观看你懂的| 神马亚洲视频| 日韩精品一区二区三区视频播放| 少妇一级淫片日本| 五月天一区二区| 成人高潮免费视频| 欧美激情在线观看视频免费| bl动漫在线观看| 国内精品在线播放| 精品日韩久久久| 亚洲毛片播放| 国产一区二区三区乱码| 香蕉精品视频在线观看| 色噜噜色狠狠狠狠狠综合色一| 国内自拍欧美| 波多野结衣一区二区三区在线观看 | 亚洲精品一区二区在线看| 噜噜噜噜噜久久久久久91| 日韩视频一二区| 91久久国产婷婷一区二区| 91精品影视| 欧美中文在线观看| 国产乱码在线| 欧美老肥婆性猛交视频| 麻豆传媒在线免费看| 一区二区国产精品视频| 国精产品乱码一区一区三区四区| 在线成人免费观看| 亚洲一级片免费看| 欧美亚洲高清一区| 18国产免费视频| 色婷婷综合久色| 天堂在线免费观看视频| 精品国产91久久久久久老师| 久久国产一级片| 夜夜精品浪潮av一区二区三区| 999精品视频在线观看播放| 国产精品国产成人国产三级| 精品在线观看一区| 亚洲天天做日日做天天谢日日欢| 日韩在线观看免| 综合久久久久久| 一区二区三区四区五区| 亚洲品质自拍视频网站| 99久久婷婷国产综合| 成人免费在线播放视频| 国产探花在线视频| 亚洲日本电影在线| 欧美性猛交xxxxx少妇| 一区二区在线看| 久久一区二区三| 亚洲aaa精品| 亚洲精品男人的天堂| 日本黄色一区二区| 中文字幕在线视频免费| 欧美久久一二三四区| 国产99久久九九精品无码免费| 日韩美女在线视频| 手机在线精品视频| 亚洲日本成人网| gogogo高清在线观看免费完整版| 在线丨暗呦小u女国产精品| 亚洲搞黄视频| 欧美高清在线观看| 超碰在线公开| 国产精品视频免费观看www| 亚洲天堂网站| 成人欧美一区二区三区视频xxx | 亚欧精品在线| 女主播福利一区| 欧美成人三级在线视频| 日韩va亚洲va欧美va久久| 激情图片中文字幕| 91色|porny| www.xx日本| 午夜精品久久久久久久蜜桃app| 精品不卡一区二区| 欧美夫妻性生活| 色wwwwww| 亚洲人成网站色ww在线| av在线女优影院| 欧美国产乱视频| 日韩成人影音| 91视频免费进入| 精品国产乱码久久久久久果冻传媒| 在线视频不卡一区二区| 夜久久久久久| 日本中文字幕观看| 972aa.com艺术欧美| 91ts人妖另类精品系列| 天天影视色香欲综合网老头| 中文字幕一区二区三区免费看| 欧美成人猛片aaaaaaa| 成人欧美亚洲| 久久久久久久久中文字幕| 中文.日本.精品| 国产伦精品一区二区三区高清| 日韩国产一区二区三区| 色欲色香天天天综合网www| 另类调教123区 | 最新日韩av在线| 日本天堂网在线| 日韩精品一区二区三区中文不卡| yourporn在线观看视频| 97在线看福利| 久久av网站| 影音先锋欧美资源| 久久天堂精品| 丰满熟女人妻一区二区三区| 国产精品狼人久久影院观看方式| 亚洲 欧美 中文字幕| 亚洲第一精品久久忘忧草社区| 黄色片网站在线观看| 国产精品久久久久久久久久久久| 美女网站色精品尤物极品姐弟| www.亚洲一区二区| 麻豆91在线看| 日本高清黄色片| 欧美天堂在线观看| 丰满熟妇乱又伦| 欧美成人sm免费视频| 欧美亚洲人成在线| 水蜜桃亚洲一二三四在线| 男女精品视频| 国产乱了高清露脸对白| 亚洲成人动漫在线观看| 亚洲国产精品suv| 欧美精品一区二区免费| 高清一区二区中文字幕| 亚洲欧洲免费无码| 免费在线观看成人| 国产性猛交xx乱| 欧美性色aⅴ视频一区日韩精品| 免费在线一级视频| 欧美亚洲午夜视频在线观看 | 亚洲欧美日韩国产成人综合一二三区| 99精品视频免费观看视频| 变态另类丨国产精品| 天天影视涩香欲综合网| 天天干,夜夜爽| 77777少妇光屁股久久一区| 国产伦理久久久久久妇女| www插插插无码视频网站| av动漫一区二区| 一区二区三区福利视频| 亚洲乱亚洲乱妇无码| 日韩欧美另类一区二区| 天堂√在线观看一区二区| 日韩高清不卡一区| 久久精品色妇熟妇丰满人妻| 欧美日韩国产综合一区二区三区 | 综合自拍亚洲综合图不卡区| 国产又大又黑又粗| 欧美激情第三页| 黄色欧美在线| 免费国产成人av| 中文字幕中文字幕在线一区 | 亚洲国产成人精品女人久久| 亚洲精品在线视频| 一区二区视频免费完整版观看| 视频一区不卡| 国产一区二区剧情av在线| 久草视频在线免费看| 日韩精品免费一线在线观看| 小黄鸭精品aⅴ导航网站入口| 亚洲欧美日产图| 国产精品538一区二区在线| 国产无遮无挡120秒| 亚洲精品资源美女情侣酒店 | 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 国产精品精品国产一区二区| 人妻巨大乳一二三区| 懂色av影视一区二区三区| 国产高清视频免费最新在线| 成人黄色免费片| 中文一区在线| 日韩在线观看免| 亚洲精品久久久久久久久| 成人av集中营| www.夜夜爱| 欧美激情自拍偷拍| 丰满熟女一区二区三区| 国产精品久久久久久久久| 欧美视频日韩| 谁有免费的黄色网址| 欧美一区二区视频网站| 国产福利电影在线播放| 亚洲欧洲精品一区二区三区波多野1战4 | 第一福利永久视频精品| 午夜视频成人| 精品久久久久久一区二区里番| 美腿丝袜一区二区三区| 亚洲一区二区91| 日韩中文字幕网址| 综合色就爱涩涩涩综合婷婷| 一区二区三区国产好的精华液| 色偷偷一区二区三区| 美洲精品一卡2卡三卡4卡四卡|