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

探索 MySQL Binlog 的奧秘與應用

數據庫 MySQL
MySQL Binlog(二進制日志)作為 MySQL 數據庫中至關重要的組成部分,蘊含著眾多奧秘且具備豐富多樣的應用場景。

在 MySQL 的廣袤世界中,有一個至關重要的存在,它宛如數據庫運行軌跡的忠實記錄者,默默見證著每一次數據的變更與操作,它就是 binlog。Binlog 如同一個神秘而強大的寶庫,承載著數據庫操作的關鍵信息,為數據的恢復、復制以及系統的穩定性提供著堅實的支撐。當我們深入探索 MySQL 的奧秘時,binlog 無疑是其中閃耀著獨特光芒的關鍵一環。

1. bin log是什么?作用是什么呢?

bin log實際上是一個物理日志,當我們對某個數據頁進行修改操作時我們就會將這個操作寫到bin log中,當我們數據庫需要進行主備、主從復制等操作時,都可以基于bin log保證數據一致性。

2. bin log緩沖區

bin log緩沖區和我們的redo log和undo log緩沖區有所不同,redo log和undo log緩存都在存儲引擎的共享緩沖區緩沖區buffer pool中,而bin log則是為每個工作線程獨立分配一個內存作為bin log緩沖區:

bin log之所以是在每個線程中,是為保證不同存儲引擎的兼容性,bin log是innodb獨有的,如果將bin log放到共享緩沖區時很可能導致兼容性問題,將bin log緩沖區設置為每個線程獨享也保證了事務并發的安全性。

3. bin.log對應的三種記錄格式

(1) row:這種格式主要用于保證數據實時性的,例如我們執行下面這段SQL

update table set time=now() where id=1;

如果我們將其存到bin log之后很長一段時間才提交事務,那么時間就會有所延遲,所以MySQL為了保證數據實時性,就會將寫入bin log中的SQL用row格式,如下圖所示,可以看到row格式的SQL語句時間是當前時間的具體值,并且where條件寫死了當前條件列,確保數據實時一致性:

當然這樣做的缺點也很明顯,如果涉及大批量操作,那么針對每條數據對應的都會生成對應的row語句,那么對于內存的占用就很高,進行恢復和同步時的IO和SQL執行時間也是非常不友好的。

(2) stament:這種同步策略即執行的SQL是什么,對應傳輸過去的時對應的語句就是什么樣的,這就會導致我們上文所說的一致性問題:

(3) mixed:這種格式就是為了上述兩種方案的混合體,如果操作可能出現數據不一致問題則用row格式,反之使用stament格式。

4. bin log文件日志格式

我們可以通過下面這條SQL語句看到我們本地的bin log文件:

show binary logs;

輸出結果如下所示,可以看到bin log的格式基本都是mysql-bin.0000xxx:

mysql-bin.001606 440052 No
mysql-bin.001607 111520 No

5. bin log是如何完成寫入

當我們開始事務時,將修改寫入bin log cache中,一旦事務提交,就會將bin log通過write寫入到文件系統緩存的page cache中,然后根據我們配置的刷盤參數將cache內容調用操作系統內核方法fsync將結果寫入到bin log 物理文件中:

而調用系統函數fsync的實際是根據MySQL系統參數決定的,這個系統變量查詢SQL如下:

SHOW VARIABLES LIKE 'sync_binlog';

而sync_binlog值分別三種:

  • 當配置為了0時,每次事務提交都只會write,fsync調用時機是由系統決定的。
  • 當配置設置為1時,每次事務提交都會調用fsync。
  • 當配置為N,代表提交了N個事務之后就會將page cache中的數據通過fsync進行刷盤。

6. bin log和redo log的區別

