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

PostgreSQL數據閃回工具Pg_Dirtyread使用實踐

原創 精選
數據庫 PostgreSQL
pg_dirtyread 是一個 PostgreSQL 擴展,它利用了 PostgreSQL 的多版本并發控制(MVCC)機制來讀取未提交的事務所影響的數據。此插件可以用于在開發和測試環境中快速查看事務對數據的即時影響,當關鍵表中的數據被意外刪除后,業務系統可能會出現服務中斷、數據丟失、數據不一致等問題,影響用戶服務。

作者 | 吳守陽

審校 | 重樓

目錄

1、概述

2、恢復機制

3、優缺點

4、安裝

5、操作實例

1)基于表數據Delete閃回

2)基于表字段數據閃回

3)基于時間點閃回

6、支持查詢被刪除列的歷史數據

7、注意事項

8、總結

概述

pg_dirtyread 是一個PostgreSQL 擴展,它利用了PostgreSQL 的多版本并發控制(MVCC)機制來讀取未提交的事務所影響的數據。此插件可以用于在開發和測試環境中快速查看事務對數據的即時影響,當關鍵表中的數據被意外刪除后,業務系統可能會出現服務中斷、數據丟失、數據不一致等問題,影響用戶服務。通過使用pg_dirtyread可以快速查看未提交的刪除或更新事務,恢復數據,從而恢復正常服務、確保數據完整、數據一致。

恢復機制

在 PostgreSQL 中,事務提交后,如果數據尚未被 VACUUM 清理,仍有可能通過某些方式恢復這些數據。這是因為 PostgreSQL 采用了多版本并發控制(MVCC)機制,允許舊的元組(稱為 Dead 元組)在事務提交后繼續保留在系統中,直到被 VACUUM 清除。具體來說:

  • MVCC 機制:即使事務已提交,刪除或更新的行仍作為舊版本存在,允許在 VACUUM 運行之前進行恢復。
  • VACUUM 的作用:VACUUM 操作會清理表中的 Dead 元組,回收存儲空間并重置行標識符(TID),以便新行可以重用這些空間。一旦執行了 VACUUM,Dead 元組被清除,數據就無法再通過常規手段恢復。

優缺點

  • pg_dirtyread 插件非常方便,它可以通過安裝來找回數據。
  • 該插件會返回所有數據,包括那些未被刪除的數據。
  • 由于 PostgreSQL 的 MVCC 機制,pg_dirtyread 只能用于找回 DML 操作的數據。
  • 基于時間點恢復要配置參數track_commit_timestamp = on
  • 支持PostgreSQL16及以前版本

安裝

#安裝依賴
yum install postgresql16-devel clang
 
wget https://github.com/df7cb/pg_dirtyread/archive/refs/tags/2.7.tar.gz
tar xvf 2.7.tar.gz
mv pg_dirtyread-2.7/ /jesong/pgdata/contrib/
cd /jesong/pgdata/contrib/
make PG_CONFIG=/usr/pgsql-16/bin/pg_config
make install PG_CONFIG=/usr/pgsql-16/bin/pg_config
 
# 登陸數據庫 安裝插件
postgres=# CREATE EXTENSION pg_dirtyread;
postgres=# select * from pg_available_extensions;
postgres=# \dx

數據恢復前置條件

#如果發現錯誤操作,導致數據意外刪除,要第一時間關閉表上的vacuum
#關閉vacuum
ALTER TABLE foo SET ( autovacuum_enabled = false, toast.autovacuum_enabled = false);
 
#表未被vacuum
postgres=# select * from pg_stat_all_tables where relname='foo';
-[ RECORD 1 ]-------+-----------------------------
last_vacuum | 
last_autovacuum | 
vacuum_count | 0
autovacuum_count | 0

操作示例

1)基于表數據Delete閃回

--創建測試表
CREATE TABLE saas (id bigint, name text, mail text); 
 
-- 測試方便,先把自動vacuum關閉掉。
ALTER TABLE saas SET (
 autovacuum_enabled = false, toast.autovacuum_enabled = false
);
 
--插入數據
INSERT INTO saas VALUES (1, 'Test1','111@qq.com'), (2, 'New Test2','111@qq.com'); 
--刪除所有數據
DELETE FROM saas ; 
 
