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

MySQL 主從 AUTO_INCREMENT 不一致問題分析

數據庫
本文介紹了 MySQL5.7 中常見的replace into 操作造成的主從auto_increment不一致現象,一旦觸發了主從切換,業務的正常插入操作會觸發主鍵沖突的報錯提示。

一、問題描述

1.1 問題現象

在 MySQL 5.7 版本中,REPLACE INTO 操作在表存在自增主鍵的情況下,可能會出現表的auto_increment值主從不一致現象,如果在此期間發生主從故障切換,當原來的slave節點變成了新的master節點,由于表的auto_increment值是小于原主庫的,當業務繼續寫入時,就會收到主鍵沖突的報錯提示。

相關報錯信息如下:

! 報錯提示

ERROR 1062 (23000): Duplicate entry 'XXX' for key 'PRIMARY'

1.2 影響評估

在業務邏輯中使用了Replace into,或者INSERT...ON DUPLICATE KEY UPDATE。

一旦出現了表的auto_increment值主從不一致現象,在出現MySQL主從故障切換后,業務的正常寫入會報主鍵沖突的錯誤,當auto_increment相差不多,或許在業務重試的時候會跳過報錯,但是auto_increment相差較多時,會超出業務重試的次數,這樣造成的影響會更大。

二、問題復現

2.1 環境搭建

這里在測試環境中,搭建MySQL社區版 5.7 版本,一主一從的架構。

【OS】:CentOS Linux release 7.3

【MySQL】:社區版本 5.7

【主從架構】:一主一從

【庫表信息】:庫名:test2023

表名:test_autoincrement

表結構如下:

