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

全網最通透:MySQL 的 redo log 保證數據不丟的原理

數據庫 新聞
本文主要講 MySQL 內部 XA 事務中 redo log 兩段式提交的細節。

總會有面試官問:你知道 MySQL 如何保障數據不丟的嗎?實際上這個問題是十分不準確的,MySQL 保障數據不丟的手段可太多了。但通常面試官想聽的內容就是 redo log 兩段式提交是如何保障數據不丟的。(不過個人感覺這么說還是不太準確)

所謂「redo log」,意即「重做日志」,也就是用來恢復數據用的日志。所謂「兩段式提交」,也被稱作「兩階段提交」(Two-Phase Commit,簡稱 2PC)。本文主要講 MySQL 內部 XA 事務中 redo log 兩段式提交的細節。為了讓大家飽餐一頓,我會先為大家上億點點前菜,雖然有點多,但是相信會很開胃。

開胃前菜

你知道什么是存儲引擎、隨機 IO 和順序 IO嗎?你知道 MySQL 中的緩沖池嗎?binlog、redo log 聽說過嗎?都有什么用?什么?你都不知道?面試結束了。

什么是存儲引擎?

存儲引擎是 MySQL 中直接與磁盤交互部分。頁是存儲引擎讀寫數據的最小單位,一個頁里可以有一條或多條表記錄。MySQL 中的存儲引擎有很多種,比如 InnoDB、MyISAM、Memory 等。其中最常用的是 InnoDB。而 InnoDB 是 MySQL 中唯一能夠完整支持事務特性的存儲引擎,也是一個高性能的存儲引擎。本文要講的「兩段式提交」就發生在 InnoDB 中。

什么是隨機 IO 和順序 IO?

磁盤讀寫數據的兩種方式。隨機 IO 需要先找到地址,再讀寫數據,每次拿到的地址都是隨機的。就像送外賣,每一單送的地址都不一樣,到處跑,效率極低。而順序 IO,由于地址是連貫的,找到地址后,一次可以讀寫許多數據,效率比較高。就像送外賣,所有的單子地址都在一棟樓,一下可以送很多,效率很高。

什么是緩沖池?

關系型數據庫的特點就是需要對磁盤中大量的數據進行存取,所以有時候也被叫做基于磁盤的數據庫。正是因為數據庫需要頻繁對磁盤進行 IO 操作,為了改善因為直接讀寫磁盤導致的 IO 性能問題,所以引入了緩沖池。

緩沖池是一片內存區域,存儲引擎在讀取數據時,會先將頁讀取到緩沖池中。下次讀取時,先判斷是否在緩沖池,如果在,則直接讀取,否則從磁盤中讀取。在修改數據時,如果緩沖池中不存在所需的數據頁,則從磁盤讀入緩沖池,否則直接對緩沖池中的數據頁進行修改。

這樣的好處是,如果我們頻繁修改某一個位于磁盤的數據頁,我們可以不用每次都去磁盤讀寫(注意是讀和寫)該頁,而是直接對緩沖池中的內容修改,在一定的時機再把數據刷新到磁盤。這樣就會使得對磁盤的多次操作變為一次。即便修改的內容在磁盤中相距較遠的不同數據頁上,我們也可以將對多次對磁盤的 IO 合并為一次隨機 IO。被修改的數據頁會與磁盤上的數據產生短暫的不一致,我們稱此時緩沖池中的數據頁為 臟頁 ,將該頁刷到磁盤的操作稱為 刷臟頁 (本句是重點,后面要吃)。這個刷臟頁的時機我們看看就好:[^1]

innodb_max_dirty_pages_pct

由于這個刷臟頁的過程還是異步的,這樣更新操作就不需要等待磁盤的 IO 操作了。因此這些特點極大地提升了 InnoDB 的性能。

什么是binlog?

binlog 是 MySQL 服務器層面實現的一種二進制日志,用于記錄所有對數據庫的更改操作(這種日志被稱為邏輯日志)。比如你 update 一條記錄,服務器就會記錄一條對應的信息到 binlog。但在 InnoDB 中,這個 binlog 是以事務為單位刷新到磁盤的[^2]。基于 binlog 的這種特性,一般我們會將 binlog 用于以下幾個方面:[^2]