postgres=# select * from saas;
--獲取到了已刪除的數據
postgres=# SELECT * FROM pg_dirtyread('saas') as t(id bigint, name text, mail text);
 id | name | mail 
----+-----------+------------
 1 | Test1 | 111@qq.com
 2 | New Test2 | 111@qq.com
(2 rows)

2)基于表字段數據閃回

CREATE TABLE saas1 (id bigint, name text, mail text); 
INSERT INTO saas1 VALUES (1, 'Test1','111@qq.com'), (2, 'New Test2','111@qq.com'); 
 
ALTER TABLE saas1 DROP COLUMN mail ; 
DELETE FROM saas1; 
 
postgres=# select * from saas1;
 
 --獲取到了已刪除列的數據
postgres=# SELECT * FROM pg_dirtyread('saas1') t(id bigint, name text, dropped_3 text);
 id | name | dropped_3 
----+-----------+------------
 1 | Test1 | 111@qq.com
 2 | New Test2 | 111@qq.com
(2 rows)

指定列的規則:使用dropped_N來訪問第N列,從1開始計數。

局限性:

由于 PostgreSQL 刪除操作會移除原始列的元數據信息,因此在使用 pg_dirtyread 時,需要在表列名中顯式指定正確的數據類型。這包括類型長度、對齊方式和類型修飾符,并且數據是按值傳遞的。

1.顯式指定類型:

在讀取 Dead 元組時,需要明確指定列的數據類型,包括長度和其他修飾符。

2.完整性檢查:

為了進行有效的數據恢復和完整性檢查,必須確保類型信息的準確性。

3)基于時間點閃回

如果你想恢復到某個特定時間點的數據,可以通過 pg_xact_commit_timestamp 系統函數來獲取每個事務的提交時間。

具體步驟如下:

1.獲取提交時間:

使用 pg_xact_commit_timestamp 函數來獲取每個事務的提交時間。這包括寫入事務的提交時間(xmin)和刪除或更新事務的提交時間(xmax)。

2.基于時間點的閃回查詢:

有了這些提交時間,你可以根據需要恢復到的具體時間點來過濾數據,從而實現基于時間點的數據恢復。

--參數配置
track_commit_timestamp = on 
 
--模擬數據
 CREATE TABLE saas2 (id bigint, name text, mail text); 
INSERT INTO saas2 VALUES (1, 'Test1','111@qq.com'), (2, 'New Test2','111@qq.com'); 
INSERT INTO saas2 VALUES (3, 'Test3','111@qq.com'), (4, 'New Test4','111@qq.com'); 
DELETE FROM saas2; 
 
--查詢數據歷史版本
select pg_xact_commit_timestamp(xmin) as xmin_time,
pg_xact_commit_timestamp(case xmax when 0 then null else xmax end) as xmax_time,*
from pg_dirtyread('saas2') as t(tableoid oid,ctid tid,xmin xid,xmax xid,cmin cid,
cmax cid,id bigint, name text, mail text);
 xmin_time | xmax_time | tableoid | ctid | xmin | xmax | cmin | cmax | id | name | mail 
-------------------------------+------------------------------+----------+-------+------+------+------+------+----+-----------+------------
 2024-09-13 16:49:10.096164+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,1) | 822 | 824 | 0 | 0 | 1 | Test1 | 111@qq.com
 2024-09-13 16:49:10.096164+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,2) | 822 | 824 | 0 | 0 | 2 | New Test2 | 111@qq.com
 2024-09-13 16:50:10.699546+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,3) | 823 | 824 | 0 | 0 | 3 | Test3 | 111@qq.com
 2024-09-13 16:50:10.699546+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,4) | 823 | 824 | 0 | 0 | 4 | New Test4 | 111@qq.com
(4 rows)
 
--查詢某個時間點的數據
SELECT
pg_xact_commit_timestamp ( xmin ) AS xmin_time,
pg_xact_commit_timestamp ( CASE xmax WHEN 0 THEN NULL ELSE xmax END ) AS xmax_time,* 
FROM
pg_dirtyread ( 'saas2' ) AS t ( tableoid oid, ctid tid, xmin xid, xmax xid, cmin cid, cmax cid, id bigint, name text, mail text ) 
WHERE pg_xact_commit_timestamp ( xmin ) <= '2024-09-13 16:51:10' and pg_xact_commit_timestamp ( CASE xmax WHEN 0 THEN NULL ELSE xmax END ) <= '2024-09-13 16:51:10';
 xmin_time | xmax_time | tableoid | ctid | xmin | xmax | cmin | cmax | id | name | mail 
