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

我是如何一步一步監控公司MySQL的每一個操作?

數據庫 MySQL
作為一個程序員,閑下來還是喜歡學習鉆研一些新奇的技術,canal就成了很好的研究對象,一不小心就監控了公司MySQL的一舉一動的。

作為一個程序員,閑下來還是喜歡學習鉆研一些新奇的技術,canal就成了很好的研究對象,一不小心就監控了公司MySQL的一舉一動的

一、canal是個啥?

canal是阿里開發的一款基于數據庫增量日志解析,提供增量數據訂閱與消費的框架,整個框架純JAVA開發,目前僅支持Mysql和MariaDB(和mysql類似)。

那什么是數據庫增量日志?

MySQL的日志種類是比較多的,主要包含:錯誤日志、查詢日志、慢查詢日志、事務日志、二進制日志。而MySQL數據庫所發生的數據變更(DML(data manipulation language)數據操縱語言,也就是我們熟悉的增刪改),都會以二進制日志(binary log)形式存儲。

二、canal原理

在介紹canal原理之前,我們先來回顧一下MySQL主從同步的原理,這或許會讓你更好的理解canal的工作機制。

1、MySQL主從同步原理:

MySQL主從同步也叫讀寫分離,可以提升數據庫的負載和容錯能力,實現數據庫的高可用

先來分析一張MySQL主從同步原理圖:

以上圖片源自網絡,如有侵權聯系刪除

master節點操作過程:

當master節點數據發生更改后(delete、update、insert,還是創建函數、存儲過程等操作),向binary log中寫入記錄日志,這些記錄又叫做二進制日志事件(binary log events)。 

  1. show binlog events  

這些事件會按照順序寫入bin log中。當slave節點啟動連接到master節點的時候,master節點會為slave節點開啟binlog dump線程(負責傳輸binlog數據)。

一旦master節點的bin log發生變化時,bin logdump線程會通知slave節點有可以傳輸的binlog,并將相應的bin log內容發送給slave節點。

slave節點操作過程:

slave節點上會創建兩個線程:一個I/O線程,一個SQL線程。I/O線程連接到master節點,master節點上的binlog dump 線程會將binlog的內容發送給該I\O線程。

該I/O線程接收到binlog內容后,再將內容寫入到本地的relay log。而sql線程讀取到I/O線程寫入的ralay log,將relay log中的內容寫入slave數據庫。

2、canal原理

懂了上邊MySQL的主從同步原理,canal的工作機制就很好理解了。

其實canal是模擬了MySQL數據庫中,slave節點與master節點的交互協議,偽裝自己為MySQL slave節點,向MySQL master節點發送dump協議,MySQL master節點收到dump請求,開始推送binary log給slave節點(也就是canal)。

以上圖片源自網絡,如有侵權聯系刪除

光說不練假把式,開干!

三、canal實現“監控”MySQL

在寫代碼前我們先對MySQL進行一下改造,安裝MySQL就不再細說了,基本操作。

1、查看一下MySQL是否開啟了binary log功能 

  1. show binary logs  

如果沒有開啟是圖中的狀態,一般用戶是沒有這個命令權限的,不過我有,嘖嘖嘖!

如果沒有需要手動開啟,并且在my.cnf文件中配置binlog-format 為Row模式 

  1. log-bin=mysq-bin  
  2. binlog-format=Row 

log-bin是binlog文件存放位置

binlog-format 設置MySQL復制log-bin的方式

MySQL的三種復制方式:

基于SQL語句的復制(statement-based replication, SBR)

  •  優點:將修改數據的sql保存在binlog,不需要記錄每一條sql和數據變化,binlog體量會很小,IO開銷少,性能好
  •  缺點:會導致master-slave中的數據不一致

基于行的復制(row-based replication, RBR)

  •  優點:不記錄每條sql語句的上下文信息,僅需記錄哪條數據被修改了,修改成什么樣了
  •  缺點:binlog體積很大,尤其是在alter table屬性時,會產生大量binlog數據

混合模式復制(mixed-based replication, MBR)

  •  對應的,binlog的格式也有三種:STATEMENT,ROW,MIXED。