數據庫增量備份與恢復:在使用備份還原數據后,可以使用 binlog 中記錄的內容對備份時間點(簡稱備份點)后的數據進行恢復。因為 binlog 會還會記錄下更改操作的時間,所以 binlog 可以恢復到某一具體時間點的數據。這就為我們刪庫后提供了除跑路以外的第二個選項:使用 binlog 恢復數據。

主從復制:MySQL 從服務器可以通過訂閱 binlog 實現對主服務器的增量復制。

審計:通過對 binlog 中的數據進行審計,判斷是否存在安全問題,比如 SQL 注入。

使用 binlog 進行恢復的流程是:[^5]

  1. 先通過最新的備份恢復數據庫的數據,并記錄下備份文件備份的時間點。
  2. 在 binlog 中找到這個時間點,提取這個時間點以后的數據用于實現對備份點后數據的恢復(這個特性被稱為 Point in Time,簡稱 PIT)。

各個部分之間的關系

正餐開始

食欲打開了,后面的內容我們就能吃的下了。

什么是 redo log?

前面我們講到數據頁在緩沖池中被修改會變成臟頁。如果這時宕機,臟頁就會失效,這就導致我們修改的數據丟失了,也就無法保證事務的持久性。保證數據不丟,就是 redo log 的一個重要功能。我們已經了解,如果我們修改了緩沖池中的數據頁就立刻刷臟頁,會產生大量隨機 IO,導致磁盤性能變差;但如果我們先寫緩沖,一段時間后再刷臟頁,就有可能造成數據丟失,無法保證事務的持久性。這可有點難了。

于是救世主來了,救世主的名字叫 WAL(Write-Ahead Logging,日志先行) 。即:事務提交前先寫日志,再修改頁(修改頁的時機就是刷臟頁的時機)。這里所謂的日志,就是 redo log。redo log 不會記錄對整個頁的修改,而是大概像這種:

xx 表空間,xx 頁,xx 位置,xx 

記錄下對磁盤中某某頁某某位置數據的修改結果(這種日志被稱為物理日志),這樣會節省很多磁盤空間。 由于 redo log 是順序寫(順序 IO),因此能有效提升 IO 效率;又因為每次事務提交前會先寫 redo log,因此可以保障更新的數據不丟失。

我們知道,一旦臟頁刷新,磁盤上對應的 redo log 就會失效,所以 redo log 用完后,可以再回頭使用,這樣更節省空間。直到需要刷 redo log buffer 時發現接下來的 redo log 對應的臟頁未被刷新,此時會強制刷新臟頁。緩沖池的好處我們前面已經講過,所以 redo log 弄了個類似作用的 redo log buffer。在寫 redo log 時會先寫 redo log buffer,并在以下時機將 redo log 刷新到磁盤:[^3]

  • 每秒刷新一次
  • 事務提交時
  • redo log buffer 剩余空間小于 1/2 時

我們理應想到,如果臟頁沒刷完,數據庫宕機了,那么必然是需要使用 redo log 來恢復數據的。那么 redo log 應該從哪開始恢復數據呢?為解決這個問題 InnoDB 為 redo log 記錄了序列號,這被稱為 LSN(Log Sequence Number),可以理解為偏移量,越新的日志 LSN 越大。InnoDB 用檢查點( checkpoint_lsn? )指示未被刷盤的數據從這里開始,用 lsn? 指示下一個應該被寫入日志的位置。不過由于有 redo log buffer 的緣故,實際被寫入磁盤的位置往往比 lsn 要小。

為了大家能有個更整體的概念,咱們再多吃一道配菜:undo log。InnoDB 能夠保證對事務的完整支持,這主要就得益于 redo log 和 undo log。redo log 我們講了,能夠保證緩沖池中被修改的數據頁不丟以及在數據庫宕機后對丟失的數據進行自動恢復。而 undo log 則用于實現 MVCC 和事務回滾。在事務執行的過程中,不但會記錄 redo log,還會記錄 undo log。至于更多細節,大家自行去了解吧。