-------------------------------+------------------------------+----------+-------+------+------+------+------+----+-----------+------------
 2024-09-13 16:49:10.096164+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,1) | 822 | 824 | 0 | 0 | 1 | Test1 | 111@qq.com
 2024-09-13 16:49:10.096164+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,2) | 822 | 824 | 0 | 0 | 2 | New Test2 | 111@qq.com
 2024-09-13 16:50:10.699546+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,3) | 823 | 824 | 0 | 0 | 3 | Test3 | 111@qq.com
 2024-09-13 16:50:10.699546+08 | 2024-09-13 16:50:15.77861+08 | 16465 | (0,4) | 823 | 824 | 0 | 0 | 4 | New Test4 | 111@qq.com
(4 rows)

支持查詢被刪除列的歷史數據

--創建表
CREATE TABLE saas3 (id bigint, name text, mail text); 
INSERT INTO saas3 VALUES (1, 'Test1','111@qq.com'), (2, 'New Test2','111@qq.com'); 
INSERT INTO saas3 VALUES (3, 'Test3','111@qq.com'), (4, 'New Test4','111@qq.com'); 
--添加字段
alter table saas3 add column qq text;
--寫入數據
postgres=# INSERT INTO saas3 VALUES (5, 'Test3','111@qq.com','qq1223'), (6, 'New Test4','111@qq.com','qq234');
--刪除列
postgres=# alter table saas3 drop column mail;
--刪除某條數據
postgres=# delete from saas3 where id=6;
--獲取被刪除的列數據
postgres=# select pg_xact_commit_timestamp(xmin) as xmin_time,
pg_xact_commit_timestamp(case xmax when 0 then null else xmax end) as xmax_time,*
from pg_dirtyread('saas3') as t(tableoid oid,ctid tid,xmin xid,xmax xid,cmin cid,
cmax cid,id bigint, name text, dropped_3 text,qq text)
 xmin_time | xmax_time | tableoid | ctid | xmin | xmax | cmin | cmax | id | name | dropped_3 | qq 
-------------------------------+-------------------------------+----------+-------+------+------+------+------+----+-----------+------------+--------
 2024-09-13 17:26:43.600404+08 | | 16480 | (0,1) | 839 | 0 | 0 | 0 | 1 | Test1 | 111@qq.com | 
 2024-09-13 17:26:43.600404+08 | | 16480 | (0,2) | 839 | 0 | 0 | 0 | 2 | New Test2 | 111@qq.com | 
 2024-09-13 17:26:45.03857+08 | | 16480 | (0,3) | 840 | 0 | 0 | 0 | 3 | Test3 | 111@qq.com | 
 2024-09-13 17:26:45.03857+08 | | 16480 | (0,4) | 840 | 0 | 0 | 0 | 4 | New Test4 | 111@qq.com | 
 2024-09-13 17:28:47.577755+08 | | 16480 | (0,5) | 842 | 0 | 0 | 0 | 5 | Test3 | 111@qq.com | qq1223
 2024-09-13 17:28:47.577755+08 | 2024-09-13 17:31:58.565021+08 | 16480 | (0,6) | 842 | 844 | 0 | 0 | 6 | New Test4 | 111@qq.com | qq234
(6 rows)
 
--按時間獲取被刪除的列數據
postgres=# select pg_xact_commit_timestamp(xmin) as xmin_time,
pg_xact_commit_timestamp(case xmax when 0 then null else xmax end) as xmax_time,*
from pg_dirtyread('saas3') as t(tableoid oid,ctid tid,xmin xid,xmax xid,cmin cid,
cmax cid,id bigint, name text, dropped_3 text,qq text)
WHERE pg_xact_commit_timestamp ( xmin ) <= '2024-09-13 17:28:48'
 xmin_time | xmax_time | tableoid | ctid | xmin | xmax | cmin | cmax | id | name | dropped_3 | qq 