這個問題我們可以從以下幾個場景來表述一下:

  • 從使用場景來說:bin log常用于數據災備或數據同步到其他異構程序中的場景。redo log常用于故障恢復保證數據持久性。
  • 從數據內容來說:redo log存儲的物理日志,即修改的數據內容,對應的redo block結構體針對各種偏移量和修改涉及的頁都有及其復雜的涉及,這里就不多做贅述。 而bin log則是記錄可以是statment語句也可以是原生修改的row,具體可以通過查看binlog_format知曉。
  • 生成范圍:bin log是MySQL server生成的事務日志,任何存儲引擎都可以使用redo log只有innodb這個存儲引擎支持。

7. (實踐)基于flink cdc同步數據

接下來我們就基于spring boot演示一下如何基于flink cdc訂閱bin.log完成db庫中的tb_1和tb_2的數據訂閱和同步:

之所以筆者使用flink cdc而不是canel大體有以下幾個原因:

  • flink cdc支持全量和增量同步以及斷點續傳等功能,尤其是斷點續傳這一點對于需要保證異構數據庫的數據一致性是非常好的。
  • 性能表現更出色,按照阿里云的說法:

我們將全增量一體化框架與 Debezium 1.6 版本做 簡單的 TPC-DS 讀取測試對比,customer 單表數據量 6500 萬,在 Flink CDC 用 8 個并發的情況下,吞吐提升了 6.8 倍,耗時僅 13 分鐘,得益于并發讀取的支持,如果用戶需要更快的讀取速度,用戶可以增加并發實現。

話不說我們給出基礎的集成步驟,首先是引入flink cdc和MySQL的依賴,這里筆者為了文章的簡練只給出的flink cdc相關的pom依賴:

 <properties>
        <flink.version>1.13.6</flink.version>
    </properties>


<dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-clients_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-java</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.flink</groupId>
            <artifactId>flink-streaming-java_2.12</artifactId>
            <version>${flink.version}</version>
        </dependency>
        <!--mysql -cdc-->
        <dependency>
            <groupId>com.ververica</groupId>
            <artifactId>flink-connector-mysql-cdc</artifactId>
            <version>2.0.0</version>
        </dependency>

然后我們在yml或者properties文件中給出MySQL配置即可,然后我們聲明一個CdcInfo記錄從bin.log中同步的數據:

@Data
publicclass CdcInfo {
    /**
     * 變更前數據
     */
    private JSONObject beforeData;
    /**
     * 變更后數據
     */
    private JSONObject afterData;

    private String operation;
    /**
     * binlog 文件名
     */
    private String binLogName;
    /**
     * binlog當前讀取點位
     */
    private Integer filePos;
    /**
     * 數據庫名
     */
    private String dbName;
    /**
     * 表名
     */
    private String tbName;
    /**
     * 變更時間
     */
    private Long changeTime;

}

然后我們編寫一個關于bin.log通知事件的監聽,針對flink cdc配置筆者都基于CommandLineRunner 這個拓展點完成配置,這里面涉及眾多的flink cdc配置參數,可以看到筆者的程序同步模式配置的是initial即啟動后會進行全量同步再進行增量同步,同時通過表達式db.tb_[1-2]+指明僅僅處理tb_1和tb_2表的數據更新變化。

@Component
publicclass MysqlCdcEventListener implements CommandLineRunner {

    //數據接收器用于應用架構更改和將更改數據寫入外部系統
    privatefinal CdcSink cdcSink;

    public MysqlCdcEventListener(CdcSink cdcSink) {
        this.cdcSink = cdcSink;
    }


    @Override
    public void run(String... args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        //設置并行度
        env.setParallelism(Runtime.getRuntime().availableProcessors());


        DebeziumSourceFunction<CdcInfo> debeziumSource = buildDebeziumSource();


        DataStream<CdcInfo> streamSource = env
                .addSource(debeziumSource, "mysql-source")
                .setParallelism(1);
        //將流數據交給
        streamSource.addSink(cdcSink);
        env.execute("mysql-stream-cdc");
    }


    /**
     * 構造變更數據源
     */
    private DebeziumSourceFunction<CdcInfo> buildDebeziumSource() {

        Properties debeziumProperties = new Properties();
        //設置快照為無鎖
        debeziumProperties.put("snapshot.locking.mode", "none");

        return MySqlSource.<CdcInfo>builder()
                .hostname("xxxx")
                .port(3306)
                .databaseList("db")
                //監聽db庫中的[1-2]表
                .tableList("db.tb_[1-2]+")
                .username("xxxx")
                .password("xxxx")
                //設置為 initial:在第一次啟動時對受監視的數據庫表執行初始快照,并繼續讀取最新的 binlog
                .startupOptions(StartupOptions.initial())
                //設置序列化配置
                .deserializer(new MysqlDeserialization())
                .serverTimeZone("GMT+8")
                .debeziumProperties(debeziumProperties)
                .build();
    }


}