那么 redo log 到底如何保障數據不丟的?

如何保障數據不丟?

假設我們有一個表 t1,數據如下:

mysql> select * from t1;
+----+------+
| id | name |
+----+------+
| 1 | a |
+----+------+

當我們執行如下 update 語句時:

mysql begin; update t1 set name='aa' where id=1; commit;

InnoDB 內部的流程是這樣的:

  1. 服務器收到事務開始的指令,為事務生成一個全局唯一的事務 id。這個事務 id 在記錄 binlog 和 redo log 時都會使用。
  2. 如果緩存池中沒有 id=1 所在數據頁的數據,從磁盤中找到對應的數據頁(注意,這里是一個數據頁,不是一條記錄),把數據頁加載到緩存。
  3. 修改緩存數據頁中 id=1 的數據。
  4. 記錄數據到 redo log buffer[^4]、binlog cache[^2]。根據 redo log 刷盤的策略,這個過程中 redo log buffer 可能會被刷新到磁盤。
  5. 服務器收到事務提交的指令。
  6. 刷新 redo log buffer 到磁盤,并標記該事務的狀態為 prepare。此操作稱為 redo log prepare。
  7. 刷新 binlog cache 到磁盤。
  8. 刷新 redo log buffer 到磁盤,并標記該事務的狀態為 commit。此操作稱為 redo log commit。
  9. 向客戶端返回事務執行的結果。

這樣 redo log 先 prepare,再刷新 binlog ,再 redo log commit 的過程就是一次兩段式提交。這種只在 MySQL 內部組件間保障數據一致性的操作,也被稱作內部 XA 事務;與之對應的是,保障跨服務器間數據一致性的兩段式提交,被稱為外部 XA 事務,即分布式事務。

注:XA 事務屬于分布式事務中兩段式提交事務的一種實現

在宕機后,重啟 MySQL 時,InnoDB 會自動恢復 redo log 中 checkpoint_lsn 后的,且處于 commit 狀態的事務。如果 redo log 中事務的狀態為 prepare,則需要先查看 binlog 中該事務是否存在,是的話就恢復,否則就回滾(通過 undo log 回滾。臟頁一直在刷,更新了臟頁,但事務沒提交就宕機了,所以需要回滾)。

消化一下

發生宕機怎么辦?

MySQL 宕機可能會發生在整個過程中的任意時刻。以剛才的流程為例,假設宕機發生在第 5 步后、第 6 步前。此時服務器還未向客戶端返回事務的結果,而 redo log 中可能記錄了該事務的 redo log,也可能沒有。但是只要該事務沒有被標記為 prepare,我們就認為該事務沒有執行完,否則 redo log 用于恢復事務的數據可能是不完整的。因此,只要此時我們選擇拋棄未 prepare 的 redo log,不會導致任何數據一致性的問題。

那么后面的步驟宕機會怎樣呢?這就涉及到為什么非得要兩階段提交了。

為什么非得要兩階段提交?

在說明以前,我們還需要弄清兩個問題:

  1. 有 binlog 為什么還要 redo log ?
  2. 有 redo log 為什么還要 binlog?

有 binlog 為什么還要 redo log ?

  1. binlog 不知道數據庫究竟是在哪一時刻丟失了哪部分數據,只能從備份點開始對 binlog 記錄重放來恢復數據,比較耗時。
  2. binlog 恢復是需要我們手動執行的,而 redo log 可以在服務器重啟后自動恢復數據。
  3. WAL + 先寫緩沖 + 異步刷臟頁有效提升了磁盤的 IO 效率。

有 redo log 為什么還要 binlog?

  1. binlog 是服務器層面的功能,redo log 是 innoDB 的功能。redo log 幫助 InnoDB 實現了性能提升、自動恢復。但其他存儲引擎是無法使用 redo log 的能力的。
  2. 我們也可以關閉 binlog,但大多數情況下我們都會開啟,因為開啟的好處更多。比如,主從模式需要訂閱 binlog 進行主從復制,以及可以通過 binlog 進行數據庫的增量備份和恢復。