-------------------------------+-------------------------------+----------+-------+------+------+------+------+----+-----------+------------+--------
 2024-09-13 17:26:43.600404+08 | | 16480 | (0,1) | 839 | 0 | 0 | 0 | 1 | Test1 | 111@qq.com | 
 2024-09-13 17:26:43.600404+08 | | 16480 | (0,2) | 839 | 0 | 0 | 0 | 2 | New Test2 | 111@qq.com | 
 2024-09-13 17:26:45.03857+08 | | 16480 | (0,3) | 840 | 0 | 0 | 0 | 3 | Test3 | 111@qq.com | 
 2024-09-13 17:26:45.03857+08 | | 16480 | (0,4) | 840 | 0 | 0 | 0 | 4 | New Test4 | 111@qq.com | 
 2024-09-13 17:28:47.577755+08 | | 16480 | (0,5) | 842 | 0 | 0 | 0 | 5 | Test3 | 111@qq.com | qq1223
 2024-09-13 17:28:47.577755+08 | 2024-09-13 17:31:58.565021+08 | 16480 | (0,6) | 842 | 844 | 0 | 0 | 6 | New Test4 | 111@qq.com | qq234
(6 rows)

注意事項

  • 適用范圍: pg_dirtyread 主要適用于 MVCC 機制下的 DML 操作(如 DELETE 和 UPDATE),對于 DDL 操作(如 DROP TABLE)導致的數據丟失則無能為力。
  • 事務提交后: 一旦事務提交,數據恢復變得更加困難。如果 VACUUM 沒有運行,未提交的事務產生的 Dead 元組仍然存在,可以通過 pg_dirtyread 查看這些數據。但是一旦 VACUUM 清除了 Dead 元組,數據就無法通過 pg_dirtyread 恢復。
  • 安全性問題:使用 pg_dirtyread 讀取未提交的數據可能會帶來數據一致性和安全性問題。因此,在生產環境中應謹慎使用,并確保數據安全。

總結

pg_dirtyread 是一個 PostgreSQL 擴展,它主要用于開發和測試環境中快速查看和恢復由于誤操作導致的數據丟失。它利用 MVCC 機制來讀取未提交的數據,適用于 DML 操作。在事務提交前,pg_dirtyread 提供了一種便捷的數據恢復方法。然而,在事務提交后,如果沒有及時運行 VACUUM,仍然有機會恢復數據,但一旦 VACUUM 清除了 Dead 元組,數據恢復將變得不可行。因此,在生產環境中應謹慎使用 pg_dirtyread,并依賴備份和 WAL 日志歸檔等更為可靠的恢復機制。

作者介紹

吳守陽,51CTO社區編輯,擁有8年DBA工作經驗,熟練管理MySQL、Redis、MongoDB等開源數據庫。精通性能優化、備份恢復和高可用性架構設計。善于故障排除和自動化運維,保障系統穩定可靠。具備良好的團隊合作和溝通能力,致力于為企業提供高效可靠的數據庫解決方案。

責任編輯:華軒 來源: 51CTO
相關推薦

2017-10-26 15:32:23

數據庫Oracle閃回查詢

2011-08-25 09:56:05

PostgreSQLpg_ident.co

2011-08-24 13:37:33

PostgreSQLpg_hba.conf

2019-10-11 09:55:53

數據工具架構

2017-11-20 11:23:12

MySQLMyFlash閃回工具

2010-04-07 17:27:38

Oracle 11g

2024-10-16 10:26:10

2024-11-15 08:00:00

2011-08-09 13:14:37

Oracle 10g數據庫閃回

2011-03-17 11:38:35

2024-09-10 08:00:00

PostgreSQL數據庫

2025-08-08 07:30:49

數據數據庫閃回

2010-04-15 11:41:21

Oracle 數據庫

2010-04-15 12:43:06

Oracle數據庫

2010-04-15 11:33:39

Oracle數據庫

2024-01-18 08:00:00

PostgreSQLPgvector

2017-09-14 10:45:47

PostgreSQL日志分析pgBadger

2023-01-03 08:55:38

PG數據庫運維

2021-07-07 21:07:16

PostgreSQL架構容災庫