CREATE TABLE `test_autoincrement` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `name` varchar(100) NOT NULL DEFAULT 'test' COMMENT '測試名字',
  `uid` int(11) NOT NULL COMMENT '測試表唯一鍵',
  PRIMARY KEY (`id`),
  UNIQUE KEY `uid` (`uid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2.2 準備測試數據

MySQL [test2023]> insert into test_autoincrement(name,uid) select '張三',1001;
Query OK, 1 row affected (0.08 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MySQL [test2023]> insert into test_autoincrement(name,uid) select '李四',1002;
Query OK, 1 row affected (0.06 sec)
Records: 1  Duplicates: 0  Warnings: 0
 
MySQL [test2023]>
MySQL [test2023]> insert into test_autoincrement(name,uid) select '王五',1003;
Query OK, 1 row affected (0.08 sec)
Records: 1  Duplicates: 0  Warnings: 0

正常情況下,插入一行數據,影響的行數是1。

此時查看主從節點表的autoincrement值,可以看到此時主從的AUTO_INCREMENT是一致的,都是4,即自增主鍵下一次申請的值是4。

2.3 問題復現模擬

2.3.1 模擬REPLACE INTO操作

MySQL [test2023]> REPLACE INTO test_autoincrement (name,uid) values('張三豐',1001);
Query OK, 2 rows affected (0.01 sec)

這里通過REPLACE INTO操作判斷,如果存在唯一ID為1001的記錄,那么將name字段的值更改為"張三豐",可發現此時影響的行數是2。現在我們再次查看主從節點表的autoincrement值。

此時出現了主從節點表的AUTO_INCREMENT不一致現象。

2.3.2 模擬主從切換

由于是在測試環境,這里就直接進行了主從關系的更改。

(1)停止當前slave節點的復制線程

MySQL [test2023]> stop slave;
Query OK, 0 rows affected (0.08 sec)

(2)查看當前slave節點的Executed_Gtid_Set值

MySQL [test2023]> show master status\G
*************************** 1. row ***************************
File: binlog.000002
Position: 4317
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set: 9cc90407-ff89-11ed-8b7a-fa163e2d11e1:1-82,
a0c1d6ff-5764-11ee-94ea-fa163e2d11e1:1-11
1 row in set (0.01 sec)

(3)重做主從關系

MySQL [test2023]> CHANGE MASTER TO MASTER_HOST = '原slave節點的IP地址', MASTER_USER = '復制賬戶', MASTER_PASSWORD = '密碼', MASTER_PORT = 端口, MASTER_AUTO_POSITION = 1 ;
Query OK, 0 rows affected, 2 warnings (0.21 sec)
MySQL [test2023]> start slave;
Query OK, 0 rows affected (0.05 sec)
MySQL [test2023]> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: XXX
Master_User: XXX
Master_Port: XXX
Connect_Retry: 60
Master_Log_File: binlog.000002
Read_Master_Log_Pos: 4317
Relay_Log_File: relay.000004
Relay_Log_Pos: 445
Relay_Master_Log_File: binlog.000002
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4317
Relay_Log_Space: 726
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 461470011
Master_UUID: a0c1d6ff-5764-11ee-94ea-fa163e2d11e1
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set: a0c1d6ff-5764-11ee-94ea-fa163e2d11e1:11
Executed_Gtid_Set: 9cc90407-ff89-11ed-8b7a-fa163e2d11e1:1-82,
a0c1d6ff-5764-11ee-94ea-fa163e2d11e1:1-11
Auto_Position: 1
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
1 row in set (0.00 sec)

2.3.3 模擬業務正常寫入

MySQL [test2023]> insert into test_autoincrement(name,uid) select '趙六',1004; ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'

到這里我們看到了預期的報錯現象,如果是正常業務系統,這里的主從節點表的AUTO_INCREMENT可能會相差非常大,業務的正常插入就會持續報錯了。

意味著真實的操作是先做delete操作,然后再進行insert。

三、原因分析

3.1 為什么從庫節點的 autoincrement 沒有變化?

at 10790
#230927 16:23:45 server id 46147000  end_log_pos 10863 CRC32 0x85c60fb7         Update_rows: table id 122 flags: STMT_END_F
BINLOG '
keYTZRO4JcACRQAAACYqAAAAAHoAAAAAAAEACHRlc3QyMDIzABJ0ZXN0X2F1dG9pbmNyZW1lbnQA
AwMPAwKQAQCCO6qB
keYTZR+4JcACSQAAAG8qAAAAAHoAAAAAAAEAAgAD///4AQAAAAYA5byg5LiJ6QMAAPgEAAAACQDl
vKDkuInkuLDpAwAAtw/GhQ==
'/!/;
UPDATE test2023.test_autoincrement
WHERE
@1=1 /* INT meta=0 nullable=0 is_null=0 */
@2='張三' /* VARSTRING(400) meta=400 nullable=0 is_null=0 */
@3=1001 /* INT meta=0 nullable=0 is_null=0 */
SET
@1=4 /* INT meta=0 nullable=0 is_null=0 */
@2='張三豐' /* VARSTRING(400) meta=400 nullable=0 is_null=0 */
@3=1001 /* INT meta=0 nullable=0 is_null=0 */
at 10863
#230927 16:23:45 server id 46147000  end_log_pos 10894 CRC32 0xe204d99b         Xid = 331
COMMIT/!/;

這里可以看到REPLACE INTO操作對應的binlog日志記錄其實是update操作,從庫節點在應用update操作時,發現命中數據時,對應的autoincrement是沒有變化的。

3.2 REPLACE INTO 操作的官方定義是什么?

官方對于 REPLACE INTO 的定義如下:

摘選自

https://dev.mysql.com/doc/refman/5.7/en/replace.html

REPLACE works exactly like INSERT, except that if an old row in the table has the same value as a new row for a PRIMARY KEY or a UNIQUE index, the old row is deleted before the new row is inserted. See Section 13.2.5, “INSERT Statement”.

REPLACE is a MySQL extension to the SQL standard. It either inserts, or deletes and inserts. For another MySQL extension to standard SQL—that either inserts or updates—see Section 13.2.5.2, “INSERT ... ON DUPLICATE KEY UPDATE Statement”.

這里可以看到一張表包含主鍵或者唯一鍵的情況下,replace操作會判斷原有的數據行是否存在,如果存在的話,就先刪除舊的數據,然后進行insert操作,如果不存在的話,就和insert操作時一樣的。

第二段也提到了INSERT ... ON DUPLICATE KEY UPDATE Statement ,其實這個操作也會造成上面的主從autoincrement不一致現象,這里就不展開討論了。

! Note

REPLACE makes sense only if a table has a PRIMARY KEY or UNIQUE index. Otherwise, it becomes equivalent to INSERT, because there is no index to be used to determine whether a new row duplicates another.

3.3 為什么REPLACE INTO操作在binlog日志中記錄的是update操作?

這里我們通過源碼文件sql_insert.cc和log_event.cc進行分析。

sql_insert.cc:
...
/* Check if there is more uniq keys after field */
static int last_uniq_key(TABLE table,uint keynr)
{
/
The information about the last key conflict will be used to
do a replace of the new row on the conflicting row, rather
than doing a delete (of old row) + insert (of new row).

Hence check for this flag and disable replacing the last row
by returning 0 always. Returning 0 will result in doing
a delete + insert always.*/
if (table->file->ha_table_flags() & HA_DUPLICATE_KEY_NOT_IN_ORDER){
return 0;
}
while (++keynr < table->s->keys){
if (table->key_info[keynr].flags & HA_NOSAME){
return 0;
}
}
return 1;
}
...
/*
  The manual defines the REPLACE semantics that it is either
  an INSERT or DELETE(s) + INSERT; FOREIGN KEY checks in
  InnoDB do not function in the defined way if we allow MySQL
  to convert the latter operation internally to an UPDATE.
      We also should not perform this conversion if we have
      timestamp field with ON UPDATE which is different from DEFAULT.
      Another case when conversion should not be performed is when
      we have ON DELETE trigger on table so user may notice that
      we cheat here. Note that it is ok to do such conversion for
      tables which have ON UPDATE but have no ON DELETE triggers,
      we just should not expose this fact to users by invoking
      ON UPDATE triggers.
*/
if (last_uniq_key(table,key_nr) &&
    !table->file->referenced_by_foreign_key() &&
        (!table->triggers || !table->triggers->has_delete_triggers()))
    {
      if ((error=table->file->ha_update_row(table->record[1],
                        table->record[0])) &&
          error != HA_ERR_RECORD_IS_THE_SAME)
        goto err;
      if (error != HA_ERR_RECORD_IS_THE_SAME)
        info->stats.deleted++;
      else
        error= 0;
      thd->record_first_successful_insert_id_in_cur_stmt(table->file->insert_id_for_cur_row);
      /*
        Since we pretend that we have done insert we should call
        its after triggers.
      */
      goto after_trg_n_copied_inc;
    }
    else
    {...
}
...

上述源碼中可以看到在主庫中replace 操作其實是insert 或者 delete + insert

The manual defines the REPLACE semantics that it is either an INSERT or DELETE(s) + INSERT;

而 MySQL 在主從同步的binlog日志中,將replace操作轉換為update操作的條件為:當發生沖突的鍵是最后一個唯一鍵,且沒有外鍵約束,且沒有觸發器,由于我們的測試表中是沒有外鍵約束,也沒有觸發器的,所以從庫接收到的binlog日志中轉化為update的條件即為最后一個唯一鍵。

這里,我們再進行測試一下(去掉表中的唯一索引uid)。

(1)創建新表

CREATE TABLE `test_autoincrement_2` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `name` varchar(100) NOT NULL DEFAULT 'test' COMMENT '測試名字',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4

(2)插入測試數據

insert into test_autoincrement_2(name) select '孫七';
insert into test_autoincrement_2(name) select '周八';
insert into test_autoincrement_2(name) select '吳九';
#此時主從表結構是一致的,如下:
CREATE TABLE test_autoincrement_2 (
id int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
name varchar(100) NOT NULL DEFAULT 'test' COMMENT '測試名字',
PRIMARY KEY (id)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4

(3)replace into 操作驗證主庫和從庫的AUTO_INCREMENT

MySQL [test2023]> REPLACE INTO test_autoincrement_2 (id,name) values(3,'鄭十');
Query OK, 2 rows affected (0.08 sec)

這里我們把id=3的這一行數據對應的name修改為’鄭十’,可發現上述影響的行數是2。

再次驗證主庫和從庫的AUTO_INCREMENT,發現并沒有發生變化,還是4。

CREATE TABLE `test_autoincrement_2` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '自增主鍵',
  `name` varchar(100) NOT NULL DEFAULT 'test' COMMENT '測試名字',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4

(4)分析binlog日志文件

at 8089
#230928 15:52:08 server id 461470011  end_log_pos 8151 CRC32 0xc2ff85bb         Update_rows: table id 481 flags: STMT_END_F
BINLOG '
qDAVZRM7eYEbRgAAAJkfAAAAAOEBAAAAAAEACHRlc3QyMDIzABR0ZXN0X2F1dG9pbmNyZW1lbnRf
MgACAw8CkAEAFSqQxg==
qDAVZR87eYEbPgAAANcfAAAAAOEBAAAAAAEAAgAC///8AwAAAAYA5ZC05Lmd/AMAAAAGAOmDkeWN
gbuF/8I=
'/!/;
UPDATE test2023.test_autoincrement_2
WHERE
@1=3 /* INT meta=0 nullable=0 is_null=0 */
@2='吳九' /* VARSTRING(400) meta=400 nullable=0 is_null=0 */
SET
@1=3 /* INT meta=0 nullable=0 is_null=0 */
@2='鄭十' /* VARSTRING(400) meta=400 nullable=0 is_null=0 */
at 8151
#230928 15:52:08 server id 461470011  end_log_pos 8182 CRC32 0xaa39d2a4         Xid = 699
COMMIT/!/;
SET @@SESSION.GTID_NEXT= 'AUTOMATIC' /* added by mysqlbinlog / /!*/;
DELIMITER ;
End of log file
/!50003 SET COMPLETION_TYPE=@OLD_COMPLETION_TYPE/;
/!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=0/;

總結:可發現binlog日志記錄的同樣是update 操作。只是當表中除了主鍵外沒有額外的唯一鍵時,replace into的操作并不會觸發從庫的auto_increment的異常問題。比如上述的案例REPLACE INTO test_autoincrement_2 (id,name) values(3,'鄭十');,這里僅更改了name字段,由‘吳九‘修改為’鄭十’。但是主鍵id是沒有變化的,當然也就不需要再次使用auto_increment,這里也可以看到主庫的auto_increment當然也沒有發現變化(當表中除了主鍵外含有額外的唯一鍵時,是會觸發申請auto_increment的),binlog接收的仍然是update操作,所以從庫的auto_increment也是沒有變化的,這樣就沒法造成auto_increment和主庫不一致的問題了。

四、解決方案

到這里,我們是明白了replace into 會造成主從的auto_increment 不一致,但是怎么去解決呢?

4.1 升級到 MySQL 8.0 版本

在 MySQL 8.0 版本中已將AUTO_INCREMENT值做了持久化,且在做更新操作時,會將表上的自增列被更新為比auto_increment更大的值,auto_increment值也將被更新。

4.2 修改 AUTO_INCREMENT 值

線上環境可能已經有很多這種情況,在沒有觸發業務報錯的情況下,一般是很難發現這個隱患,如何在日常巡檢中找到這些問題才是關鍵。

巡檢邏輯一:這里可以通過巡檢判斷從庫的max(id) >= AUTO_INCREMENT的方式來找出已經存在問題的表信息。然后通過SQL語句:ALTER TABLE table_name AUTO_INCREMENT = new_value; 進行修改。

巡檢步驟可參考:

(1)僅檢測某從節點,包含auto_increment 屬性的表,過濾SQL如下:

select TABLE_SCHEMA,TABLE_NAME,AUTO_INCREMENT from information_schema.tables where table_schema not in ('information_schema','mysql','performance_schema','sys') AUTO_INCREMENTis not null \G

(2)加鎖后讀表信息,語句如下:

① 給表加鎖

lock tables table_name write;

②讀取數據和表auto_increment值進行比對

MAXID=select max(id) from table_name;
AUTO_INCREMENT=select AUTO_INCREMENT from information_schema.tables where TABLE_NAME='t1' ;

③ 判斷條件

如果MAXID >= AUTO_INCREMENT , 判斷為異常

巡檢邏輯二:可以在高可用切換的時候增加AUTO_INCREMENT值判斷,如果AUTO_INCREMENT值不一致,則不發生切換,不過這里的slave節點AUTO_INCREMENT的值本身可能因為延遲等問題,就會稍落后maste主節點,正常的巡檢還是有難度的,還有就是當MySQL主從切換觸發時,如果是因為原主庫宕機了,不觸發切換也會有問題,所以還是需要提前盡快把這個隱患排除掉。

4.3 禁用 replace into 操作

業務側禁用replace into 或 insert ... on duplicate key update ,實現方式可以通過代碼邏輯來實現。

4.4 replace into操作的表不增加其他唯一索引

這里其實實現還是有難度的,自增id是不可控的,業務一般是不會使用數據庫自帶的自增id。

五、問題總結

  1. REPLACE INTO 操作在表存在自增主鍵且包含唯一索引的情況下,當出現數據沖突的時候,會觸發AUTO_INCREMENT在主從節點的不一致,一旦主從發生切換,就會造成業務的寫入報主鍵沖突的錯誤。解決建議:業務更改實現方式,避免使用replace into,或者使用MySQL8.0 及以上的版本來解決該問題。
  2. 該問題是一個官方的BUG,不過并沒有在MySQL5.7的版本中得到修復 。

https://bugs.mysql.com/bug.php?id=83030

參考文獻:

  1. https://bugs.mysql.com/bug.php?id=83030
  2. https://dev.mysql.com/worklog/task/?id=6204
  3. https://bugs.mysql.com/bug.php?id=20188


責任編輯:龐桂玉 來源: vivo互聯網技術
相關推薦

2025-04-03 09:51:37

2024-05-11 07:37:43

數據Redis策略

2022-03-16 15:54:52

MySQL數據format

2010-06-11 14:55:17

2020-07-20 14:06:38

數據庫主從同步服務

2018-07-08 07:38:28

數據庫緩存數據

2013-03-29 11:16:17

2017-08-25 17:59:41

浮點運算C語言

2020-11-17 06:42:21

MySQL數據庫開源

2010-05-13 16:32:18

2021-05-27 18:06:30

MySQL編碼數據

2010-06-02 10:53:28

MySQL版本

2024-11-18 08:00:00

數據倉庫通用語義層商業智能

2021-04-18 15:01:56

緩存系統數據

2013-12-13 14:46:55

OSPFMTU鄰接關系

2017-06-20 09:42:52

網絡安全法數據隱私法網絡安全

2021-12-30 09:32:04

緩存數據庫數據

2018-07-15 08:18:44

緩存數據庫數據

2022-03-18 10:53:49

數據系統架構

2020-04-26 21:57:46

etcd3元數據存儲
點贊
收藏

51CTO技術棧公眾號

亚洲免费视频中文字幕| 国产九色精品成人porny| 亚洲三级av在线| xx欧美撒尿嘘撒尿xx| 1stkiss在线漫画| 99麻豆久久久国产精品免费| 国产精品国产自产拍高清av水多 | 黄色动漫网站入口| 1024国产在线| www.亚洲在线| 91精品视频网站| 精品人妻一区二区色欲产成人| 91亚洲国产| 亚洲片av在线| 色诱av手机版| 日本免费成人| 色又黄又爽网站www久久| 福利网在线观看| 国产高清免费av在线| 成人av综合在线| 91香蕉电影院| 天堂av免费在线观看| 最新亚洲一区| 欧美情侣性视频| 天天操天天摸天天舔| 婷婷综合福利| 亚洲成人av在线播放| 中文字幕视频三区| av亚洲一区二区三区| 香蕉影视欧美成人| 奇米777四色影视在线看| av电影在线观看网址| 91网站视频在线观看| 91久久精品一区二区别| 国产有码在线观看| 日产欧产美韩系列久久99| 1769国内精品视频在线播放| 一级aaa毛片| 欧美韩国一区| 美乳少妇欧美精品| 99热6这里只有精品| 成人羞羞视频在线看网址| 精品偷拍一区二区三区在线看| 婷婷五月精品中文字幕| www.爱久久| 精品国一区二区三区| 免费黄视频在线观看| 国产成人免费视频网站视频社区 | 日韩av免费在线观看| 天天综合网入口| 99精品国产在热久久| 久久久女女女女999久久| 久久久久国产精品夜夜夜夜夜| 正在播放日韩欧美一页| 久热精品视频在线| 农村妇女精品一区二区| 午夜精品av| 欧美日本中文字幕| 久草视频手机在线观看| 黄色成人在线网址| 992tv成人免费影院| 国产无套粉嫩白浆内谢| 国产美女精品| 国产精品久久久久久久一区探花| 久久国产乱子伦精品| 青青草国产成人99久久| 91精品国产自产在线老师啪| 99在线观看精品视频| 国产电影一区二区三区| 国产午夜精品一区| 亚洲av成人精品一区二区三区在线播放 | 一级黄色片毛片| 欧美网色网址| 一区二区三区在线播放欧美| 九一在线免费观看| 女人天堂亚洲aⅴ在线观看| 欧美激情欧美激情| 人人爽人人爽人人片av| 久久99久久精品欧美| www 成人av com| 婷婷视频在线观看| 国产亲近乱来精品视频| 警花观音坐莲激情销魂小说| 精精国产xxxx视频在线中文版| 欧美日韩中文在线| 久久黄色片网站| h视频久久久| 国产亚洲精品一区二555| 国产中文av在线| 在线亚洲观看| 国产日韩欧美日韩| 欧美一级特黄aaaaaa大片在线观看| ww亚洲ww在线观看国产| 97超碰免费观看| 深夜成人在线| 91精品国产综合久久福利| 亚洲熟女乱综合一区二区三区| 成人国产精品一级毛片视频| 欧美激情一级二级| 在线观看不卡的av| aa级大片欧美| 手机看片日韩国产| 亚洲国产欧美日本视频| 91精品国产品国语在线不卡| 日韩人妻一区二区三区| 欧美精品入口| 国产精品视频yy9099| 色窝窝无码一区二区三区成人网站| 国产女人aaa级久久久级| 国产一二三在线视频| 99热播精品免费| 欧美精品一区二区三区一线天视频| a天堂中文字幕| 亚洲小说区图片区| 国产精品中文在线| 蜜桃视频在线观看网站| 亚洲一区二区三区精品在线| jizz18女人| 少妇精品久久久一区二区三区| 欧美日韩国产123| 亚洲手机在线观看| 久久久国产精品麻豆| 国产男女免费视频| 香蕉成人app| 久久精品成人欧美大片古装| 中文字幕一区二区人妻| 91免费版在线| 丰满爆乳一区二区三区| youjizzjizz亚洲| 久久久成人av| 国产有码在线观看| 中文天堂在线一区| 欧美精品无码一区二区三区| 神马久久影院| 91av在线视频观看| 色婷婷av一区二区三区之e本道| 一区二区三区精品视频| 中文字幕乱妇无码av在线| 91tv精品福利国产在线观看| 国产精品视频资源| 日本在线视频网| 欧美女孩性生活视频| 日本黄区免费视频观看| 老司机精品视频一区二区三区| 日韩欧美在线一区二区| 三上悠亚激情av一区二区三区| 亚洲精品一区中文字幕乱码| 特级毛片www| 久久亚洲精华国产精华液| 116极品美女午夜一级| 亚洲人成亚洲精品| 国产成人极品视频| 国产天堂在线| 欧美电影一区二区| 日韩va亚洲va欧美va清高| 国产一区欧美一区| 国产一二三四区在线观看| 亚洲视频国产| 国自产精品手机在线观看视频| 日本黄色三级视频| 欧美日韩亚洲一区二| 日韩乱码人妻无码中文字幕久久| 久久精品五月| 中文字幕在线中文字幕日亚韩一区 | 午夜精品一区二区三区国产| 91久久精品国产91久久性色tv| 欧美巨大xxxx做受沙滩| 亚洲第一在线视频| 国产综合精品视频| 中文久久乱码一区二区| 手机看片国产精品| 日韩午夜av在线| 日本三级中国三级99人妇网站| 青青国产精品| 欧美劲爆第一页| 麻豆导航在线观看| 欧美精品1区2区3区| 国产一级aa大片毛片| 久久久99免费| 少妇高潮一69aⅹ| 夜夜嗨网站十八久久| 亚洲国产精品久久久久久女王| 欧美国产亚洲精品| 日本精品在线视频 | 久久久之久亚州精品露出| 日本中文字幕一区二区有码在线| 精品视频123区在线观看| 免费在线观看黄色av| 久久精品网站免费观看| 伊人网在线综合| 亚洲一区自拍| 天天做天天爱天天高潮| 亚洲永久精品唐人导航网址| 亚洲aⅴ男人的天堂在线观看| japanese色国产在线看视频| 中文字幕精品一区二区精品| 亚洲国产www| 欧美三级电影在线观看| 国产午夜福利一区二区| 国产精品女上位| 亚洲の无码国产の无码步美| 麻豆成人91精品二区三区| 久久久久免费看黄a片app| 久久福利影院| 欧美专区一二三| 成人偷拍自拍| 亚洲综合第一页| 黄色精品视频| 国产91精品高潮白浆喷水| 成人在线网址| 亚洲一二三在线| 天堂av2024| 日韩精品一区二区三区视频在线观看| 日韩黄色一级视频| 亚洲成在人线免费| 男人的天堂久久久| 国产精品国产馆在线真实露脸| 双性尿奴穿贞c带憋尿| 国产不卡高清在线观看视频| 色呦色呦色精品| 日本va欧美va精品发布| 精品视频一区二区在线| 国内自拍视频一区二区三区| 日韩不卡视频一区二区| 青草国产精品| 色噜噜色狠狠狠狠狠综合色一| 日本在线中文字幕一区| 国产综合色一区二区三区| 久久伊人久久| 91精品在线看| 亚洲aⅴ网站| 国产日产欧美精品| 日韩久久一区| 国产一区二区在线播放| 成人不卡视频| 国产精品免费视频久久久| 欧美成人ⅴideosxxxxx| 人人爽久久涩噜噜噜网站| 日韩欧美精品一区二区三区| 91av在线播放| 美女18一级毛片一品久道久久综合| 97视频在线观看视频免费视频 | 亚洲一区二区三区精品在线观看| 欧美精美视频| 日韩偷拍一区二区| 成人黄色小视频| 亚洲欧美一区二区原创| 日韩激情一区| 国产精品美女在线播放| 伊人久久大香线蕉综合四虎小说 | 国产成人h网站| 久久精品无码专区| av中文字幕不卡| 亚洲天堂网一区二区| 久久久蜜桃精品| 亚洲精品国产精品国自产网站| 国产日韩精品一区二区三区在线| 欧美xxxx精品| 亚洲天堂免费看| 久久久久久久久久一区二区三区 | 这里只有精品国产| 欧美久久免费观看| www.黄色国产| 亚洲精品久久久久久久久久久久| 日本一二三区在线视频| 国产一区二区三区直播精品电影| 丝袜美腿美女被狂躁在线观看| 日韩色av导航| 第四色日韩影片| 日本视频久久久| 日韩免费在线电影| 99久久精品免费看国产一区二区三区| 牛牛影视久久网| 日韩欧美亚洲日产国产| 牛夜精品久久久久久久99黑人| www.国产在线播放| 视频一区二区国产| 一级日本黄色片| 国产成人自拍网| 国产免费看av| 一区二区在线电影| 国产精品第5页| 欧美欧美欧美欧美首页| 好吊色一区二区三区| 一区二区三区四区精品| 国精产品一区一区三区mba下载| 555www成人网| 美女国产精品久久久| 久久精品五月婷婷| 在线观看免费一区二区| 免费看的黄色大片| 国产在线精品一区二区三区不卡 | 亚洲一二三四区不卡| 亚洲av无码精品一区二区| 精品少妇一区二区三区在线视频| 国产精品久久久久一区二区国产| 欧美裸体男粗大视频在线观看| 在线观看福利电影| 不卡视频一区| 国产精品不卡| 国产一区二区视频免费在线观看| 国产成人综合在线播放| 美女av免费看| 色呦呦网站一区| 人妻丰满熟妇av无码区hd| 久久精品中文字幕| 欧美国产日韩电影| 国产免费一区| 欧美黄免费看| 欧美在线aaa| 久久亚洲捆绑美女| 日本a在线观看| 日韩欧美一区二区免费| 男人资源在线播放| 国产99久久精品一区二区| 日本亚洲不卡| 国产69精品久久久久999小说| 国产在线视视频有精品| 91视频最新网址| 欧美在线你懂得| 免费成人av电影| 欧洲亚洲女同hd| 人人香蕉久久| 成人一对一视频| 成人性生交大合| 欧美成人片在线观看| 4438x亚洲最大成人网| 国产黄在线播放| 日韩男女性生活视频| 香蕉久久夜色精品国产使用方法| 成 年 人 黄 色 大 片大 全| 国产精品白丝jk白祙喷水网站| 亚洲区一区二区三| 欧美日韩电影一区| 免费a级在线播放| 国产综合在线观看视频| 希岛爱理一区二区三区| 午夜免费福利视频在线观看| 国产精品视频在线看| 中文字幕视频免费观看| 色99之美女主播在线视频| 欧美成人app| 亚洲一区在线直播| 久久99精品国产.久久久久久 | 五月天网站亚洲| 天天干,夜夜操| 91精品国产高清| 美日韩中文字幕| 国产97色在线 | 日韩| 国产婷婷色一区二区三区| 亚洲国产无线乱码在线观看| 色偷偷偷亚洲综合网另类| 精品亚洲a∨| mm131午夜| 成人精品在线视频观看| 日韩欧美视频在线免费观看| 日韩成人在线视频网站| 日韩欧美一区二区三区在线观看 | 久久综合九色| 欧美xxxx精品| 日韩欧美一级片| 日本а中文在线天堂| 日本不卡一区二区三区在线观看| 久久福利资源站| 69av视频在线| 亚洲精品第一页| 福利一区二区三区视频在线观看| 艳母动漫在线免费观看| 成人国产视频在线观看| 国产一级片毛片| 尤物yw午夜国产精品视频| 97色婷婷成人综合在线观看| 国产美女作爱全过程免费视频| av影院午夜一区| 在线观看毛片视频| 久久91精品国产| 男男gay无套免费视频欧美| mm131国产精品| 亚洲福利电影网| 日本三级视频在线观看| 国产伦理久久久| 美女视频黄 久久| 精品一级少妇久久久久久久| 亚洲精品日韩欧美| 精品国产一区二区三区性色av | 日韩精品三区| 久青草视频在线播放| 国产欧美日韩另类视频免费观看| 精品人妻无码一区二区三区蜜桃一 | 美女的奶胸大爽爽大片| 亚洲免费成人av电影| 外国成人毛片| 欧美极品欧美精品欧美图片| 亚洲欧洲综合另类| 激情小视频在线| 国产精品一区二区你懂得| 麻豆免费精品视频| 国产a∨精品一区二区三区仙踪林| 日韩在线中文视频| 亚洲欧美校园春色|