redo log 有很多好處,所以我們不能放棄;binlog 也有很多好處,我們也不能放棄。也就是說,這兩個功能我們都需要開啟。既然都要開啟,那么 我們必須保證 redo log 和 binlog 數據的一致性。 如果 binlog 有 redo log 沒有,那么 redo log 宕機自動恢復時的數據就會缺少;反之,redo log 有,binlog 沒有,如果開啟了主從模式,主服務器因為 redo log 恢復了數據,但從服務器靠消費 binlog 保證和主服務器數據一致,這就導致從服務器比主服務器數據少。

那么為什么非得要寫兩次,我們能不能只寫一次 redo log?

這樣仍然會有不一致問題。比方說,先寫 binlog 再寫 redo log:

此時如果有大量并發,我們 binlog 噌噌噌往上寫,redo log 還沒寫完,宕機機了,兩者的數據就會出現大量不一致現象。此外,因為 binlog 數據最完整,這樣會導致我們必須從 binlog 回滾,而且還得是手動回滾。InnoDB 本來是可以自恢復的存儲引擎,這樣一來,自恢復的特性不是沒了,redo log 不是白開發了?使用 binlog 恢復 redo log 更不用想了,因為 binlog 根本不知道從何處開始恢復(它沒有 checkpoint_lsn )。

再說先寫 redo log 再寫 binlog:

不一致性的問題與上述內容相似。另外還會導致 redo log 在恢復時,每次都需要去 binlog 查看該事務是否已寫入,嚴重影響性能。而如果是兩階段提交,處于 commit 階段的事務都會直接恢復,處于 prepare 階段才需要去看 binlog。

那用 redo log 恢復 binlog 不行嗎?

第一,binlog 是服務器的特性,redo log 是 InnoDB 的特性,兩者并不在一個層面上,能不能這么做,很難說。第二,即便可以,也增加了很大的復雜度, redo log 中記錄的數據(物理日志)能不能復原 SQL 語句,如何復原,這都是需要思考的問題。遠遠不如直接使用兩階段提交方便。

兩段式提交會不會影響性能?

InnoDB 使用了組提交的方式,盡量降低了兩階段提交帶來的性能影響。在并發事務較多的情況下,MySQL 會將多個事務的 redo log 放在一起提交,大大節省了磁盤 IO。具體就不在此展開了。binlog 刷盤時同樣也會采取類似的策略。

吃點飯后甜點吧

如果你搞明白了上面的內容,你會發現「基于事務消息的分布式事務」使用的就是典型的 2PC 思想,你又會發現「基于本地消息的分布式事務」使用的就是典型的 WAL 思想。如果你不了解,馬上去學一下吧!

責任編輯:張燕妮 來源: 知乎專欄
相關推薦

2024-03-14 14:18:58

MySQL業務設計事務

2025-01-20 08:20:00

redo logMySQL數據庫

2021-01-26 13:47:08

MySQL存儲數據

2020-08-20 12:10:42

MySQL日志數據庫

2024-05-30 08:03:17

2024-06-11 00:00:02

MySQL數據庫系統

2021-03-08 10:19:59

MQ消息磁盤

2021-07-28 08:32:03

MySQLRedo存儲

2025-08-11 09:08:41

2025-06-06 07:02:43

2019-05-06 15:27:48

Oracle數據庫數據

2024-04-12 14:04:17

機器學習DNN

2020-10-26 09:19:11

線程池消息

2024-05-28 00:10:00

JavaMySQL數據庫

2021-10-04 09:23:30

Redo日志內存

2024-08-20 08:40:54

2024-02-26 08:10:00

Redis數據數據庫

2024-07-29 11:50:50

2024-11-11 07:05:00

Redis哨兵模式主從復制

2024-12-16 00:00:05

MySQL二進制數據
點贊
收藏

51CTO技術棧公眾號