2022-10-12 13:33:25

PostgreSQL數據庫
點贊
收藏

51CTO技術棧公眾號

欧美精品一区二区久久婷婷| 国产精品成人一区二区三区夜夜夜| 国产69精品久久久久99| 玖草视频在线观看| 久久99久久99精品免观看软件| 中文字幕乱码久久午夜不卡| 亚洲va欧美va国产综合久久| 日韩 欧美 亚洲| 欧美日韩伦理在线免费| 91精品免费观看| av在线播放亚洲| 在线激情小视频| 不卡一区二区三区四区| 国产精品久久久久久五月尺| 九九视频免费看| 精品日产免费二区日产免费二区| 欧美刺激午夜性久久久久久久| 久久久久久久中文| 精品孕妇一区二区三区| 不卡电影免费在线播放一区| 国产精品视频自在线| 国产精选第一页| 93在线视频精品免费观看| 亚洲国产99精品国自产| 国产福利精品一区二区三区| 中文字幕高清在线播放| 亚洲精品国产精华液| 日韩美女一区| 天堂在线中文字幕| 粉嫩av一区二区三区| 国产欧美一区二区三区视频| 五月天婷婷久久| 韩日成人av| 久久久91精品国产一区不卡| av黄色在线免费观看| 精品成人自拍视频| 日韩久久免费av| 中文字幕第38页| 国产精品久久久久av电视剧| 欧美日韩激情美女| 美国av在线播放| 婷婷五月在线视频| 国产日本一区二区| 久久久综合亚洲91久久98| 国产黄色片网站| 国产一区二三区| 国产日韩欧美在线看| а中文在线天堂| 久久久噜噜噜久久狠狠50岁| 91干在线观看| 久久狠狠高潮亚洲精品| 亚洲二区免费| 7m第一福利500精品视频| 国产一级特黄a高潮片| 欧美影院一区| 欧美国产高跟鞋裸体秀xxxhd| 天天看天天摸天天操| 欧美肥老太太性生活| 中文字幕亚洲综合久久筱田步美| 日韩一级av毛片| 欧洲乱码伦视频免费| 在线性视频日韩欧美| 人妻熟人中文字幕一区二区| 精品精品久久| 在线观看日韩欧美| 亚洲色图27p| 888久久久| 久久久久久国产精品久久| 青青草原在线免费观看视频| 国内揄拍国内精品久久| 性视频1819p久久| 亚洲 欧美 视频| 免费视频一区| 国产精品成人观看视频国产奇米| 免费在线观看av的网站| 久久99热这里只有精品| 亚洲影院色在线观看免费| 亚洲第一天堂网| 91丝袜呻吟高潮美腿白嫩在线观看| 精品一区在线播放| 精品999视频| 国产精品成人一区二区艾草 | 96成人在线视频| www.国产.com| 2020国产精品| 亚洲一区三区电影在线观看| 在线看三级电影| 精品毛片网大全| 高潮一区二区三区| 99re热精品视频| 国产一区二区三区精品久久久| 你懂得视频在线观看| 欧美福利影院| 国产成人精品在线| 国产999久久久| 91视视频在线直接观看在线看网页在线看| 日韩三级电影网站| 欧美人与性动交α欧美精品济南到| 狠狠躁夜夜躁人人躁婷婷91| 国产美女18xxxx免费视频| 综合欧美亚洲| 色哟哟亚洲精品一区二区| 国产一级片播放| 免费在线观看视频一区| 高清国产在线一区| 国产在线观看高清视频| 一区二区欧美国产| 欧美精品性生活| 国产精品毛片av| 日韩一区二区三区国产| 久久久久久久久久免费视频| 久久av资源网| 欧美日韩成人一区二区三区| 日本色护士高潮视频在线观看| 欧美在线免费观看亚洲| 亚洲最大视频网| 婷婷亚洲五月| 国产精品极品美女粉嫩高清在线| 色婷婷激情五月| 国产精品久久国产精麻豆99网站| 国产亚洲综合视频| 午夜精品在线| 日韩亚洲综合在线| 成人黄色三级视频| 91视视频在线观看入口直接观看www | 欧美成人福利在线观看| 日本一区福利在线| 欧美日韩成人在线视频| 91tv国产成人福利| 国产日韩欧美精品电影三级在线| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品一区二区三区www| 国产亚洲精品久久久久久777| 国产无遮挡呻吟娇喘视频| 成人午夜视频在线观看| 国产精品12p| 欧美综合影院| 色噜噜久久综合伊人一本| 欧美性猛交xxxx乱大交hd| 91在线小视频| 欧美爱爱视频免费看| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美另类第一页| 国产a级免费视频| 亚洲另类在线一区| 在线a免费观看| 综合激情视频| 国产精品久久久久久久久婷婷| 污污视频在线| 精品国产免费一区二区三区香蕉| 久久精品一级片| 成人午夜电影小说| 国产九九九九九| 欧美绝顶高潮抽搐喷水合集| 5278欧美一区二区三区| 亚洲人成色777777精品音频| 欧美日韩国产中文精品字幕自在自线| 亚洲の无码国产の无码步美| 国产欧美午夜| 欧美成人一区二区在线| 亚洲精品在线影院| 中日韩美女免费视频网站在线观看 | 欧美午夜在线| 国产精品国产精品| 色偷偷色偷偷色偷偷在线视频| 日韩高清有码在线| 波多野结衣在线电影| 国产精品久久久一区麻豆最新章节| 岛国毛片在线播放| 综合一区二区三区| 国产伦一区二区三区色一情| 中文字幕在线官网| 在线视频精品一| 国产又粗又猛又黄又爽| 一区二区三区欧美亚洲| aaaa黄色片| 久久爱www久久做| 免费看欧美一级片| 九九视频精品全部免费播放| 国产日韩精品综合网站| 色婷婷视频在线观看| 国产视频精品免费播放| 中文字幕日韩三级| 一区二区免费视频| 怡红院一区二区三区| 国产精品中文字幕一区二区三区| 国产爆乳无码一区二区麻豆| 国产91精品对白在线播放| 成人中文字幕+乱码+中文字幕| sm在线观看| 最近2019年手机中文字幕| 亚洲AV午夜精品| 在线视频一区二区三| 真实国产乱子伦对白在线| 久久影音资源网| 亚洲一区二区中文字幕在线观看| 国产欧美不卡| 少妇高潮大叫好爽喷水| 亚洲欧洲av| 147欧美人体大胆444| 先锋欧美三级| 久久久久国产一区二区三区| 69xxxx欧美| 日韩毛片在线观看| av在线资源观看| 日本精品视频一区二区| 国产一级视频在线观看| 亚洲欧洲日韩av| 中文字幕第4页| 成人污污视频在线观看| caoporm在线视频| 久久久久网站| 91专区在线观看| 午夜日韩在线| 久久久国产精华液999999| 伊人久久大香线蕉| 国产精品免费视频一区二区| 91视频成人| 国产精品久久久久久久久粉嫩av| av中文字幕电影在线看| 久久久av免费| 欧美边添边摸边做边爱免费| 亚洲欧美综合图区| 五月婷婷激情在线| 欧美不卡视频一区| 国产成a人亚洲精v品无码| 欧美日韩美少妇| 精品国产青草久久久久96| 欧美性开放视频| 可以免费在线观看的av| 精品动漫一区二区| 久久久国产精华液| 一区二区久久久| 91视频综合网| 一区二区三区欧美激情| 久久精品日韩无码| 国产精品久久久久婷婷| 任你操精品视频| 国产精品久久久久久一区二区三区 | 97免费视频在线| caoprom在线| 久久久伊人日本| 狠狠操一区二区三区| 久久久久成人精品| 97久久人人超碰caoprom| 欧美精品福利视频| 久草在线视频网站| 欧美激情视频播放| а√在线中文在线新版| 国内久久久精品| 九色porny自拍视频在线观看 | 97se亚洲国产综合自在线不卡| 人妻 日韩 欧美 综合 制服| 成人动漫一区二区| 91丝袜在线观看| 91在线观看一区二区| 精品人妻少妇嫩草av无码| 久久老女人爱爱| 五月天精品在线| 亚洲欧洲日韩在线| 久久精品久久精品久久| 黄色精品在线看| 成人a v视频| 欧美日韩视频在线观看一区二区三区 | 视频一区欧美精品| 自拍偷拍21p| 国产乱妇无码大片在线观看| 亚洲成年人在线观看| 91在线精品一区二区三区| 久久久久久成人网| 亚洲精品免费播放| 国产香蕉视频在线| 欧美在线视频不卡| 成 人 黄 色 片 在线播放| 亚洲国产成人在线视频| 国内精品一区视频| 久久av资源网站| 三妻四妾完整版在线观看电视剧| 国产成人精品一区二区三区| 国产精品久久久久久av公交车| 波多野结衣成人在线| 奇米狠狠一区二区三区| 免费看av软件| 在线视频精品| 亚洲欧美手机在线| www.欧美精品一二区| 久久久久久成人网| 亚洲成a人片在线观看中文| 中文字幕免费高清网站| 欧美一级免费大片| 久久精品蜜桃| 欧美激情亚洲自拍| 岛国精品在线| 精品国产一区二区三区麻豆小说 | 国产精品乱人伦| 国产一级视频在线观看| 欧美日韩免费不卡视频一区二区三区 | 亚洲一区二区三区免费观看| 在线精品一区| 天堂在线一区二区三区| www激情久久| 久久久久久激情| 在线观看av不卡| 成人乱码一区二区三区| 色yeye香蕉凹凸一区二区av| 欧美裸体视频| 成人精品一二区| 日韩国产一区| 国产一区视频免费观看| 成人一区二区三区中文字幕| 永久免费观看片现看| 狠狠色狠色综合曰曰| 免费av一级片| 久久av红桃一区二区小说| 国产精品亚洲成在人线| 欧美一区二区高清在线观看| 伊人久久大香线蕉av超碰演员| 国产一区二区在线观看免费视频| 2020国产精品| 欧美a∨亚洲欧美亚洲| 欧美成人一区二区| 国产成人在线视频免费观看| 国产精品入口免费视频一| 在线日韩一区| 欧美色图另类小说| 不卡欧美aaaaa| 天堂资源在线播放| 日韩精品专区在线| 中文字幕中文字幕在线中高清免费版| 国产精品亚洲片夜色在线| 精品久久影视| 成年人网站大全| 久久影院午夜论| 黄色片视频免费| 亚洲人成自拍网站| 欧美黑人一区| 欧美一级爱爱| 日韩国产精品大片| 娇妻被老王脔到高潮失禁视频| 色8久久人人97超碰香蕉987| 国产资源在线观看| 热re99久久精品国产66热| 婷婷综合成人| 青青青在线播放| 国产欧美一区二区三区在线老狼 | 免费视频最近日韩| 亚洲第一视频区| 欧美日韩精品电影| 嫩草在线视频| 亚洲自拍偷拍视频| 欧美午夜电影在线观看| 国产精品果冻传媒| 亚洲成精国产精品女| 四虎影院在线播放| 欧美一区二三区| 亚欧洲精品视频在线观看| 日本在线视频www| 国产日本亚洲高清| 91theporn国产在线观看| 欧美大肥婆大肥bbbbb| 国产精品久av福利在线观看| 波多野结衣家庭教师视频| 久久精品综合网| 亚洲一区二区三区高清视频| 欧美精品一二区| 国产在线播放精品| 男人天堂1024| 国产精品视频一二三区| 国产aⅴ爽av久久久久成人| 欧美激情网站在线观看| 奇米影视777在线欧美电影观看| av网址在线观看免费| 1000部国产精品成人观看| 午夜老司机福利| 欧美一区二粉嫩精品国产一线天| 成人在线视频免费观看| 污视频在线观看免费网站| 亚洲成人高清在线| 都市激情一区| 粉嫩高清一区二区三区精品视频| 久久免费国产| 在线看的片片片免费| 亚洲精品二三区| 九九久久国产| 日韩av高清在线看片| 中文字幕第一区综合| 超碰在线人人干| 国产精品白嫩美女在线观看| 黑人一区二区| 大胸美女被爆操| 精品福利二区三区| 国产激情欧美| 日本www在线视频| 亚洲欧洲在线观看av| 欧洲毛片在线| av在线不卡观看| 蜜桃一区二区三区在线| 丰满少妇乱子伦精品看片| 久久成人av网站| 欧洲激情综合|