2、為canal 創建一個有權限操作MySQL的用戶 

  1. CREATE USER canal IDENTIFIED BY 'canal';    
  2. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';  
  3. -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;  
  4. FLUSH PRIVILEGES; 

3、安裝canal

下載地址:https://github.com/alibaba/canal/releases

下載后選擇版本例如:canal.deployer-xxx.tar.gz

4、配置canal

修改instance.properties文件,需要添加監聽數據庫和表的規則,canal可以全量監聽數據庫,也可以針對某個表進行監聽,比較靈活。 

  1. vim conf/example/instance.properties  
  2. #################################################  
  3. ## mysql serverId  
  4. canal.instance.mysql.slaveId = 2020  
  5. # position info 修改自己的數據庫(canal要監聽的數據庫 地址 )  
  6. canal.instance.master.address = 127.0.0.1:3306  
  7. canalcanal.instance.master.journal.name =   
  8. canal.instance.master.position =   
  9. canal.instance.master.timestamp =   
  10. #canal.instance.standby.address =   
  11. #canal.instance.standby.journal.name =  
  12. #canal.instance.standby.position =   
  13. #canal.instance.standby.timestamp =   
  14. # username/password 修改成自己 數據庫信息的賬號 (單獨開一個 準備階段創建的賬號)  
  15. canalcanal.instance.dbUsername = canal  
  16. canalcanal.instance.dbPassword = canal  
  17. canalcanal.instance.defaultDatabaseName =  
  18. canal.instance.connectionCharset = UTF-8  
  19. # table regex  表的監聽規則   
  20. canal.instance.filter.regex = blogs\.blog_info    
  21. canal.instance.filter.regex = .\*\\\\..\*  
  22. # table black regex  
  23. canal.instance.filter.black.regex =  

啟動canal 

  1. sh bin/startup.sh 

看一下server日志,確認一下canal是否正常啟動 

  1. vi logs/canal/canal.log 

顯示canal server is running now即為成功 

  1. 2020-01-08 15:25:33.361 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ##    start the canal server.  
  2. 2020-01-08 15:25:33.468 [main] INFO  com.alibaba.otter.canal.deployer.CanalController - ## start the canal server[192.168.12.245:11111]  
  3. 2020-01-08 15:25:34.061 [main] INFO  com.alibaba.otter.canal.deployer.CanalLauncher - ## the canal server is running now ...... 

5、編寫Java客戶端代碼,實現canal監聽

引入依賴包 

  1. <dependency>  
  2.   <groupId>com.alibaba.otter</groupId>  
  3.   <artifactId>canal.client</artifactId>  
  4.   <version>1.1.0</version>  
  5. </dependency> 