上文代碼示例中給出一個涉及反序列化生產CdcInfo的操作,筆者指明了MysqlDeserialization 這里也給出對應的源碼示例:

public class MysqlDeserialization implements DebeziumDeserializationSchema<CdcInfo> {

    publicstaticfinal String TS_MS = "ts_ms";
    publicstaticfinal String BIN_FILE = "file";
    publicstaticfinal String POS = "pos";
    publicstaticfinal String CREATE = "CREATE";
    publicstaticfinal String BEFORE = "before";
    publicstaticfinal String AFTER = "after";
    publicstaticfinal String SOURCE = "source";
    publicstaticfinal String UPDATE = "UPDATE";


    @Override
    public void deserialize(SourceRecord sourceRecord, Collector<CdcInfo> collector) {
        //獲取bin.log訂閱到的信息
        String topic = sourceRecord.topic();
        String[] fields = topic.split("\\.");
        String database = fields[1];
        String tableName = fields[2];
        Struct struct = (Struct) sourceRecord.value();
        final Struct source = struct.getStruct(SOURCE);
        CdcInfo tbCdcInfo = new CdcInfo();
        //獲取前后變化數據
        tbCdcInfo.setBeforeData(convert2JsonObj(struct, BEFORE));
        tbCdcInfo.setAfterData(convert2JsonObj(struct, AFTER));
        //5.獲取操作類型  CREATE UPDATE DELETE
        Envelope.Operation operation = Envelope.operationFor(sourceRecord);
        String type = operation.toString().toUpperCase();

        tbCdcInfo.setOperation(type);
        tbCdcInfo.setBinLogName(Optional.ofNullable(source.get(BIN_FILE)).map(Object::toString).orElse(""));
        tbCdcInfo.setFilePos(Optional.ofNullable(source.get(POS)).map(x -> Integer.parseInt(x.toString())).orElse(0));
        tbCdcInfo.setDbName(database);
        tbCdcInfo.setTbName(tableName);
        tbCdcInfo.setChangeTime(Optional.ofNullable(struct.get(TS_MS)).map(x -> Long.parseLong(x.toString())).orElseGet(System::currentTimeMillis));
        //7.輸出數據
        collector.collect(tbCdcInfo);
    }

    /**
     * 從原始數據獲取出變更之前或之后的數據
     */
    private JSONObject convert2JsonObj(Struct value, String fieldElement) {
        Struct element = value.getStruct(fieldElement);
        JSONObject jsonObject = new JSONObject();
        if (element != null) {
            Schema afterSchema = element.schema();
            List<Field> fieldList = afterSchema.fields();
            for (Field field : fieldList) {
                Object afterValue = element.get(field);
                jsonObject.put(field.name(), afterValue);
            }
        }
        return jsonObject;
    }


    @Override
    public TypeInformation<CdcInfo> getProducedType() {
        return TypeInformation.of(CdcInfo.class);
    }
}

此時我們啟動程序后針對數據表進行修改操作就會收到數據消息的訂閱了:

訂閱到的數據:CdcInfo(beforeData={"id":1,"name":"xiaoming"}, afterData={"id":1,"name":"xiaoming1"}, operation=UPDATE, binLogName=binlog.000156, filePos=1256, dbName=db, tbName=tb_2, changeTime=1734622269654)

小結