国产激情小视频在线| 欧美成人777| 午夜精品成人av| 日韩一区欧美小说| 国产伦理一区二区三区| 欧美一区二区三区久久久| 天天精品视频| 日韩精品黄色网| 伊人精品视频在线观看| 日韩伦理在线一区| 亚洲色图制服诱惑| 欧美性xxxx69| 性欧美8khd高清极品| 视频一区二区不卡| 欧美国产日韩一区| 国产又粗又猛又爽又黄的视频四季| 成人另类视频| 欧美一区二区在线视频| 精品久久久噜噜噜噜久久图片| 牛牛精品视频在线| 亚洲视频在线一区二区| 欧美精品一区二区三区在线看午夜 | 国产精品网站在线播放| 国产精品对白一区二区三区| 亚洲怡红院av| 久久中文字幕一区二区三区| 97在线观看免费| 欧美日韩激情在线观看| 欧美gvvideo网站| 精品无人区太爽高潮在线播放| 亚洲成人福利视频| 精品一区二区三区免费看| 欧美影院午夜播放| 热久久这里只有精品| 91亚洲国产精品| 亚洲 欧美 中文字幕| 亚洲经典在线| 欧美精品电影在线| 欧美成人免费看| 亚洲精品在线观看91| 色噜噜国产精品视频一区二区| 实拍女处破www免费看| 欧美日韩一区二区三区四区不卡 | 午夜久久福利| 久久久精品一区二区三区| 日本伦理一区二区三区| 91免费精品| 久久精品国产v日韩v亚洲| 国产精品视频在| 日韩精品不卡一区二区| 在线观看精品国产视频| 超碰人人人人人人人| 成人在线一区| www.日韩视频| 精品人妻伦九区久久aaa片| 久久精品影视| 欧美大荫蒂xxx| 黄色小视频在线免费看| 黄色日韩精品| 午夜免费在线观看精品视频| 色婷婷在线观看视频| 精品成人一区| 51精品国产黑色丝袜高跟鞋| 69国产精品视频免费观看| 久久精品五月| 国产精品狼人色视频一区| 91精品国自产| 国产成人丝袜美腿| 国内精品二区| 国产在线观看高清视频| 国产精品久久久久久久久图文区 | 久久精品日产第一区二区| 麻豆成人久久精品二区三区红| 亚洲精品不卡在线| 在线不卡av电影| 欧美国产美女| 欧美人在线观看| 日韩经典在线观看| 日本麻豆一区二区三区视频| 国产日韩精品在线观看| 亚洲第一天堂网| 99综合电影在线视频| 日韩av大全| 四虎影视国产在线视频| 欧美日韩亚洲精品内裤| 亚洲免费黄色网| 综合中文字幕| 国产一区二区三区视频| 久久中文免费视频| 亚洲综合电影一区二区三区| 成人a在线观看| 日韩一级片免费看| 欧美高清在线精品一区| 国产精品va在线观看无码| 日本成人三级电影| 日韩欧美国产综合一区| 亚洲理论片在线观看| 欧美精品国产一区二区| 国产suv精品一区二区三区88区| 国产精品久久久久久久久久久久久久久久久久| 国v精品久久久网| 色综合电影网| 人在线成免费视频| 91精品国产乱码久久蜜臀| 中文字幕xxx| 亚洲视频碰碰| 成人a级免费视频| 欧美女优在线观看| 亚洲午夜久久久久久久久电影网| 亚洲精品自拍网| 免费成人蒂法| 欧美精品免费在线| 中文字幕一二三四| 91在线视频观看| 91免费国产精品| 欧美成人三级| 亚洲一区二区久久久| 日韩av在线天堂| 国产乱码精品一区二区三区五月婷| 色综合中文字幕| 91精品天堂| 国产乱理伦片a级在线观看| 亚洲一二三区不卡| 一区二区三区国产好的精华液| 伊人精品一区| 性欧美亚洲xxxx乳在线观看| 国产三级按摩推拿按摩| 国产精品萝li| 九九九在线观看视频| 日韩美脚连裤袜丝袜在线| 欧美激情亚洲精品| 99免费在线视频| 亚洲视频在线观看一区| jizz18女人| 奇米影视亚洲| 国产精品久久久久9999| 精品欧美不卡一区二区在线观看| 精品久久久一区| 日本五十肥熟交尾| 中文久久精品| 久久精品aaaaaa毛片| 久草免费在线视频| 亚洲精品成人久久电影| 日本三级片在线观看| 成人黄色a**站在线观看| 人妻av无码专区| 精品精品精品| 欧美一区二区三区四区在线| 涩涩视频在线观看免费| 色综合久久99| av手机在线播放| 免费观看成人av| 中文字幕日韩一区二区三区| 国产视频一区二区在线播放| 欧美乱大交xxxxx| 午夜精品无码一区二区三区| 亚洲午夜影视影院在线观看| 亚洲一区二区三区黄色| 国产一区二区三区久久| 欧美大陆一区二区| jizzjizz少妇亚洲水多| 日韩一区二区三区在线播放| 国产免费的av| 亚洲丶国产丶欧美一区二区三区| 久久久久麻豆v国产精华液好用吗 在线观看国产免费视频 | 欧美黄色aaa| 成人少妇影院yyyy| 成熟丰满熟妇高潮xxxxx视频| 欧美美女在线| 91精品国产综合久久香蕉的用户体验| jizz性欧美| 亚洲国产成人av在线| 国产伦精品一区二区三区视频网站| 国产人伦精品一区二区| 久久精品亚洲天堂| 国产日韩1区| 日本一区二区三不卡| 亚洲一区有码| 98精品国产高清在线xxxx天堂| 久久精品色图| 91精品国产欧美日韩| 91精品国产乱码在线观看| 国产欧美精品在线观看| 18深夜在线观看免费视频| 国产欧美日本| 免费在线观看污污视频| 欧美亚洲色图校园春色| 国产视频999| 国产粉嫩在线观看| 国产一区二区三区在线| 超碰在线人人干| 在线看一区二区| 久久成人在线观看| 国产日韩欧美综合在线| 免费黄色a级片| 日本aⅴ免费视频一区二区三区| 91网站在线观看免费| av一区二区在线播放| 国产激情美女久久久久久吹潮| 国产精品高清乱码在线观看| 九九精品视频在线| 国产福利免费在线观看| 亚洲成人激情视频| 一级视频在线播放| 色美美综合视频| 国产亚洲精品女人久久久久久| 日本一区二区三区高清不卡| 中文字幕天堂av| 久久99国产精品成人| 激情网站五月天| 欧美色图麻豆| 正在播放一区| 精品日韩毛片| 免费看污久久久| 久久久久观看| 7777精品久久久大香线蕉小说| 中文另类视频| 欧洲亚洲免费在线| av资源网在线播放| 久久99久久亚洲国产| 日本天堂在线观看| 国产亚洲欧洲高清| 人成在线免费视频| 亚洲激情视频网站| 日本黄视频在线观看| 欧美一区二区视频在线观看2020| 亚洲天堂网视频| 91极品视觉盛宴| 成人免费毛片男人用品| 精品久久久久人成| 欧美精品亚洲精品日韩精品| 亚洲成av人影院| 国产一级在线播放| 亚洲国产成人va在线观看天堂| 国产1区2区3区4区| 亚洲精品亚洲人成人网| 亚洲综合网在线| 亚洲乱码精品一二三四区日韩在线| 永久免费看片直接| 亚洲欧洲成人自拍| 99久久99久久精品国产| 亚洲欧美偷拍另类a∨色屁股| 久草手机视频在线观看| 17c精品麻豆一区二区免费| 亚洲 欧美 国产 另类| 成人欧美一区二区三区黑人麻豆| 日本在线观看网址| 亚洲欧洲成人av每日更新| 国产精品视频看看| 亚洲精品乱码久久久久久| 九九热精品在线观看| 亚洲一区二区三区四区不卡| 欧美福利视频一区二区| 日韩欧美一区二区在线| 成人av网站在线播放| 欧美视频第二页| 国产露脸无套对白在线播放| 欧美一级在线免费| 国精品人妻无码一区二区三区喝尿| 欧美精品一区二区三区四区| 天堂91在线| 一区二区三区在线播放欧美| 日本在线免费网| 欧美巨大黑人极品精男| 狠狠躁少妇一区二区三区| 国产成人精品久久| 91麻豆精品一二三区在线| 99视频在线播放| 亚洲激情播播| 伊人久久大香线蕉综合75| 国产一区激情| 国产女女做受ⅹxx高潮| 老司机精品视频一区二区三区| 善良的小姨在线| 97se亚洲国产综合自在线观| 丁香花五月婷婷| 亚洲激情av在线| 国产嫩bbwbbw高潮| 制服丝袜在线91| 国产又爽又黄网站亚洲视频123| 亚洲人成在线免费观看| 麻豆视频在线免费观看| 午夜剧场成人观在线视频免费观看| 性欧美freehd18| 成人久久18免费网站漫画| 亚洲成人一品| 日本精品免费视频| 麻豆91精品| 中文国产在线观看| 久久色在线观看| 激情五月婷婷在线| 在线精品视频免费观看| 亚洲免费成人网| 一本色道久久综合亚洲精品小说 | 日本乱码高清不卡字幕| 精品久久人妻av中文字幕| 亚洲欧美在线免费观看| 在线观看男女av免费网址| 国产第一区电影| 国产伦精品一区二区三区在线播放| 亚洲成色最大综合在线| 宅男噜噜噜66国产日韩在线观看| 涩涩网站在线看| 久久久99精品久久| 国产精品1234区| 日韩一区二区三区在线视频| 成人在线免费视频| 26uuu日韩精品一区二区| 91嫩草国产线观看亚洲一区二区| 欧美日本韩国国产| 1024日韩| 丰满人妻一区二区三区大胸| 国产精品久久久久久户外露出 | 欧美无毛视频| 国产一区二区在线观看免费播放| 外国成人免费视频| 国产精品人人爽人人爽| 26uuuu精品一区二区| 国产精品111| 精品久久久久久久久久久久久久久久久 | 精品资源在线| 中国丰满熟妇xxxx性| 国产在线精品一区二区三区不卡 | 国产精品福利在线观看播放| 亚欧在线免费观看| www国产精品av| 欧美激情亚洲综合| 亚洲激情国产精品| 国产99在线观看| 国产美女精品在线观看| 综合视频在线| 久久久久久国产精品日本| 亚洲三级在线免费观看| 国产日韩精品suv| 不卡毛片在线看| 精品国产18久久久久久二百| 中文精品一区二区三区| 久久成人av少妇免费| 国产jizz18女人高潮| 欧美日韩精品欧美日韩精品| 在线免费看黄| 国产啪精品视频| 国产国产精品| 青娱乐精品在线| 国产精品国产三级国产aⅴ中文 | 成年人免费观看的视频| 精东粉嫩av免费一区二区三区| 人与动物性xxxx| 欧美一区二区三区影视| 在线āv视频| 国产精品一区二区三区四区五区| 亚洲精品人人| 白丝女仆被免费网站| 91福利小视频| 日本电影在线观看网站| 91网站在线免费观看| 国模吧视频一区| 国产精品麻豆入口| 一本到不卡精品视频在线观看| caoporn国产精品免费视频| 成人国产在线激情| 国内精品美女在线观看| 少妇户外露出[11p]| 在线观看91视频| 1区2区在线观看| 精品综合久久| 奇米亚洲午夜久久精品| 成人免费黄色小视频| 亚洲精品久久视频| 51一区二区三区| 波多野结衣 作品| 久久综合色之久久综合| 亚洲资源在线播放| 欧美精品精品精品精品免费| 亚洲宅男一区| 久久综合在线观看| 婷婷开心激情综合| 在线看的av网站| 国产精品视频入口| 日韩avvvv在线播放| 青青草免费av| 亚洲午夜未删减在线观看| 国产精品一区二区美女视频免费看| 青青青免费在线| 18欧美亚洲精品| 日本中文字幕电影在线观看| 成人性生交大片免费看视频直播 | 欧美一区二区高清| 午夜久久中文| 美女黄色片网站| 91女神在线视频| 国产色视频在线| 欧美最猛性xxxxx(亚洲精品)| 亚洲精品a级片| 国产人妻一区二区| 精品处破学生在线二十三| 四虎成人精品一区二区免费网站| 国产精品无码人妻一区二区在线| 亚洲欧美影音先锋| 国产中文字幕在线观看|