這里只是簡單實現 

  1. public class MainApp {  
  2.     public static void main(String... args) throws Exception {  
  3.         /**  
  4.          * 創建與  
  5.          */  
  6.         CanalConnector connector = CanalConnectors.newSingleConnector(new InetSocketAddress(AddressUtils.getHostIp(),  
  7.                 11111), "example", "", "");  
  8.         int batchSize = 1000 
  9.         int emptyCount = 0 
  10.         try {  
  11.             connector.connect();  
  12.             /** 
  13.               * 監控數據庫中所有表  
  14.              */  
  15.             connector.subscribe(".*\\..*");  
  16.             /**  
  17.              * 指定要監控的表,庫名.表名  
  18.              */  
  19.             //connector.subscribe("xin-master.jk_order");  
  20.             connector.rollback(); 
  21.             //120次心跳過后未檢測到,跳出  
  22.             int totalEmptyCount = 120 
  23.             while (emptyCount < totalEmptyCount) {  
  24.                 Message message = connector.getWithoutAck(batchSize); // 獲取指定數量的數據  
  25.                 long batchId = message.getId();  
  26.                 int size = message.getEntries().size();  
  27.                 if (batchId == -1 || size == 0) {  
  28.                     emptyCount++; 
  29.                      System.out.println("empty count : " + emptyCount);  
  30.                     try {  
  31.                         Thread.sleep(1000);  
  32.                     } catch (InterruptedException e) {  
  33.                     }  
  34.                 } else {  
  35.                     emptyCount = 0 
  36.                     // System.out.printf("message[batchId=%s,size=%s] \n", batchId, size);  
  37.                     printEntry(message.getEntries());  
  38.                 }  
  39.                 /**  
  40.                  *  提交確認  
  41.                  */  
  42.                 connector.ack(batchId);  
  43.                 /**  
  44.                  * 處理失敗, 回滾數據  
  45.                  */  
  46.                 connector.rollback(batchId);  
  47.             }  
  48.             System.out.println("empty too many times, exit");  
  49.         } finally {  
  50.             connector.disconnect();  
  51.             /**  
  52.              * 手動開啟事務回滾  
  53.              */  
  54.             //TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();  
  55.         }  
  56.     }  
  57.     private static void printEntry(List<CanalEntry.Entry> entrys) {  
  58.         for (CanalEntry.Entry entry : entrys) {  
  59.             if (entry.getEntryType() == CanalEntry.EntryType.TRANSACTIONBEGIN || entry.getEntryType() == CanalEntry  
  60.                     .EntryType  
  61.                     .TRANSACTIONEND) {  
  62.                 continue;  
  63.             }  
  64.             CanalEntry.RowChange rowChage = null 
  65.             try {  
  66.                 rowChage = CanalEntry.RowChange.parseFrom(entry.getStoreValue());  
  67.             } catch (Exception e) {  
  68.                 throw new RuntimeException("ERROR ## parser of eromanga-event has an error , data:" + entry.toString(),  
  69.                         e);  
  70.             }  
  71.             CanalEntry.EventType eventType = rowChage.getEventType();  
  72.             System.out.println(String.format("================> binlog[%s:%s] , name[%s,%s] , eventType : %s",  
  73.                     entry.getHeader().getLogfileName(), entry.getHeader().getLogfileOffset(),  
  74.                     entry.getHeader().getSchemaName(), entry.getHeader().getTableName(),  
  75.                     eventType));  
  76.             for (CanalEntry.RowData rowData : rowChage.getRowDatasList()) {  
  77.                 if (eventType == CanalEntry.EventType.DELETE) {  
  78.                     printColumn(rowData.getBeforeColumnsList());  
  79.                 } else if (eventType == CanalEntry.EventType.INSERT) {  
  80.                     printColumn(rowData.getAfterColumnsList());  
  81.                 } else {  
  82.                     System.out.println("-------> before");  
  83.                     printColumn(rowData.getBeforeColumnsList());  
  84.                     System.out.println("-------> after");  
  85.                     printColumn(rowData.getAfterColumnsList());  
  86.                 }  
  87.             }  
  88.         }  
  89.     } 
  90.  
  91.     private static void printColumn(List<CanalEntry.Column> columns) {  
  92.         for (CanalEntry.Column column : columns) { 
  93.              System.out.println(column.getName() + " : " + column.getValue() + "    update=" + column.getUpdated());  
  94.         }  
  95.     }  

代碼到這就編寫完成了,我們啟動服務看下是什么效果,由于并沒有操作數據庫,所以監聽的結果都是空的。

接下來我們在數據庫執行一條update語句試試 

  1. update jk_orderset order_no = '1111'  where id = 40 

控制臺檢測到了數據庫的修改,并生成binlog 日志文件mysql-bin.000009:3830

那么生成的binlog 文件該怎么用,如何解析成SQl語句呢? 

  1. <!-- mysql binlog解析 -->  
  2.         <dependency> 
  3.              <groupId>com.github.shyiko</groupId>  
  4.             <artifactId>mysql-binlog-connector-java</artifactId>  
  5.             <version>0.13.0</version>  
  6. </dependency> 

將剛才的binlog文件下載本地測試一下 

  1. public static void main(String[] args) throws IOException {  
  2.        String filePath = "C:\\ProgramData\\MySQL\\MySQL Server 5.7\\Data\\mysql-bin.000009:3830" 
  3.        File binlogFile = new File(filePath);  
  4.        EventDeserializer eventDeserializer = new EventDeserializer();  
  5.        eventDeserializer.setChecksumType(ChecksumType.CRC32);  
  6.        BinaryLogFileReader reader = new BinaryLogFileReader(binlogFile, eventDeserializer);  
  7.        try {  
  8.            for (Event event; (event = reader.readEvent()) != null; ) {  
  9.                System.out.println(event.toString());  
  10.            }  
  11.        } finally {  
  12.            reader.close();  
  13.        }  
  14.    } 

查看一下執行結果,發現數據庫最近的一次操作是加了一個idx_index索引 

  1. Event{header=EventHeaderV4{timestamp=1551325542000eventType=ANONYMOUS_GTIDserverId=1headerLength=19dataLength=46nextPosition=8455flags=0}, data=null
  2. Event{header=EventHeaderV4{timestamp=1551325542000eventType=QUERYserverId=1headerLength=19dataLength=190nextPosition=8664flags=0}, data=QueryEventData{threadId=25executionTime=0errorCode=0database='xin-master'sql='ALTER TABLE `jk_order` 
  3. DROP INDEX `idx_index` , 
  4. ADD INDEX `idx_index` (`user_id`, `service_id`, `real_price`) USING BTREE'}} 
  5. Event{header=EventHeaderV4{timestamp=1551438586000eventType=STOPserverId=1headerLength=19dataLength=4nextPosition=8687flags=0}, data=null

至此我們就已經實現了監控MySQL

四、canal應用場景

canal應用場景大致有以下:

  •  解決MySQL主從同步延遲的問題
  •  實現數據庫實時備份
  •  多級索引 (賣家和買家各自分庫索引)
  •  實現業務cache刷新
  •  價格變化等重要業務消息

重點分析一下canal是如何解決MySQL主從同步延遲的問題

生產環境下MySQL的主從同步模式(maser-slave)很常見,但對于跨機房部署的集群,會出現同步延時的情況。舉個栗子:

一條訂單狀態是未付款,master節點修改成已付款,可由于某些原因出現延遲數據未能及時同步到slave,這時用戶立即查看訂單狀態(查詢走slave)顯示還是未付款,哪個用戶看到這種情況不得慌啊。

為什么會出現主從同步延遲呢?

當主庫master的TPS并發較高時,master節點并發產生的修改操作,而slave節點的sql線程是單線程處理同步數據,延時自然而言就產生了。

不過造成主從同步的原因不止這些,由于主從服務器存在跨機器并且跨機房,除了網絡帶寬原因之外,網絡的穩定性以及機器之間的同步,都是主從同步應該考慮的主要原因。

總結

本文只是簡單實現canal監聽數據庫的功能,旨在給大家提供一種解決問題的思路,還是反復絮叨的那句話,解決問題的技術方法很對,具體如何應用還需結合具體業務。 

 

責任編輯:龐桂玉 來源: 數據庫開發
相關推薦

2020-02-20 19:34:24

JAVAMySQL框架

2018-03-07 15:24:41

PythonMySQL

2017-11-29 11:14:52

離線緩存URL協議緩存

2017-07-15 21:10:58

CTOCEO技術

2012-03-22 10:33:33

思杰XenDesktop

2021-03-17 07:07:21

系統程序員SDI

2022-09-30 15:37:19

Web網站服務器

2022-08-29 15:19:09

CSS煙花動畫

2009-07-06 19:29:37

云計算私有云服務器虛擬化

2021-08-31 07:11:48

MySQL億級流量

2018-03-20 15:40:15

開發者故事

2017-08-24 08:31:41

2013-03-18 16:09:27

JavaEEOpenfire

2017-09-28 09:40:36

圖像分類準確率

2019-11-04 10:06:19

MySQL索引

2024-07-22 11:43:28

LVMPnetLab網絡

2011-06-07 16:03:48

匿名SQL Server

2017-05-08 15:00:20

H5代碼服務器

2020-02-26 08:00:02

14點遭遇真兇

2020-10-28 15:03:25

C+代碼開發
點贊
收藏

51CTO技術棧公眾號

国产一区二区三区的电影| 日韩中文字幕| 国产精品久久久久桃色tv| 91免费电影网站| 国产一级在线免费观看| 思热99re视热频这里只精品| 欧美在线免费观看视频| 黄黄视频在线观看| 久久米奇亚洲| 国产伦精品一区二区三区在线观看 | 国产二区视频在线| 国产三级在线免费| 国产一区二区久久| 日本一本a高清免费不卡| 麻豆一区在线观看| 欧美人与动xxxxz0oz| 777色狠狠一区二区三区| 久久久久久久久久久视频| 黄色网在线免费观看| 久久亚洲春色中文字幕久久久| 91九色国产在线| 91porny九色| 亚洲国产精品一区制服丝袜| 久久精品国产亚洲精品| 91国模少妇一区二区三区| 亚洲专区**| 欧美日本在线视频| 国产1区2区在线| tube8在线hd| 亚洲欧洲国产日本综合| 日韩美女一区| 五月色婷婷综合| 成人午夜视频在线观看| 成人乱人伦精品视频在线观看| 久草视频一区二区| 日韩一级在线| 国内精品视频一区| 青青草国产在线观看| 久久蜜桃av| 中文字幕亚洲图片| 天天躁夜夜躁狠狠是什么心态| 美国成人xxx| 亚洲成人黄色在线| 蜜桃视频无码区在线观看| 一级欧美视频| 欧美日本免费一区二区三区| 中文字幕国内自拍| av激情成人网| 精品视频1区2区3区| 免费在线观看日韩视频| 亚洲黄色中文字幕| 欧美性生交大片免网| 日本在线xxx| 欧美少妇精品| 色婷婷综合在线| 男女视频一区二区三区| 欧美一区久久久| 欧美性大战久久| 天天色综合社区| av亚洲一区| 欧美精品第一页| 日韩av自拍偷拍| 成人污版视频| 精品国产污网站| avtt香蕉久久| 欧美日中文字幕| 久久精品一本久久99精品| 国产成人免费在线观看视频| 久久国产小视频| 欧美成人网在线| 麻豆changesxxx国产| 影音先锋一区| 国产成人aa精品一区在线播放 | 欧美丰满一区二区免费视频| 中文字幕在线视频一区二区三区| 91精品国产乱码久久久竹菊| 亚洲激情第一页| 国产人妻大战黑人20p| 国产精品7m凸凹视频分类| 欧美成人免费一级人片100| 久久婷婷国产麻豆91| 六月婷婷一区| 成人国产精品日本在线| 懂色av成人一区二区三区| 97se亚洲国产综合在线| 亚洲精品国产精品久久| 性欧美video高清bbw| 日韩欧美国产一区二区| 欧美日韩中文不卡| 成人午夜网址| 夜夜嗨av色一区二区不卡| 538精品在线视频| 国产日韩一区| 亚洲一区二区三区乱码aⅴ| 午夜性色福利影院| 国产精品久久久久久亚洲毛片 | 国产福利片在线观看| 在线国产电影不卡| 国产裸体视频网站| 国产九一精品| 久久久久国色av免费观看性色| 亚洲欧美一二三区| 国产99精品国产| 日韩精品国内| 黄视频网站在线观看| 777午夜精品免费视频| 一二三不卡视频| 欧美在线观看天堂一区二区三区| 欧美在线中文字幕| 精品免费久久久| 国产精品久久午夜| aaa毛片在线观看| 91成人噜噜噜在线播放| 中文字幕av一区| 在线能看的av| 国产福利不卡视频| 一区二区91美女张开腿让人桶| 免费h视频在线观看| 欧美一激情一区二区三区| 国产jjizz一区二区三区视频| 韩国一区二区三区在线观看| 国产精品极品尤物在线观看| 午夜福利理论片在线观看| 亚洲靠逼com| 欧美大尺度做爰床戏| 最新亚洲精品| 97在线视频免费观看| 性猛交富婆╳xxx乱大交天津| 国产精品麻豆欧美日韩ww| 日韩久久一级片| 欧美激情极品| 韩国精品美女www爽爽爽视频| 国产情侣自拍小视频| 国产精品素人一区二区| 另类小说第一页| 蜜桃一区二区三区| 欧洲精品久久久| 性插视频在线观看| 偷拍一区二区三区| 日韩少妇一区二区| 在线精品亚洲| 国产一区在线免费| 福利写真视频网站在线| 日韩欧美亚洲国产精品字幕久久久| 人人干在线观看| 久久成人麻豆午夜电影| 亚洲激情电影在线| 成人av集中营| 中日韩美女免费视频网址在线观看| av大片在线免费观看| 97久久超碰国产精品| 久久久999视频| 亚洲免费专区| 国产精品第一视频| 日本a在线播放| 91麻豆精品国产自产在线观看一区 | 热久久天天拍国产| 国产精品入口夜色视频大尺度| 福利视频在线导航| 6080国产精品一区二区| 卡通动漫亚洲综合| 国产盗摄精品一区二区三区在线 | 国产精品酒店视频| 美女在线观看视频一区二区| 夜夜爽www精品| 欧美黄色一级| 97精品国产97久久久久久春色| 天堂v视频永久在线播放| 一本久久a久久免费精品不卡| 性欧美精品中出| 久久精品99国产精品| 午夜在线视频免费观看| 国产精品传媒| 国产成人拍精品视频午夜网站| 91精品国产91久久久久游泳池 | 国产精品人成电影在线观看| 麻豆传媒免费在线观看| 精品美女一区二区三区| 天堂中文字幕在线观看| 国产精品你懂的| 国产精品偷伦视频免费观看了| 国产欧美短视频| 天天久久人人| 亚洲图色一区二区三区| 日韩av电影在线免费播放| 在线a免费看| 亚洲第一精品夜夜躁人人躁| www.日韩一区| 亚洲一区二区美女| 91网站免费视频| 国内精品久久久久影院一蜜桃| www.av毛片| 日韩在线不卡| 九色综合日本| www.久久久.com| 欧美一级片一区| 成人日韩欧美| 亚洲天堂免费在线| 99在线精品视频免费观看20| 日韩欧美精品在线观看| 欧美老熟妇一区二区三区| 久久影院视频免费| 韩国三级在线播放| 日韩av在线免费观看不卡| 国产乱人伦精品一区二区三区| 国产一区二区三区四区五区传媒 | 亚洲成人手机在线| 国产精品综合激情| 99精品视频一区| 黄色片子免费看| 男人的天堂久久精品| 69堂免费视频| 韩国精品一区二区三区| 影音先锋欧美在线| 国产乱码精品一区二区亚洲| 国产超碰91| 国产精品一级在线观看| 国产精品7m视频| 91超碰在线播放| 欧美精品videosex极品1| 日本网站在线免费观看视频| 亚洲嫩模很污视频| 无码精品在线观看| 精品国产一区二区精华| aaa国产视频| 69堂亚洲精品首页| 国产情侣免费视频| 色婷婷综合久久久久中文| 国产成人免费观看视频| 亚洲国产精品久久一线不卡| 精品无码一区二区三区蜜臀| 国产欧美日韩另类一区| 波多野结衣办公室33分钟| 99久久婷婷国产综合精品| 久久久久久国产精品日本| 久久99久久精品| 波多野结衣xxxx| 麻豆精品一二三| 亚洲天堂2018av| 日韩精品一二三区| 韩国日本在线视频| 香蕉久久夜色精品国产| 国产精品网站免费| 国产美女一区| 久久婷婷国产精品| 午夜亚洲性色视频| 成人黄色片视频| 肉肉av福利一精品导航| 久久久国产欧美| 麻豆成人91精品二区三区| 精品亚洲一区二区三区四区| 麻豆传媒一区二区三区| 爱豆国产剧免费观看大全剧苏畅| 国内精品写真在线观看| 中文字幕永久免费| av一区二区久久| 在线免费观看黄色小视频| 欧美激情一区二区三区在线| 长河落日免费高清观看| 亚洲婷婷综合久久一本伊一区| 在线免费观看亚洲视频| 亚洲成国产人片在线观看| 91精品国产乱码久久久张津瑜| 欧美日韩综合视频| 夜夜躁日日躁狠狠久久av| 欧美日本一区二区三区四区| 国产高清视频免费观看| 亚洲精品国产精品久久清纯直播| 麻豆app在线观看| 久久精品99久久香蕉国产色戒| 在线免费观看a视频| 久久久久国产精品免费| 亚洲高清黄色| 成人在线激情视频| 麻豆成人入口| 一区二区91美女张开腿让人桶| 欧美精品九九| 成人在线看视频| 国内精品伊人久久久久影院对白| 国产国语老龄妇女a片| 久久尤物电影视频在线观看| 国产高清视频免费在线观看| 亚洲v中文字幕| 亚洲成人av网址| 精品久久久久久久久久久久久久久久久| 日韩三级电影网| 日韩网站免费观看高清| gogo久久| 91精品国产综合久久男男 | 九九视频免费观看| 色偷偷久久人人79超碰人人澡| 国产片高清在线观看| 精品爽片免费看久久| 乱人伦中文视频在线| 久久久久久亚洲精品不卡| 电影在线观看一区二区| 国产精品免费一区二区三区观看| 精品视频亚洲| 国内精品在线观看视频| 精品制服美女久久| 国产男男chinese网站| 亚洲欧洲综合另类| 日韩国产成人在线| 欧美videossexotv100| 丁香婷婷在线观看| 亚洲91精品在线观看| 91精品国产一区二区在线观看 | 波多野结衣片子| 夜夜嗨av一区二区三区四季av| 亚洲中文无码av在线| 日韩黄色高清视频| 影音先锋在线视频| 国产欧美日韩中文字幕| 免费观看久久av| 国产美女网站在线观看| 国产乱码精品一品二品| 99自拍偷拍视频| 在线观看视频91| 视频国产在线观看| 国产69精品久久久久99| 国产精品亚洲欧美日韩一区在线| 日韩一区不卡| 美女爽到呻吟久久久久| 日韩av无码一区二区三区不卡| 亚洲欧洲精品一区二区三区不卡| 最新中文字幕在线观看视频| 日韩精品在线观看网站| sm在线播放| 国产一区二区三区四区五区在线 | 国产精品福利影院| 亚洲精品一区二三区| 亚洲乱码一区二区| 欧美极品videos大乳护士| 国产v亚洲v天堂无码| 一区视频在线看| 性活交片大全免费看| 一级女性全黄久久生活片免费| 国产成人三级在线播放 | 免费h在线看| 免费看污久久久| 亚洲一卡久久| 全黄一级裸体片| 色哟哟精品一区| 成人欧美一区| 国产精品久久久久久久久久久久久久| 在线观看欧美理论a影院| 国产精品亚洲αv天堂无码| 久久婷婷国产综合精品青草| 日韩欧美在线观看免费| 亚洲视频在线观看免费| yy6080久久伦理一区二区| 一级做a爰片久久| 国产一区二区三区高清播放| 久久国产精品波多野结衣av| 欧美大片日本大片免费观看| 国产精品一区hongkong| 激情伦成人综合小说| 亚洲永久免费| 熟女少妇内射日韩亚洲| 欧美性感一区二区三区| 九七电影韩国女主播在线观看| 亚洲999一在线观看www| 亚洲视频狠狠| 成人午夜剧场视频网站| 欧美影院一区二区| 日p在线观看| 国产欧美日韩亚洲| 久久最新视频| 欧美特黄一级片| 亚洲成人网在线| 视频在线日韩| 丰满女人性猛交| 不卡的av在线| 国产一级片一区二区| 久久不射电影网| 欧美日韩看看2015永久免费| 天天爽天天爽夜夜爽| 亚洲男人天堂av网| 亚洲欧美日本在线观看| 国产精品普通话| 黑人一区二区| 日本欧美一区二区三区不卡视频| 91精品黄色片免费大全| 日韩大片免费观看| 亚洲在线播放电影| 成人精品gif动图一区| 国产偷人爽久久久久久老妇app| 久久99亚洲热视| 国产精品欧美在线观看| 免费人成视频在线播放| 日韩欧美aⅴ综合网站发布| 成人在线免费看黄| 日韩成人av电影在线| 国产精品99久久久久| 亚洲精品国产精品乱码视色| 欧美精品videos| 天天综合网91| 自拍偷拍视频亚洲| 欧美成人精品高清在线播放| 岛国精品在线|