精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

这里只有精品在线观看视频| 久久av喷吹av高潮av| 欧产日产国产69| 日本久久一二三四| 欧美一级黄色大片| 国产av天堂无码一区二区三区| 天天干天天色天天| 麻豆视频观看网址久久| 欧美成人小视频| 欧美色图亚洲激情| 伊人国产精品| 欧美性xxxx极品高清hd直播| 综合操久久久| 精品久久av| 国产成人免费在线观看| 国产精品第1页| 国产一级性生活| 91欧美在线| 国产丝袜精品第一页| 午夜不卡福利视频| 电影亚洲精品噜噜在线观看| 亚洲影院久久精品| 伊人久久大香线蕉成人综合网| 性xxxxbbbb| 国产高清久久久久| 国产精品老牛影院在线观看| 亚洲国产精一区二区三区性色| 久久神马影院| 亚洲欧美中文另类| 国产xxxxxxxxx| 年轻的保姆91精品| 欧美日韩不卡一区二区| 99色精品视频| 俺来也官网欧美久久精品| 中文字幕五月欧美| 视频一区二区在线| 黄色一级大片在线免费看国产一| 蜜桃av一区二区在线观看| 2023亚洲男人天堂| 好吊操这里只有精品| 牛夜精品久久久久久久99黑人| 中文字幕亚洲一区在线观看| 免费在线观看污| 国产一级成人av| 精品99999| 你懂的在线观看网站| 亚洲国产中文在线| 欧美一二三区在线观看| 三级av免费看| 国产日韩欧美中文在线| 91精品国产欧美一区二区| 亚洲36d大奶网| 亚洲国产伊人| 欧美理论电影在线| 999久久久精品视频| 亚洲欧洲日韩精品在线| 欧美精品乱码久久久久久 | 玖玖在线播放| 亚洲成av人**亚洲成av**| 日本黄色片一级片| 午夜伦理大片视频在线观看| 亚洲精品日韩一| 欧美在线观看视频免费| 国产丝袜精品丝袜| 高跟丝袜欧美一区| 国产xxxxx视频| 国产国产一区| 91精品国产入口在线| 精品久久久久久无码人妻| 国产精品网在线观看| 亚洲精品久久久久中文字幕欢迎你 | 国产一级片免费看| 亚洲精品国产日韩| 日本一欧美一欧美一亚洲视频| 日韩精品一区不卡| 激情综合色综合久久综合| 91成人在线看| 外国精品视频在线观看| 2020国产成人综合网| 日韩精品一区二区三区色偷偷 | 久久久精品高清| 一区二区三区自拍视频| 亚洲加勒比久久88色综合| 亚洲 小说 欧美 激情 另类| 日韩dvd碟片| 欧美成人在线影院| 少妇一级淫片免费放中国| 麻豆国产一区二区| 国产精品v欧美精品v日韩| 三级在线播放| 亚洲欧美日韩中文播放 | 欧美天堂视频| 91精品国产综合久久久蜜臀图片| av在线天堂网| 欧洲乱码伦视频免费| 久久中文字幕国产| 久久国产视频播放| 国模大尺度一区二区三区| 精品产品国产在线不卡| 日本最新在线视频| 午夜婷婷国产麻豆精品| www.超碰97.com| 日韩高清成人在线| 欧美大片va欧美在线播放| 国语对白永久免费| 国产久卡久卡久卡久卡视频精品| 久久青青草综合| 制服丝袜中文字幕在线| 在线观看一区不卡| 丝袜熟女一区二区三区| 91精品精品| 国产精品av在线| 熟妇高潮一区二区三区| 亚洲摸摸操操av| 欧美一级黄色影院| 欧美三级自拍| 欧美成人免费全部观看天天性色| 一级黄色av片| 99视频一区二区| 久久综合亚洲精品| 欧美爱爱视频| 一二美女精品欧洲| 国产日产精品一区二区三区| 福利91精品一区二区三区| 在线视频91| 快播电影网址老女人久久| 精品sm在线观看| 欧美黑人一级片| 加勒比av一区二区| 五月天丁香综合久久国产| 日韩脚交footjobhdboots| 日韩精品一区二区三区视频播放 | 亚洲三级网站| 国产精品视频免费一区二区三区| 天堂资源在线中文| 欧美在线不卡视频| 国产123在线| 日韩高清不卡一区二区| 日韩av一区二区三区在线| av中文字幕在线观看第一页| 日韩欧美国产精品| 精品欧美一区二区久久久久| 韩国精品免费视频| 人人妻人人澡人人爽精品欧美一区 | 亚洲在线观看免费| 国产探花一区二区三区| 综合精品久久| 国产成人免费观看| 大香伊人中文字幕精品| 亚洲电影免费观看高清完整版在线观看| √天堂中文官网8在线| 韩国v欧美v亚洲v日本v| 国产免费一区二区三区四在线播放| 精品国产美女a久久9999| 最好看的2019年中文视频| 曰批又黄又爽免费视频| 最近中文字幕一区二区三区| 亚洲无在线观看| 亚洲精品va| 国产精品视频一区二区三区经| 久草在线新免费首页资源站| 亚洲精品在线三区| www.中文字幕在线观看| 国产视频视频一区| 中文字幕第38页| 女生裸体视频一区二区三区| 成人激情av| 久久男人av资源站| 国产一区二区三区丝袜| 一级片免费观看视频| 一区二区三区中文字幕电影| 精品人妻一区二区免费| 亚洲欧美日韩视频二区| 亚洲精品乱码久久久久久蜜桃91 | 国产精品一区二区黑丝| 无码 制服 丝袜 国产 另类| 亚洲bt欧美bt精品777| 国产成人精品一区二区三区| a中文在线播放| 日韩色视频在线观看| 西西44rtwww国产精品| 国产精品视频九色porn| 手机看片国产精品| 国产精品资源| 亚洲制服中文| 牛牛视频精品一区二区不卡| 国产精品久久久久久久久久久新郎 | 熟妇人妻va精品中文字幕| 欧美1级片网站| 国产91社区| 国产精品麻豆成人av电影艾秋| 欧美多人乱p欧美4p久久| 毛片免费在线观看| 日韩欧美亚洲国产精品字幕久久久| 国产成人在线观看网站| 日韩一区欧美一区| 国产精品无码专区| 激情综合亚洲精品| 久久精品免费一区二区| 自拍欧美日韩| 日韩中文字幕一区二区| 成人免费在线电影网| 国产精品视频久久久久| 欧美一级鲁丝片| 久久香蕉国产线看观看av| 欧美套图亚洲一区| 日韩欧美国产麻豆| 91精品国产乱码久久久| 欧美性猛交xxxx黑人猛交| 国产a免费视频| 国产欧美日韩一区二区三区在线观看| 久久国产免费视频| 国内精品久久久久影院色| 亚洲色欲综合一区二区三区| 亚洲性图久久| 伊人网在线免费| 欧美电影免费| 欧美在线视频二区| 久久免费视频66| 97netav| 欧美成人福利| 国产精品国产亚洲伊人久久 | 国产区欧美区日韩区| 99re8精品视频在线观看| 国产91露脸中文字幕在线| 九色porny丨国产首页在线| 欧美日韩xxx| 好吊日视频在线观看| 一区二区三区四区视频| 视频在线不卡| 亚洲精品720p| 日批视频在线播放| 欧美精品一区二区在线播放| 99精品久久久久久中文字幕| 欧美日韩情趣电影| 亚洲视频在线免费播放| 欧美在线观看视频一区二区| 国产精品va无码一区二区三区| 午夜婷婷国产麻豆精品| 欧美三日本三级少妇99| 亚洲成人资源网| 久久视频免费在线观看| 婷婷中文字幕综合| 日本午夜小视频| 午夜精品福利在线| 日韩精品无码一区二区| 图片区小说区国产精品视频| 四虎永久在线精品| 欧美色另类天堂2015| 天堂中文字幕在线观看| 欧美午夜电影在线| 国产成人一级片| 欧美亚洲尤物久久| 亚洲综合免费视频| 日韩一级黄色片| 成人毛片视频免费看| 亚洲精品97久久| 国产二区视频在线观看| 色噜噜狠狠狠综合曰曰曰88av | 日韩欧美一区免费| 欧美aaa在线观看| 欧美天堂亚洲电影院在线观看| 男人添女人下部视频免费| 黑丝一区二区三区| 日韩av黄色网址| 免费高清成人在线| 国产高清999| www.欧美日韩| 午夜在线观看一区| 亚洲欧美日韩中文播放| 国产网址在线观看| 欧美亚洲综合在线| 国产黄色美女视频| 精品视频久久久久久| 97人人在线| 欧美激情videos| 免费看av不卡| 91欧美激情另类亚洲| 极品尤物一区| 亚洲日本精品| 99香蕉国产精品偷在线观看| 色片在线免费观看| 东方欧美亚洲色图在线| 美女爆乳18禁www久久久久久| 一区精品在线播放| 亚洲精品77777| 在线播放/欧美激情| 午夜视频免费在线| 久久久国产视频| 亚洲黄色中文字幕| 91沈先生作品| 国产精品嫩草影院在线看| 日韩精品一区二区三区电影| 翔田千里一区二区| 香蕉网在线视频| 久久久夜色精品亚洲| 青青青在线视频| 欧美日韩国产综合草草| 亚洲aaa在线观看| 美女啪啪无遮挡免费久久网站| 亚洲涩涩在线| 国产成人免费观看| 国产精品x453.com| 密臀av一区二区三区| 粉嫩欧美一区二区三区高清影视| 黄色片在线观看免费| 午夜精品久久一牛影视| 国产免费不卡av| 在线精品国产欧美| 涩涩涩在线视频| www.久久久| 中出一区二区| 久久久久国产一区| 久久婷婷一区二区三区| 国产精品成人av久久| 3d动漫精品啪啪1区2区免费| 国产在线中文字幕| 55夜色66夜色国产精品视频 | 精品国产免费人成在线观看| 成人短视频在线| 国产精品老牛影院在线观看| 日韩影视在线观看| 精品久久久久久久久久中文字幕| 国产一区视频导航| 成人黄色短视频| 在线观看av不卡| 狠狠狠综合7777久夜色撩人| 91精品91久久久久久| 大香伊人久久精品一区二区| 久久久久久久久久久久久国产| 久久国产精品第一页| 极品蜜桃臀肥臀-x88av| 在线亚洲免费视频| 牛牛澡牛牛爽一区二区| 538国产精品一区二区免费视频 | 亚洲精品一区国产精品| 老色鬼久久亚洲一区二区| 亚洲人人夜夜澡人人爽| 精品久久久中文| 外国精品视频在线观看 | 亚洲欧美日韩国产综合在线| 亚洲性在线观看| 精品国产一区二区在线| 日韩成人综合网| 91制片厂免费观看| 狠狠色综合日日| 农村妇女精品一区二区| 欧美一区二区大片| 欧美野外wwwxxx| 粉嫩高清一区二区三区精品视频| 欧美激情视频一区二区三区免费| 少妇精品无码一区二区| 亚洲成人精品一区二区| 无码精品在线观看| 热久久视久久精品18亚洲精品| 西瓜成人精品人成网站| 亚洲成熟丰满熟妇高潮xxxxx| 国产清纯白嫩初高生在线观看91| 中文字幕+乱码+中文| 久久精品亚洲精品| 国产suv精品一区| 黄色a级片免费| 国产精品久久久久久久久快鸭| 91成人国产综合久久精品| 欧美精品免费看| 国产美女撒尿一区二区| 久久久噜噜噜www成人网| 久久精品亚洲乱码伦伦中文| 亚洲视频中文字幕在线观看| 欧美日韩国产成人高清视频| 日本午夜精品| 午夜剧场高清版免费观看| 亚洲精品成人天堂一二三| 殴美一级特黄aaaaaa| 国产精品精品视频一区二区三区| 亚洲欧美在线专区| 精品无码人妻少妇久久久久久| 日韩欧美在线第一页| 乱人伦中文视频在线| 国产精品一区二区三区在线 | 国产精品欧美亚洲777777| 一区二区三区四区在线观看国产日韩 | av在线一区二区三区| 中国女人一级一次看片| 欧美老女人性视频| 妖精视频一区二区三区| 亚洲精品mv在线观看| 欧美日韩性视频在线| 成人影欧美片| 欧美日韩成人一区二区三区| 久久精品国产亚洲高清剧情介绍| 久久精品性爱视频| 日韩在线资源网| 秋霞在线一区| 三日本三级少妇三级99| 日韩欧美精品中文字幕| 午夜影院免费在线| 亚洲国产午夜伦理片大全在线观看网站| 国产成a人亚洲| 影音先锋黄色网址|