MySQL Binlog(二進制日志)作為 MySQL 數據庫中至關重要的組成部分,蘊含著眾多奧秘且具備豐富多樣的應用場景。

  • 從原理層面來看,Binlog 以二進制的形式記錄了數據庫中數據變更的相關事件,如 INSERT、UPDATE、DELETE 等操作。它采用順序追加的方式寫入,這種特性不僅保證了日志記錄的完整性和連續性,還為后續的恢復和復制提供了堅實基礎。不同的日志格式(STATEMENT、ROW、MIXED)各有優劣,開發人員和數據庫管理員可以根據實際需求進行靈活選擇,以平衡數據一致性、性能和存儲空間等多方面因素。
  • 在應用領域,Binlog 展現出了巨大的價值。在數據恢復場景中,基于全量備份結合 Binlog 可以實現精準的時間點恢復(PITR),確保在面對數據丟失或損壞時,能夠將數據庫還原到指定的歷史時刻,最大程度減少數據損失。
  • 在主從復制方面,主庫將 Binlog 發送給從庫,從庫通過重放這些日志來同步數據,從而實現數據的多副本存儲和讀寫分離,提升系統的可用性和性能。此外,Binlog 還在數據遷移、數據審計以及實時數據處理等領域發揮著重要作用。例如,通過解析 Binlog 可以獲取數據的實時變化,將這些變化推送至其他系統進行進一步處理,實現系統間的數據同步和業務邏輯的聯動。

然而,在使用 Binlog 的過程中,也需要關注一些問題。例如,Binlog 的記錄會占用一定的磁盤空間,需要合理規劃存儲空間和清理策略;同時,在進行主從復制時,Binlog 的傳輸和重放可能會受到網絡延遲、服務器性能等因素的影響,導致數據同步延遲或出現錯誤,這就需要建立有效的監控和故障處理機制。

總之,深入理解 MySQL Binlog 的奧秘,并合理運用其各項特性,對于保障數據庫的高可用性、數據一致性以及實現多樣化的業務需求都具有重要意義。無論是數據庫管理員進行日常運維管理,還是開發人員設計架構和開發應用程序,都應該充分認識到 Binlog 的價值,并謹慎處理與之相關的各種問題。

責任編輯:趙寧寧 來源: 寫代碼的SharkChili
相關推薦

2025-03-05 09:30:00

MySQL流式查詢數據庫

2025-02-10 10:59:52

2024-12-17 16:44:22

Spring開發

2023-09-28 09:03:56

開源搜索分析引擎

2024-09-09 16:30:08

Python編程

2011-09-16 14:34:20

2023-09-21 16:03:47

大數據

2024-02-26 07:39:16

2024-02-22 10:36:13

SELECT 語句PostgreSQL數據查詢

2013-07-30 12:29:19

Google App Google技術Engine

2024-06-04 15:56:48

Task?.NET異步編程

2024-04-01 11:46:34

BpythonPython開發

2011-04-15 17:43:15

Google App Google

2021-08-09 17:13:39

數值運算

2023-10-10 23:06:46

RedisMySQL

2024-09-29 16:04:14

2024-03-07 08:22:51

Java機制元數據

2009-10-21 17:36:36

VB基礎教程

2010-05-18 11:28:57

MySQL binlo

2019-01-08 16:01:41

客流數字化數據
點贊
收藏

51CTO技術棧公眾號

五月天婷婷丁香网| 久久久久免费精品| 亚洲av综合色区无码一区爱av| 国产精品九九| 亚洲欧美中文日韩v在线观看| 91最新在线观看| 2024短剧网剧在线观看| 成人黄色大片在线观看 | 久草中文综合在线| 欧美激情性做爰免费视频| 国产艳俗歌舞表演hd| 日韩护士脚交太爽了| 亚洲综合久久av| 日韩亚洲欧美精品| 欧美综合视频在线| 麻豆成人91精品二区三区| 久久久久久国产精品三级玉女聊斋 | 国产美女一区二区三区| 欧美一级大胆视频| 五月综合色婷婷| 天天操综合520| 日韩欧美国产小视频| 久热免费在线观看| jizz一区二区三区| 最新日韩av在线| 欧美高清性xxxxhd| 欧美视频一二区| 国产一区欧美一区| 国产精品极品美女粉嫩高清在线| 国产精品成人免费一区二区视频| 日韩在线观看一区 | 男人的天堂在线视频免费观看 | 久久国产手机看片| 国产成人毛毛毛片| 精精国产xxxx视频在线野外| 欧美经典一区二区| 久久riav| 亚洲国产精品久久人人爱潘金莲| 蜜桃视频一区二区三区在线观看| 午夜精品一区二区三区av| 少妇aaaaa| 日韩极品一区| 国产亚洲欧美另类中文| 国产在线观看无码免费视频| 2020最新国产精品| 欧美一区二区三区色| 九九热免费在线观看| 91伊人久久| 在线免费精品视频| jizzjizzxxxx| 中国色在线日|韩| 亚洲成人1区2区| 成人精品视频在线播放| 欧美xxx黑人xxx水蜜桃| 亚洲色图19p| 一区中文字幕在线观看| 色三级在线观看| 中文字幕一区二区三区四区不卡| 日韩国产精品一区二区| 免费播放片a高清在线观看| 91免费国产在线观看| 久久亚裔精品欧美| 国产中文字幕在线视频| 久久久国产精华| 亚洲黄色成人久久久| 国产精品玖玖玖| 激情婷婷亚洲| 8050国产精品久久久久久| 国产成人免费观看视频 | 欧美日韩看看2015永久免费 | 欧美三级中文字幕| 香蕉视频999| 日韩欧美激情电影| 精品国产乱码久久久久久蜜臀 | 国产欧美一区二区三区视频在线观看| 国产真实乱偷精品视频免| 91亚洲精品久久久久久久久久久久| 97人妻精品一区二区三区视频| 精品夜夜嗨av一区二区三区| 亚洲mm色国产网站| 蜜臀久久精品久久久久| 26uuu色噜噜精品一区| 日韩精品电影网站| 国产丝袜在线| 午夜精品久久久久久久99樱桃| 亚洲国产精品久久久久婷蜜芽| 电影亚洲精品噜噜在线观看| 这里是久久伊人| 日本人添下边视频免费| 精品国产精品国产偷麻豆| 久久久久999| 日本少妇激情舌吻| 秋霞午夜av一区二区三区| 91情侣偷在线精品国产| 天天干视频在线| 中文av字幕一区| 国产乱人伦精品一区二区三区| 性感女国产在线| 在线播放/欧美激情| 日本性生活一级片| av亚洲在线观看| 久久99热精品这里久久精品| 免费av网站在线| 国产在线播放一区二区三区| 久久艳妇乳肉豪妇荡乳av| 黄网站视频在线观看| 欧美日韩国产综合新一区 | 粉嫩在线一区二区三区视频| 欧美午夜视频在线| 污片在线免费观看| 欧美亚洲自拍偷拍| 国产黑丝一区二区| 亚洲老妇激情| 日本精品视频在线观看| www日本高清| 亚洲国产精品99久久久久久久久 | 精品免费99久久| 影音先锋制服丝袜| 99精品国产在热久久| 成人国产在线视频| 激情小视频在线| 亚洲二区在线观看| 亚洲欧美天堂在线| 精品国产91| 2021国产精品视频| 懂色av蜜臀av粉嫩av分享吧| 亚洲欧美另类小说| 人人干人人干人人| 国产欧美一区二区精品久久久| 久久久久久高潮国产精品视| 国产91视频在线| 亚洲欧洲韩国日本视频| 无码少妇一区二区三区芒果| 人人香蕉久久| 久久久久久亚洲精品中文字幕| 国产乱码精品一区二三区蜜臂| 国产视频在线观看一区二区三区 | 97人人在线视频| 日韩免费观看高清完整版| 免费看一级黄色| 麻豆精品一区二区| 亚洲精品8mav| 电影一区二区| 亚洲午夜激情免费视频| 成人毛片在线播放| 久久在线免费观看| 精品一区二区中文字幕| 亚洲精品蜜桃乱晃| 浅井舞香一区二区| 欧洲伦理片一区 二区 三区| 欧美日韩国产在线| 中国美女乱淫免费看视频| 亚洲黄色大片| 国产精品午夜av在线| 182在线播放| 精品国产乱码久久久久久夜甘婷婷 | 中文字幕av不卡在线| 日韩欧美一区免费| 成人a在线视频| a级影片在线| 精品人伦一区二区色婷婷| 久久高清无码视频| 99精品黄色片免费大全| 妺妺窝人体色www在线小说| 色婷婷精品视频| 国产91色在线|免| 91在线品视觉盛宴免费| 欧美电影在线免费观看| wwwav国产| 成人美女在线观看| 国内外成人免费激情视频| 精品久久久久久久| 成人观看高清在线观看免费| 欧美大片黄色| 亚洲欧美另类国产| 亚洲最大成人av| 亚洲在线中文字幕| 欧美图片一区二区| 久久99久久久欧美国产| 女人床在线观看| 思热99re视热频这里只精品| 国产精品高潮在线| 伊人222成人综合网| 亚洲精品乱码久久久久久按摩观| 国产精品久久久久久人| 中文字幕日韩欧美一区二区三区| 久久久国产精品久久久| 亚洲一区二区三区四区五区午夜| 天堂一区二区三区| 一区二区三区四区视频免费观看| 97在线精品国自产拍中文| av在线1区2区| 精品国产99国产精品| 日韩免费av网站| 一区二区在线电影| 午夜时刻免费入口| 国产99久久久久| 在线观看国产中文字幕| 亚洲二区在线| 在线观看一区二区三区三州| 国产精品传媒| 91精品视频在线| 色老太综合网| 韩剧1988在线观看免费完整版| 国产精品影院在线| 亚洲成人精品av| 91在线精品入口| 欧美性少妇18aaaa视频| 精品一区在线观看视频| 国产人久久人人人人爽| 国产十八熟妇av成人一区| 久久国产精品色| 亚洲精品中文字幕无码蜜桃| 午夜久久黄色| 杨幂一区欧美专区| 精品一区毛片| 精品伦精品一区二区三区视频| 国产高清亚洲| 国产成人综合精品在线| rebdb初裸写真在线观看| 久久人人爽亚洲精品天堂| 国产日韩精品在线看| 亚洲福利在线观看| 亚洲AV无码成人片在线观看 | 亚洲精品国产suv一区| 欧美色男人天堂| 在线视频一区二区三区四区| 亚洲国产日韩a在线播放性色| 免费在线观看a级片| 国产精品久久久久久一区二区三区| 可以直接看的无码av| 不卡的看片网站| 极品白嫩少妇无套内谢| 国产揄拍国内精品对白| 亚洲性图一区二区| 奇米一区二区三区| 欧美精品第三页| 久久伊人亚洲| 激情内射人妻1区2区3区| 麻豆精品网站| 欧美视频在线播放一区| 国产免费区一区二区三视频免费| 国产精品成人va在线观看| a一区二区三区| 日本成人免费在线| 成人性生活av| 国产99久久精品一区二区永久免费| 久草在线中文最新视频| 国内精品400部情侣激情| 丁香花电影在线观看完整版| 欧美日韩高清在线观看| 波多一区二区| 2019中文字幕全在线观看| 电影在线观看一区| 欧美一级片在线播放| 天堂av中文在线观看| 欧美综合一区第一页| 欧美激情喷水| 国产精品久久久久久久久男| 成人亚洲免费| 91视频-88av| 99热这里只有精品首页 | 人人爽人人爽av| 国产精品资源网站| 天堂www中文在线资源| caoporm超碰国产精品| 在线免费观看成年人视频| 久久精品无码一区二区三区| 国产三级在线观看完整版| 国产精品超碰97尤物18| 亚洲国产美女视频| 亚洲一区二区欧美| 51国产偷自视频区视频| 欧美视频在线一区| 国产片在线播放| 亚洲黄色www| 国产51人人成人人人人爽色哟哟| 日韩中文综合网| 狂野欧美激情性xxxx欧美| 98精品国产自产在线观看| 亚洲播播91| 成人网页在线免费观看| 精品久久ai电影| 亚洲高清视频在线观看| 国产精品扒开腿做爽爽爽软件| 久久久亚洲精品无码| 蜜桃一区二区三区在线观看| 国产乱国产乱老熟300部视频| 91免费版在线| 久久高清内射无套| 欧美性精品220| 国产视频第二页| 亚洲女人被黑人巨大进入| 免费av在线网站| 欧美亚洲日本黄色| 欧美大片91| 日韩成人av电影在线| 亚洲一级淫片| 日本免费一级视频| 国产久卡久卡久卡久卡视频精品| 蜜桃av免费看| 亚洲香肠在线观看| 在线亚洲欧美日韩| 日韩va亚洲va欧洲va国产| 黄色网在线免费看| 国产成人激情小视频| 99精品国产高清一区二区麻豆| 亚洲欧美日韩综合一区| 国产一区二区你懂的| 四虎国产精品永久免费观看视频| 久久精品综合网| 日本午夜小视频| 91精品国产丝袜白色高跟鞋| 国产免费av高清在线| 久久青草精品视频免费观看| 国产精品高清一区二区 | 欧美精品综合| 中文字幕av专区| 久久免费美女视频| 国产特黄大片aaaa毛片| 精品少妇一区二区三区在线播放| 91视频在线观看| 国产成人免费av| 亚洲动漫精品| 亚洲熟妇无码一区二区三区导航| 国产精品资源站在线| 搜索黄色一级片| 欧美精品日韩综合在线| www.亚洲.com| 国产91在线播放精品91| 日韩深夜影院| 欧美黑人经典片免费观看| 成人一区二区三区视频在线观看| www.毛片com| 91精品国产91久久综合桃花| 日韩美女网站| 国产又爽又黄的激情精品视频| 禁果av一区二区三区| 国产a级片免费观看| 久久一区二区视频| 在线观看日韩中文字幕| 日韩国产一区三区| 老色鬼在线视频| 蜜桃精品久久久久久久免费影院| 91久久亚洲| 人妻在线日韩免费视频| 精品久久久久久久久久久久| 特黄aaaaaaaaa真人毛片| 久久人人看视频| 加勒比色综合久久久久久久久| 精品视频在线观看一区| 97精品视频在线观看自产线路二| 精品91久久久| 日韩精品免费视频| 欧美性suv| 亚洲v国产v在线观看| 久久aⅴ国产欧美74aaa| 男人的天堂久久久| 日韩一级大片在线| 黄色在线观看视频网站| 久久免费99精品久久久久久| 日韩和欧美的一区| 妖精视频在线观看免费| 欧美日韩国产bt| 中文字幕有码在线视频| 国产精品久久久久久久久婷婷| 国产精品美女久久久浪潮软件| 性久久久久久久久久| 色嗨嗨av一区二区三区| 日本精品在线| 高清不卡日本v二区在线| 日韩在线网址| 欧美一级精品大片| 少妇一级淫免费播放| 中文在线观看免费| 中文字幕欧美三区| 最新欧美日韩亚洲| 调教一区二区| 欧美性猛交xxx| 涩多多在线观看| 婷婷精品在线观看| 欧美www在线| 羞羞色院91蜜桃| 国产98色在线|日韩| 色播亚洲婷婷| 国产污视频在线| 久久蜜桃av一区精品变态类天堂 | 欧美精品免费看| 国产精品17p| 国产精品入口免费软件| 亚洲美女视频一区| 神马久久久久| 亚洲精品在线免费观看视频| 超碰在线公开| 神马欧美一区二区| 成人美女在线观看| 亚洲网站在线免费观看| 66m—66摸成人免费视频| 日韩一区电影| 免费看黄色aaaaaa 片|