国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Sharding-Jdbc實(shí)現(xiàn)讀寫分離、分庫分表,妙!

共 25796字,需瀏覽 52分鐘

 ·

2021-07-12 17:45

1、概覽

ShardingSphere-Jdbc定位為輕量級Java框架,在Java的Jdbc層提供的額外服務(wù)。它使用客戶端直連數(shù)據(jù)庫,以jar包形式提供服務(wù),可理解為增強(qiáng)版的Jdbc驅(qū)動,完全兼容Jdbc和各種ORM框架

2、MySQL主從復(fù)制

1)、docker配置mysql主從復(fù)制

1)創(chuàng)建主服務(wù)器所需目錄

mkdir -p /usr/local/mysqlData/master/cnf
mkdir -p /usr/local/mysqlData/master/data

2)定義主服務(wù)器配置文件

vim /usr/local/mysqlData/master/cnf/mysql.cnf
[mysqld]
## 設(shè)置server_id,注意要唯一
server-id=1
## 開啟binlog
log-bin=mysql-bin
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認(rèn)格式是statement)
binlog_format=mixed

3)創(chuàng)建并啟動mysql主服務(wù)

docker run -itd -p 3306:3306 --name master -v /usr/local/mysqlData/master/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

4)添加復(fù)制master數(shù)據(jù)的用戶reader,供從服務(wù)器使用

[root@aliyun /]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                               NAMES
6af1df686fff        mysql:5.7           "docker-entrypoint..."   5 seconds ago       Up 4 seconds        0.0.0.0:3306->3306/tcp, 33060/tcp   master
[root@aliyun /]# docker exec -it master /bin/bash
root@41d795785db1:/# mysql -u root -p123456

mysql> GRANT REPLICATION SLAVE ON *.* to 'reader'@'%' identified by 'reader';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

5)創(chuàng)建從服務(wù)器所需目錄,編輯配置文件

mkdir /usr/local/mysqlData/slave/cnf -p
mkdir /usr/local/mysqlData/slave/cnf -p
vim /usr/local/mysqlData/slave/cnf/mysql.cnf
[mysqld]
## 設(shè)置server_id,注意要唯一
server-id=2
## 開啟binlog,以備Slave作為其它Slave的Master時使用
log-bin=mysql-slave-bin
## relay_log配置中繼日志
relay_log=edu-mysql-relay-bin
## 如果需要同步函數(shù)或者存儲過程
log_bin_trust_function_creators=true
## binlog緩存
binlog_cache_size=1M
## binlog格式(mixed、statement、row,默認(rèn)格式是statement)
binlog_format=mixed
## 跳過主從復(fù)制中遇到的所有錯誤或指定類型的錯誤,避免slave端復(fù)制中斷
## 如:1062錯誤是指一些主鍵重復(fù),1032錯誤是因?yàn)橹鲝臄?shù)據(jù)庫數(shù)據(jù)不一致
slave_skip_errors=1062

6)創(chuàng)建并運(yùn)行mysql從服務(wù)器

docker run -itd -p 3307:3306 --name slaver -v /usr/local/mysqlData/slave/cnf:/etc/mysql/conf.d -v /usr/local/mysqlData/slave/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7

7)在從服務(wù)器上配置連接主服務(wù)器的信息

首先主服務(wù)器上查看master_log_file、master_log_pos兩個參數(shù),然后切換到從服務(wù)器上進(jìn)行主服務(wù)器的連接信息的設(shè)置

主服務(wù)上執(zhí)行:

root@6af1df686fff:/# mysql -u root -p123456

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 |      591 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

docker查看主服務(wù)器容器的ip地址

[root@aliyun /]# docker inspect --format='{{.NetworkSettings.IPAddress}}' master
172.17.0.2

從服務(wù)器上執(zhí)行:

[root@aliyun /]# docker exec -it slaver /bin/bash
root@fe8b6fc2f1ca:/# mysql -u root -p123456  

mysql> change master to master_host='172.17.0.2',master_user='reader',master_password='reader',master_log_file='mysql-bin.000003',master_log_pos=591;

8)從服務(wù)器啟動I/O 線程和SQL線程

mysql> start slave;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.17.0.2
                  Master_User: reader
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 591
               Relay_Log_File: edu-mysql-relay-bin.000002
                Relay_Log_Pos: 320
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes

Slave_IO_Running: Yes,Slave_SQL_Running: Yes即表示啟動成功

2)、binlog和redo log回顧

1)redo log(重做日志)

InnoDB首先將redo log放入到redo log buffer,然后按一定頻率將其刷新到redo log file

下列三種情況下會將redo log buffer刷新到redo log file:

  • Master Thread每一秒將redo log buffer刷新到redo log file
  • 每個事務(wù)提交時會將redo log buffer刷新到redo log file
  • 當(dāng)redo log緩沖池剩余空間小于1/2時,會將redo log buffer刷新到redo log file

MySQL里常說的WAL技術(shù),全稱是Write Ahead Log,即當(dāng)事務(wù)提交時,先寫redo log,再修改頁。也就是說,當(dāng)有一條記錄需要更新的時候,InnoDB會先把記錄寫到redo log里面,并更新Buffer Pool的page,這個時候更新操作就算完成了

Buffer Pool是物理頁的緩存,對InnoDB的任何修改操作都會首先在Buffer Pool的page上進(jìn)行,然后這樣的頁將被標(biāo)記為臟頁并被放到專門的Flush List上,后續(xù)將由專門的刷臟線程階段性的將這些頁面寫入磁盤

InnoDB的redo log是固定大小的,比如可以配置為一組4個文件,每個文件的大小是1GB,循環(huán)使用,從頭開始寫,寫到末尾就又回到開頭循環(huán)寫(順序?qū)?,?jié)省了隨機(jī)寫磁盤的IO消耗)

Write Pos是當(dāng)前記錄的位置,一邊寫一邊后移,寫到第3號文件末尾后就回到0號文件開頭。Check Point是當(dāng)前要擦除的位置,也是往后推移并且循環(huán)的,擦除記錄前要把記錄更新到數(shù)據(jù)文件

Write Pos和Check Point之間空著的部分,可以用來記錄新的操作。如果Write Pos追上Check Point,這時候不能再執(zhí)行新的更新,需要停下來擦掉一些記錄,把Check Point推進(jìn)一下

當(dāng)數(shù)據(jù)庫發(fā)生宕機(jī)時,數(shù)據(jù)庫不需要重做所有的日志,因?yàn)镃heck Point之前的頁都已經(jīng)刷新回磁盤,只需對Check Point后的redo log進(jìn)行恢復(fù),從而縮短了恢復(fù)的時間

當(dāng)緩沖池不夠用時,根據(jù)LRU算法會溢出最近最少使用的頁,若此頁為臟頁,那么需要強(qiáng)制執(zhí)行Check Point,將臟頁刷新回磁盤

2)binlog(歸檔日志)

MySQL整體來看就有兩塊:一塊是Server層,主要做的是MySQL功能層面的事情;還有一塊是引擎層,負(fù)責(zé)存儲相關(guān)的具體事宜。redo log是InnoDB引擎特有的日志,而Server層也有自己的日志,稱為binlog

binlog記錄了對MySQL數(shù)據(jù)庫執(zhí)行更改的所有操作,不包括SELECT和SHOW這類操作,主要作用是用于數(shù)據(jù)庫的主從復(fù)制及數(shù)據(jù)的增量恢復(fù)

使用mysqldump備份時,只是對一段時間的數(shù)據(jù)進(jìn)行全備,但是如果備份后突然發(fā)現(xiàn)數(shù)據(jù)庫服務(wù)器故障,這個時候就要用到binlog的日志了

binlog格式有三種:STATEMENT,ROW,MIXED

  • STATEMENT模式:binlog里面記錄的就是SQL語句的原文。優(yōu)點(diǎn)是并不需要記錄每一行的數(shù)據(jù)變化,減少了binlog日志量,節(jié)約IO,提高性能。缺點(diǎn)是在某些情況下會導(dǎo)致master-slave中的數(shù)據(jù)不一致
  • ROW模式:不記錄每條SQL語句的上下文信息,僅需記錄哪條數(shù)據(jù)被修改了,修改成什么樣了,解決了STATEMENT模式下出現(xiàn)master-slave中的數(shù)據(jù)不一致。缺點(diǎn)是會產(chǎn)生大量的日志,尤其是alter table的時候會讓日志暴漲
  • MIXED模式:以上兩種模式的混合使用,一般的復(fù)制使用STATEMENT模式保存binlog,對于STATEMENT模式無法復(fù)制的操作使用ROW模式保存binlog,MySQL會根據(jù)執(zhí)行的SQL語句選擇日志保存方式

3)redo log和binlog日志的不同

  • redo log是InnoDB引擎特有的;binlog是MySQL的Server層實(shí)現(xiàn)的,所有引擎都可以使用
  • redo log是物理日志,記錄的是在某個數(shù)據(jù)也上做了什么修改;binlog是邏輯日志,記錄的是這個語句的原始邏輯,比如給ID=2這一行的c字段加1
  • redo log是循環(huán)寫的,空間固定會用完;binlog是可以追加寫入的,binlog文件寫到一定大小后會切換到下一個,并不會覆蓋以前的日志

4)兩階段提交

create table T(ID int primary key, c int);
update T set c=c+1 where ID=2;

執(zhí)行器和InnoDB引擎在執(zhí)行這個update語句時的內(nèi)部流程:

  • 執(zhí)行器先找到引擎取ID=2這一行。ID是主鍵,引擎直接用樹搜索找到這一行。如果ID=2這一行所在的數(shù)據(jù)也本來就在內(nèi)存中,就直接返回給執(zhí)行器;否則,需要先從磁盤讀入內(nèi)存,然后再返回
  • 執(zhí)行器拿到引擎給的行數(shù)據(jù),把這個值加上1,得到新的一行數(shù)據(jù),再調(diào)用引擎接口寫入這行新數(shù)據(jù)
  • 引擎將這行新數(shù)據(jù)更新到內(nèi)存中,同時將這個更新操作記錄到redo log里面,此時redo log處于prepare狀態(tài)。然后告知執(zhí)行器執(zhí)行完成了,隨時可以提交事務(wù)
  • 執(zhí)行器生成這個操作的binlog,并把binlog寫入磁盤
  • 執(zhí)行器調(diào)用引擎的提交事務(wù)接口,引擎把剛剛寫入的redo log改成提交狀態(tài),更新完成

update語句的執(zhí)行流程圖如下,圖中淺色框表示在InnoDB內(nèi)部執(zhí)行的,深色框表示是在執(zhí)行器中執(zhí)行的

將redo log的寫入拆成了兩個步驟:prepare和commit,這就是兩階段提交

3)、MySQL主從復(fù)制原理

從庫B和主庫A之間維持了一個長連接。主庫A內(nèi)部有一個線程,專門用于服務(wù)從庫B的這個長連接。一個事務(wù)日志同步的完整過程如下:

  • 在從庫B上通過change master命令,設(shè)置主庫A的IP、端口、用戶名、密碼,以及要從哪個位置開始請求binlog,這個位置包含文件名和日志偏移量
  • 在從庫B上執(zhí)行start slave命令,這時從庫會啟動兩個線程,就是圖中的I/O線程和SQL線程。其中I/O線程負(fù)責(zé)與主庫建立連接
  • 主庫A校驗(yàn)完用戶名、密碼后,開始按照從庫B傳過來的位置,從本地讀取binlog,發(fā)給B
  • 從庫B拿到binlog后,寫到本地文件,稱為中繼日志
  • SQL線程讀取中繼日志,解析出日志里的命令,并執(zhí)行

由于多線程復(fù)制方案的引入,SQL線程演化成了多個線程

主從復(fù)制不是完全實(shí)時地進(jìn)行同步,而是異步實(shí)時。這中間存在主從服務(wù)之間的執(zhí)行延時,如果主服務(wù)器的壓力很大,則可能導(dǎo)致主從服務(wù)器延時較大

3、Sharding-Jdbc實(shí)現(xiàn)讀寫分離

1)、新建Springboot工程,引入相關(guān)依賴

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.4</version>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>com.alibaba</groupId>
        <artifactId>druid-spring-boot-starter</artifactId>
        <version>1.1.21</version>
    </dependency>
    <dependency>
        <groupId>org.apache.shardingsphere</groupId>
        <artifactId>sharding-jdbc-spring-boot-starter</artifactId>
        <version>4.0.0-RC1</version>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

2)、application.properties配置文件

spring.main.allow-bean-definition-overriding=true
#顯示sql
spring.shardingsphere.props.sql.show=true

#配置數(shù)據(jù)源
spring.shardingsphere.datasource.names=ds1,ds2,ds3

#master-ds1數(shù)據(jù)庫連接信息
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://47.101.58.187:3306/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=123456
spring.shardingsphere.datasource.ds1.maxPoolSize=100
spring.shardingsphere.datasource.ds1.minPoolSize=5

#slave-ds2數(shù)據(jù)庫連接信息
spring.shardingsphere.datasource.ds2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds2.url=jdbc:mysql://47.101.58.187:3307/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds2.username=root
spring.shardingsphere.datasource.ds2.password=123456
spring.shardingsphere.datasource.ds2.maxPoolSize=100
spring.shardingsphere.datasource.ds2.minPoolSize=5

#slave-ds3數(shù)據(jù)庫連接信息
spring.shardingsphere.datasource.ds3.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds3.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds3.url=jdbc:mysql://47.101.58.187:3307/sharding-jdbc-db?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds3.username=root
spring.shardingsphere.datasource.ds3.password=123456
spring.shardingsphere.datasource.ds.maxPoolSize=100
spring.shardingsphere.datasource.ds3.minPoolSize=5

#配置默認(rèn)數(shù)據(jù)源ds1 默認(rèn)數(shù)據(jù)源,主要用于寫
spring.shardingsphere.sharding.default-data-source-name=ds1
#配置主從名稱
spring.shardingsphere.masterslave.name=ms
#置主庫master,負(fù)責(zé)數(shù)據(jù)的寫入
spring.shardingsphere.masterslave.master-data-source-name=ds1
#配置從庫slave節(jié)點(diǎn)
spring.shardingsphere.masterslave.slave-data-source-names=ds2,ds3
#配置slave節(jié)點(diǎn)的負(fù)載均衡均衡策略,采用輪詢機(jī)制
spring.shardingsphere.masterslave.load-balance-algorithm-type=round_robin

#整合mybatis的配置
mybatis.type-aliases-package=com.ppdai.shardingjdbc.entity

3)、創(chuàng)建t_user表

CREATE TABLE `t_user` (
  `id` int(11NOT NULL AUTO_INCREMENT,
  `nickname` varchar(100DEFAULT NULL,
  `password` varchar(100DEFAULT NULL,
  `sex` int(11DEFAULT NULL,
  `birthday` varchar(50DEFAULT NULL,
  PRIMARY KEY (`id`)
ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8mb4;

4)、定義Controller、Mapper、Entity

@Data
public class User {
    private Integer id;

    private String nickname;

    private String password;

    private Integer sex;

    private String birthday;
}
@RestController
@RequestMapping("/api/user")
public class UserController {
    @Autowired
    private UserMapper userMapper;

    @PostMapping("/save")
    public String addUser() {
        User user = new User();
        user.setNickname("zhangsan" + new Random().nextInt());
        user.setPassword("123456");
        user.setSex(1);
        user.setBirthday("1997-12-03");
        userMapper.addUser(user);
        return "success";
    }

    @GetMapping("/findUsers")
    public List<User> findUsers() {
        return userMapper.findUsers();
    }
}
public interface UserMapper {

    @Insert("insert into t_user(nickname,password,sex,birthday) values(#{nickname},#{password},#{sex},#{birthday})")
    void addUser(User user);

    @Select("select * from t_user")
    List<User> findUsers();
}

5)、驗(yàn)證

啟動日志中三個數(shù)據(jù)源初始化成功:

調(diào)用http://localhost:8080/api/user/save一直進(jìn)入到ds1主節(jié)點(diǎn)

調(diào)用http://localhost:8080/api/user/findUsers一直進(jìn)入到ds2、ds3節(jié)點(diǎn),并且輪詢進(jìn)入

4、MySQL分庫分表原理

1)、分庫分表

水平拆分:同一個表的數(shù)據(jù)拆到不同的庫不同的表中??梢愿鶕?jù)時間、地區(qū)或某個業(yè)務(wù)鍵維度,也可以通過hash進(jìn)行拆分,最后通過路由訪問到具體的數(shù)據(jù)。拆分后的每個表結(jié)構(gòu)保持一致

垂直拆分:就是把一個有很多字段的表給拆分成多個表,或者是多個庫上去。每個庫表的結(jié)構(gòu)都不一樣,每個庫表都包含部分字段。一般來說,可以根據(jù)業(yè)務(wù)維度進(jìn)行拆分,如訂單表可以拆分為訂單、訂單支持、訂單地址、訂單商品、訂單擴(kuò)展等表;也可以,根據(jù)數(shù)據(jù)冷熱程度拆分,20%的熱點(diǎn)字段拆到一個表,80%的冷字段拆到另外一個表

2)、不停機(jī)分庫分表數(shù)據(jù)遷移

一般數(shù)據(jù)庫的拆分也是有一個過程的,一開始是單表,后面慢慢拆成多表。那么我們就看下如何平滑的從MySQL單表過度到MySQL的分庫分表架構(gòu)

  • 利用MySQL+Canal做增量數(shù)據(jù)同步,利用分庫分表中間件,將數(shù)據(jù)路由到對應(yīng)的新表中
  • 利用分庫分表中間件,全量數(shù)據(jù)導(dǎo)入到對應(yīng)的新表中
  • 通過單表數(shù)據(jù)和分庫分表數(shù)據(jù)兩兩比較,更新不匹配的數(shù)據(jù)到新表中
  • 數(shù)據(jù)穩(wěn)定后,將單表的配置切換到分庫分表配置上

5、Sharding-Jdbc實(shí)現(xiàn)分庫分表

1)、邏輯表

用戶數(shù)據(jù)根據(jù)訂單id%2拆分為2個表,分別是:t_order0和t_order1。他們的邏輯表名是:t_order

多數(shù)據(jù)源相同表:

#多數(shù)據(jù)源$->{0..N}.邏輯表名$->{0..N} 相同表
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}

多數(shù)據(jù)源不同表:

#多數(shù)據(jù)源$->{0..N}.邏輯表名$->{0..N} 不同表
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds0.t_order$->{0..1},ds1.t_order$->{2..4}

單庫分表:

#單數(shù)據(jù)源的配置方式
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds0.t_order$->{0..4}

全部手動指定:

spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds0.t_order0,ds1.t_order0,ds0.t_order1,ds1.t_order1

2)、inline分片策略

spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}
#數(shù)據(jù)源分片策略
spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.sharding-column=user_id
#數(shù)據(jù)源分片算法
spring.shardingsphere.sharding.tables.t_order.database-strategy.inline.algorithm-expression=ds$->{user_id%2}
#表分片策略
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.sharding-column=order_id
#表分片算法
spring.shardingsphere.sharding.tables.t_order.table-strategy.inline.algorithm-expression=t_order$->{order_id%2}

上面的配置通過user_id%2來決定具體數(shù)據(jù)源,通過order_id%2來決定具體表

insert into t_order(user_id,order_id) values(2,3),user_id%2 = 0使用數(shù)據(jù)源ds0,order_id%2 = 1使用t_order1,insert語句最終操作的是數(shù)據(jù)源ds0的t_order1表。

另外,歡迎關(guān)注公眾號Java筆記蝦,后臺回復(fù)“后端面試”,送你一份面試題寶典!

3)、分布式主鍵配置

Sharding-Jdbc可以配置分布式主鍵生成策略。默認(rèn)使用雪花算法(snowflake),生成64bit的長整型數(shù)據(jù),也支持UUID的方式

#主鍵的列名
spring.shardingsphere.sharding.tables.t_order.key-generator.column=id
#主鍵生成策略
spring.shardingsphere.sharding.tables.t_order.key-generator.type=SNOWFLAKE

4)、inline分片策略實(shí)現(xiàn)分庫分表

需求:

對1000w的用戶數(shù)據(jù)進(jìn)行分庫分表,對用戶表的數(shù)據(jù)進(jìn)行分表和分庫的操作。根據(jù)年齡奇數(shù)存儲在t_user1,偶數(shù)t_user0,同時性別奇數(shù)存儲在ds1,偶數(shù)ds0

表結(jié)構(gòu):

CREATE TABLE `t_user0` (
  `id` bigint(20DEFAULT NULL,
  `nickname` varchar(200DEFAULT NULL,
  `password` varchar(200DEFAULT NULL,
  `age` int(11DEFAULT NULL,
  `sex` int(11DEFAULT NULL,
  `birthday` varchar(100DEFAULT NULL
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

CREATE TABLE `t_user1` (
  `id` bigint(20DEFAULT NULL,
  `nickname` varchar(200DEFAULT NULL,
  `password` varchar(200DEFAULT NULL,
  `age` int(11DEFAULT NULL,
  `sex` int(11DEFAULT NULL,
  `birthday` varchar(100DEFAULT NULL
ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

兩個數(shù)據(jù)庫中都包含t_user0和t_user1兩張表

application.properties:

spring.main.allow-bean-definition-overriding=true
#顯示sql
spring.shardingsphere.props.sql.show=true

#配置數(shù)據(jù)源
spring.shardingsphere.datasource.names=ds0,ds1

#ds0數(shù)據(jù)庫連接信息
spring.shardingsphere.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds0.url=jdbc:mysql://47.101.58.187:3306/t_user_db0?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds0.username=root
spring.shardingsphere.datasource.ds0.password=123456
spring.shardingsphere.datasource.ds0.maxPoolSize=100
spring.shardingsphere.datasource.ds0.minPoolSize=5

#ds1數(shù)據(jù)庫連接信息
spring.shardingsphere.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds1.url=jdbc:mysql://47.101.58.187:3306/t_user_db1?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai
spring.shardingsphere.datasource.ds1.username=root
spring.shardingsphere.datasource.ds1.password=123456
spring.shardingsphere.datasource.ds1.maxPoolSize=100
spring.shardingsphere.datasource.ds1.minPoolSize=5

#整合mybatis的配置
mybatis.type-aliases-package=com.ppdai.shardingjdbc.entity

spring.shardingsphere.sharding.tables.t_user.actual-data-nodes=ds$->{0..1}.t_user$->{0..1}
#數(shù)據(jù)源分片策略
spring.shardingsphere.sharding.tables.t_user.database-strategy.inline.sharding-column=sex
#數(shù)據(jù)源分片算法
spring.shardingsphere.sharding.tables.t_user.database-strategy.inline.algorithm-expression=ds$->{sex%2}
#表分片策略
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.sharding-column=age
#表分片算法
spring.shardingsphere.sharding.tables.t_user.table-strategy.inline.algorithm-expression=t_user$->{age%2}
#主鍵的列名
spring.shardingsphere.sharding.tables.t_user.key-generator.column=id
spring.shardingsphere.sharding.tables.t_user.key-generator.type=SNOWFLAKE

測試類:

@SpringBootTest
class ShardingJdbcApplicationTests {

    @Autowired
    private UserMapper userMapper;

    /**
     * sex:奇數(shù)
     * age:奇數(shù)
     * ds1.t_user1
     */

    @Test
    public void test01() {
        User user = new User();
        user.setNickname("zhangsan" + new Random().nextInt());
        user.setPassword("123456");
        user.setAge(17);
        user.setSex(1);
        user.setBirthday("1997-12-03");
        userMapper.addUser(user);
    }

    /**
     * sex:奇數(shù)
     * age:偶數(shù)
     * ds1.t_user0
     */

    @Test
    public void test02() {
        User user = new User();
        user.setNickname("zhangsan" + new Random().nextInt());
        user.setPassword("123456");
        user.setAge(18);
        user.setSex(1);
        user.setBirthday("1997-12-03");
        userMapper.addUser(user);
    }

    /**
     * sex:偶數(shù)
     * age:奇數(shù)
     * ds0.t_user1
     */

    @Test
    public void test03() {
        User user = new User();
        user.setNickname("zhangsan" + new Random().nextInt());
        user.setPassword("123456");
        user.setAge(17);
        user.setSex(2);
        user.setBirthday("1997-12-03");
        userMapper.addUser(user);
    }

    /**
     * sex:偶數(shù)
     * age:偶數(shù)
     * ds0.t_user0
     */

    @Test
    public void test04() {
        User user = new User();
        user.setNickname("zhangsan" + new Random().nextInt());
        user.setPassword("123456");
        user.setAge(18);
        user.setSex(2);
        user.setBirthday("1997-12-03");
        userMapper.addUser(user);
    }
}

官方文檔:

  • https://shardingsphere.apache.org/document/current/cn/overview/

視頻資料:

  • https://www.bilibili.com/video/BV1ei4y1K7dn
(感謝閱讀,希望對你所有幫助)
來源:blog.csdn.net/qq_40378034/article/details/115264837

推薦閱讀:

世界的真實(shí)格局分析,地球人類社會底層運(yùn)行原理

不是你需要中臺,而是一名合格的架構(gòu)師(附各大廠中臺建設(shè)PPT)

企業(yè)IT技術(shù)架構(gòu)規(guī)劃方案

論數(shù)字化轉(zhuǎn)型——轉(zhuǎn)什么,如何轉(zhuǎn)?

企業(yè)10大管理流程圖,數(shù)字化轉(zhuǎn)型從業(yè)者必備!

【中臺實(shí)踐】華為大數(shù)據(jù)中臺架構(gòu)分享.pdf

華為的數(shù)字化轉(zhuǎn)型方法論

華為如何實(shí)施數(shù)字化轉(zhuǎn)型(附PPT)

超詳細(xì)280頁Docker實(shí)戰(zhàn)文檔!開放下載

華為大數(shù)據(jù)解決方案(PPT)

瀏覽 35
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 久久精品操| 激情人妻AV| xxxx色| 欧美一级AAA大片免费观看| 无码高清| 国产又粗又长| 亚洲欧美日韩一区二区| 日韩无码免费看| 春色AV| 五月天天| 黄色片网站视频| 国产精品三级在线| 亚洲性精| 一区二区三区AV| 日本无码视频在线观看| 性无码一区二区三区无码免费| 俺去俺来WWW色官方| 国产足交视频| 成人影视在线免费观看| 在线观看不卡av| 亚洲美女视频在线| 欧美性爱香蕉视频| 亚洲无码免费| 亚洲精品久| 日本无码电影| 日本高清一区| 日韩高清无码专区| 久久精品成人导航| 亚洲第九页| 日韩欧美成人片| 人人爽人人操人人爱| 俺去骚| 国产一区二区久久| 加勒比DVD手机在线播放观看视频| 18禁在线播放| 人人妻人人澡人人爽人人| 午夜理论片| 成人肏屄视频| 成人无码区免费A片在线软件| 性九九九九九九| sm国产在线调教视频| 成人欧美一区二区三区在线观看| 国产a毛一级,a毛一级| 91色视频在线观看| 免费人成年激情视频在线观看| 日韩高清无码免费| 一区二区三区免费观看| 日韩黄色电影网站| 国产一区免费| 欧美黄色小视频| 成人爽a毛片一区二区免费| AV黄色在线观看| 在线毛片网站| 国产日韩欧美一区| 日韩精品免费观看| av在线观看中文字幕| 国产h在线| 一区二区三区网站| 亚洲欧洲日韩综合| 亚洲成人免费在线| 亚洲乱伦网站| 亚洲砖区区免费| 精品亚洲成人| 91麻豆精品在线观看| 97pao| 97资源在线视频| 三级AV在线观看| 韩国一区二区在线观看| 18禁在线看| 91精品久久久久久综合五月天| 99久久人妻精品免费二区| 俺也去俺也来| 免费成人国产| 成人视频高清无码| 精品色片| 国产精品一级A片| 青青草国产在线视频| 麻豆精品在线播放| 无套内射免费视频| 一道本激情视频| 艹逼逼视频| 亚洲天堂AV2025| 欧美性爱免费在线视频| 五月天深爱激情网| 台湾AV在线| 亚洲中文AV在线| 蜜臀av网站| 二区视频在线| 欧美性猛交ⅩXXX乱大交| 69福利| 亚洲无码中文视频| 亚洲另类图片小说| 亚洲乱码一区二区三区| 黄色三级av| 日韩一级成人片| 探花在线综合| 中文字幕亚洲欧美| 日本一区免费| 影音先锋日韩精品| 春色av| 欧美在线综合| 久久久久久亚洲Av无码精品专口| 一区二区AV| 五月丁香婷婷综合| 雾水情缘电影港片| 欧美A级视频在线观看| 国产久久免费视频| 日韩AV无码专区亚洲AV紧身裤| 久久综合婷婷| 天天干,天天日| 一区二区三区Av| 国产人妻AV| 欧美熟妇一区二区三区| 夜夜撸天天干| 无码视频韩国| 久草青青草| 国产黄A片免费网站免费| 亚洲毛片在线观看| 韩国精品在线观看| 辽宁模特张雪馨视频最新| 午夜福利aaa| 老熟女搡BBBB搡BBBB视频| AV电影在线免费观看| 北条麻妃九九九在线视频| 亚洲图片在线| 欧美黄色一级网站| 97人妻精品一区二区三区免| WWW.99热| 激情综合视频| 久久永久免费视频| 日韩精品一区二区三区黄冈站长 | 在线欧美日韩| 成人性爱视频在线播放| 亚洲人天堂| 巨爆乳肉感一区二区三区| 中文字幕日本在线| 亚洲色图一区二区三区| 亚洲无码A片在线观看| 黄色av天堂| 色五月在线| 伊人乱伦| 91迷奸| 三级片在线观看网站| 亚洲一级av无码毛片精品| 国产精品久久免费视频| 国产91在线拍揄自揄拍无码九色| 91一起草高清资源| 五月天精品视频| 最新中文字幕在线观看视频| 亚洲美女视频在线观看| 翔田AV无码秘三区| 2021无码| 黄色A片视频| 人人摸人人爱| 国产精品伦理| 欧美性一区| 五月丁香婷婷在线观看| 国产乱╳╳AⅤ毛片| 黄色视频免费在线观看网站| 精品成人视频| 中文字幕视频网站| 成人做爰黄A片免费看直播室动漫| 91人人澡人人爽人人看| 国产一级a片| 一级黄色录相片| 国产精品一级A片| 欧美香蕉在线| 日本爱爱免费播放视频| 欧美a片在线| 91人妻人人澡人人爽人人精品乱| 国产黄A片免费网站免费| 蜜臀91| 国产激情在线| 日本在线不卡一区| 国产精品人人| 天堂成人网| 国产黄色网页| 青青操在线视频| 9991区二区三区四区| 美女少妇激情BBBB| 伊人伊人网| 天天干妹子| 色情片在线观看| 久久国产性爱| 一级黄色片免费看| 久久久久亚洲AV成人片| 国产精品一卡二卡三卡| 久久成人在线| 日韩欧美精品18| 七十路の高齡熟妇无码| 欧美一级性爱| 在线综合国产欧美| 乱伦一级黄片| 美女特黄视频| 欧一美一色一伦一A片| 一区日韩| a片在线免费观看| 欧美精品一区二区少妇免费A片| 五月天婷婷在线观看视频| 深夜福利一区二区| 逼逼网| 七十路の高齢熟妇无码| 亚洲无码免费看| 手机在线成人视频| 精品一区二区免费视频| 久操亚洲| 蜜桃av色偷偷av老熟女| 国产自偷自拍| 无码不卡视频在线| 久久97人妻AⅤ无码一区| 在线观看日韩av| 91爱爱网| 欧美日日| 黄色a在线| 日无码视频| 色情片在线观看| 亚洲无码高清视频在线观看| 国产情趣网站| 91国产精品在线视频| 欧美国产综合在线| 精品国产污污免费网站入口| 国产黄色片在线观看| 国产免费成人| 免费观看A级毛片| 东京热无码一区| 国产精品一卡二卡| 黑人操逼| 国产亚洲婷婷| 日本免费在线视频| 北条麻妃被操| 超碰在线| 黄色视频大全免费看| 日韩激情一区| 少妇人妻无码| 欧美日韩中文字幕| 女人BBBB| 亚洲成a| 夜夜草视频| 日本欧美在线观看高清| 亚洲射射| a片免费在线| 老司机免费福利视频| 久操视频在线观看| 探花在线播放| 久久久久9| 日韩操b| 免费aa片| 竹菊传媒一区二区三区| 天天日天天射天天操| 中字无码| 亚洲黄色激情| 91吴梦梦一区二区传媒| 免费性爱视频网站| 久久久女女女女999久久| 中文字幕巨肉乱码中文乱码| 日韩免费一级| 亚洲欧美日韩在线| 丰满人妻一区二区三区46| 超碰人人爱国产视| 99香蕉视频| 大地资源第三页在线观看免费播放最新 | 久久久久久亚洲AV黄床| 高清无码网址| 亚洲热在线| 欧美理伦| 三级黄色视频在线观看| 亚洲天堂2015| 亚洲91黄色片| 亚洲一卡二卡三卡四卡免| 中文字幕久久人妻无码精品蜜桃| 亚洲天堂在线视频| 欧美日韩综合网| 亚欧洲精品| 超碰在线99| 噼里啪啦免费观看视频大全| 精品美女视频在线观看免费软件| 激情操逼| 亚洲无码一区二区三区妃光| 在线观看亚洲专区| 蜜桃视频一区| 国产极品无码| 中文无码日本一级A片人| 综合网亚洲| 亚洲无码免费在线视频| 东方AV在线免费观看| 国产成人三级| 51嘿嘿嘿国产精品伦理| 91黄色在线观看| 美女毛片视频| 亚洲综合一区二区三区| 成人免费毛片蓝莓| 欧美日韩中文字幕| 大香蕉在线视频网| www中文字幕| 国产丝袜AV| 一本色道久久| 蜜桃久久99精品久久久酒店| 老鸭窝久久久| 粉嫩小泬BBBB免费看-百度| 九九色综合| 国产AV二区| 神马午夜精品| 免费看欧美成人A片| 国产愉拍91九色国产愉拍| 免费看黃色AAAAAA片| 西西西444www无码视频| 欧美日韩激情视频| 在线观看国产| 国产精品1区2区3区| 日韩人妻无码中文字幕| 中文字幕永久在线视频v1.0| 爱搞国产| 四虎网站| 先锋资源久久| 亚洲专区视频| 操逼操逼操| 中文无码播放| 男女操逼视频网站免费观看| 怡春院视频| 亚洲免费视频在线播放| 国产午夜成人视频| 97人妻精品一区二区三区视频| 97人妻精品黄网站| 成人网站www污污污网站公司| 国产精成人品| 亚洲男女内射| 久久成人综合| 91夜夜夜| 亚洲视频高清无码| 人人狠狠综合婷婷| 91AV电影网| 中文字幕成人电影| 欧美日韩一区二区在线| 狠狠操AV| 五月天狠狠| 国精产品秘成人一区二| 99成人精品| 影音先锋av资源在线| 91在线观看| 91西安站街老熟女露脸| 亚洲三级片在线播放| 久久久国产AV| 国产无套视频| 不卡无码av| 欧美成人三级在线| 婷婷成人五月天| 日日干综合| 人人操碰成人网| 国产AV播放| 欧美中文字幕在线| 日韩在线观看网址| 久久国产无码| 91ccc| 香蕉久久久| 免费人成在线观看视频播放| 亚洲日本欧美| 日本中文字幕在线免费观看| 国产精品6| 日本欧美中文字幕| 中文字幕免费在线视频| 久久高潮| 无码精品视频在线观看| 欧美成人精品一级| 国产一级a毛一级a做免费图片 | 欧美人操逼一二区| 福利视频三区| 色tv在线| 亚洲天堂高清| 久久午夜无码鲁片午夜精品男男 | 亚洲AV无码久久寂寞少妇多毛| 苍井空无码| 69人人| 男人先锋| 91无码人妻精品1国产四虎| 91热视频| 日韩欧美中文字幕公布| 高清无码网站| 嫩草91| 91探花秘在线播放| 亚洲AV永久无码成人| 小日本91在线观看| 91AV在线电影| 成人av网站在线播放| 91吴梦梦一区二区传媒| 五月天色色小说| 日本内射在线观看| 久草中文在线视频| 91精品导航| 日韩免费看片| 日本免费黄色电影| 屁屁影院CCYYCOM国产| 四川少妇搡bbbbb搡多人| 成人免费网站在线观看| 99操| 日本色电影在线观看| 国产剧情一区二区av在线观看 | 五月人妻| 在线观看无码高清| 美女被操面费网站| 特级黄色毛片| 无码人妻一区二区三区在线视频不卡| 国产精品内射| 日韩精品免费在线观看| 免费人成年激情视频在线观看| 久久精品夜色噜噜亚洲A∨| 国产成人小视频在线观看| 人妻碰碰| 91密臀| 亚洲久久无码| 精品國產一區二區三區久久蜜月| 亚洲www在线| 国产精品色婷婷99久久精品| 国产无码免费在线观看| 91嫩草久久久久久久| 国产精品99久久久久的广告情况| 中文字幕无码影院| 国产一区二区不卡| AV资源网站| 超碰护士| 日韩人妻视频| 精品a片| 国产一级在线观看| 国产黄色视频在线观看免费| 天天干天天上| 成人免费在线观看| 国产视频123区| 五月天婷婷丁香| 成人一级a片| 成人二区三区| 一级黄色免费电影| 99无码精品| 黄色大片免费看| 在线观看免费黄色| 欧美日韩中文在线视频| 久久久久久精| 操屄在线观看| 白浆四溢av| 国产在线视频导航| 无码三级午夜久久人妻| 亚洲天天操| 成人做爰黄A片免费视频网站野外 国产成人午夜精品无码区久久麻豆 | AⅤ在线观看| 一级无码专区| AV在线免费观看网址| 亚洲成av| 无码日韩精品一区二区免费96| a片视频网站| 久久三级片电影| www.干| 黄色片网站免费观看| 精品国产乱子伦一区二区三区,小小扐 | 精品吃奶一区二区三区视频| 久久精品视频在线观看| 国产一a毛一a免费观看| 黄色成人视频网站| 成人区精品一区二区婷婷| 天天爽夜夜爽夜夜爽精品| 逼逼75大秀| 亚洲永久视频| 高清无码视频免费| 狠狠躁夜夜躁人人爽人妻| 久草手机视频| 国产一级片无码| 影音先锋成人| 国产一a毛一a毛A免费| 精品九九九九九| 日韩成人无码全裸视频| 亚洲最大的成人网站| 超碰在线图片| 大香蕉av一区二区三区在线观看 | 国产激情视频在线观看| 欧美伦妇AAAAAA片| 色丁香五月| 西西4444WWW无码视频| 中文字幕一区二区二三区四区| 日韩av无码中文字幕| 国产综合久久| 牛牛精品视频| 日韩色情电影| H版视频| 久久综合热| www.日韩AV| 午夜福利电影无码| 亚洲无码视频免费看| 七六十路の高齢熟妇无码| 黄一区二区| 影音先锋一区二区| 亚洲va中文字幕| 美女扣逼网站| 亚洲国产一区二区在线| 98国产精品| 黄色三级电影| 黄片网址在线观看| 免费一级黄色电影| 婷婷综合五月天| 91视频网站免费观看| 欧美日韩A片欧美日| 久操视频网| AV先锋资源| 亚洲少妇性爱视频| 欧美日韩中文字幕| 日韩无码一区二区三区四区| 好男人av| 国内精品人妻无码久久久影院蜜桃 | 99色视频| 欧美五月激情| 91av一区二区三区| 婷婷激情丁香五月天| 国产人成一区二区三区影院| 成人久久久久一级大黄毛片中国 | 94精品人人人| 91在线视频播放| wwwxxx18| 中文字幕A片| 日韩最新高清无码| 一区二区三区av| 欧美v日韩| 一本大道东京热AV| 九九惹伊人| www.亚洲无码| 国产成人A| 久久婷婷五月综合伊人| 超碰91人人操| 美日韩视频欧美一区二区视频| 啊啊啊网站| 日本久久视频| 在线观看中文字幕一区| 日韩精品一区二区三区四在线播放| 第一色影院| 一区二区日本| 天天爆操| 人人操天天| 亚洲无码免费视频| 一区二区三区四区久久| 日韩精品一区二区在线观看| 日本无码精品| 伊人影院麻豆| 波多野结衣AV在线| 亚洲欧美在线播放| 国产成人无码精品久在线观看| 伊人成人免费视频| 国产,亚洲91| 成人无码在线观看免费视频| 黄色一级片免费看| 国产精品久久久久精| 人人操人人爽人人妻| 淫色综合| 精品乱子伦一区二区三区,亚洲国产成| 中文在线观看视频| 午夜福利91| 国产无码观看| 久碰人妻人妻人妻| 大香蕉最新国产2025| 免费小视频| 欧美亚洲日韩中文字幕| 国产乱子伦-区二区三区熟睡91 | 国产成人三级在线播放| 人妻丝袜中出北条麻妃| 内射少妇18| 中文国产字幕| 久久五月视频| 性BBW| 伊人三级片| 国产A片免费视频| 国产欧美一区二区精品性色超碰| 午夜无码在线| 国产免费a片| 尿在小sao货里面好不好| 特爽特黄特级特色视频| 98无码人妻精品一区二区三区 | 国产精品色哟哟| 欧美亚洲成人精品| 国产激情自拍| 婷婷99狠狠躁天天躁| 91在线无码精品秘入口三人| 免费国产三级片| av不卡在线观看| 亚洲精品久久久久毛片A级牛奶| 五丁香在线观看AV| 欧美天堂在线| 夜夜草视频| 日韩毛片中文字幕| 国产黄网站| 天天操天天日天天射| 一级片在线免费看| 一区二区高清无码视频| 专业操美女视频网站| 亚洲天堂成人| 欧美成人性爱视频| 麻豆av在线观看| 黄色高清无码视频| 日韩成人av在线| 香蕉视频成人在线观看| 欧美操逼大全| 亚洲AV无码一区二区三区少妇 | 日本无码一区二区| 亚洲精品资源| 黄色亚洲视频| 在线看片A| 欧亚AV| 成人做爰黄A片免费| 婷婷亚洲国产| 亚洲黄色av网站| 在线啪| 中文免费高清在线观看视频| 日本A视频| 亚洲免费在线观看视频| 女人一级A片色黄情免费| 成人h在线观看| 91麻豆福利视频| 18禁无码永久免费网站大全| 色悠悠久久综合| 手机AV在线观看| 超碰在线观看免费版| 手机看片福利视频| 天天色网站| 狼人社區91國產精品| 爱福利视频网| 黄视频免费在线观看| 亚洲无码在线免费观看视频| 人人干人人操人人摸| 中文字幕23页| 亚洲小电影在线| 久久精品视频网站| 国产AV播放| 亚洲超碰在线观看| 翔田千里无码AV在线观看| 日韩不卡av| 国产精品男女| 天天日天天干天天爽| AA片免费看| 成人免看一级a一片| 免费中文字幕| 男人天堂AV片| 玩弄大乳乳妾高潮乳喷视频| 国产久久视频| 大香蕉国产在线| 水果派AV解说| 拍拍视频| 欧美黄色影院| 操逼视频在线免费观看| 特级无码| 国产欧美日韩在线观看| 国产区av| 白嫩外女BBWBBWBBW| 在线午夜福利| 无码一道本一区二区无码| 无码成人AV| 无码精品电影| 亚洲午夜久久久久久久久红桃| 波多野结衣无码一区二区| 国产一区二区三区四区五区在线| 丁香五月婷婷啪啪| 91黄色视频网站| www.日批| 先锋影音av资源站| 水果派中文解说AⅤ| 婷婷五月天基地| 中文无码专区| 亚洲无码www| 日韩亚洲欧美在线| 中文字幕国产精品| 免费在线观看黄色片| 婷婷五月丁香色| 国产精品播放| 操逼啦| 91人人看| 国产午夜免费| 亚洲A级片| 67194熟女| 北条麻妃网站| 国产永久免费| 国产91白丝在一线播放| 色男人色天堂| 永久黄网站| 色色成人网| 四房婷婷| 欧美日韩在线免费观看| 色九九| 露脸偷拍AV2025| 高清无码学生妹| 这里只有精品91| 色老板免费精品无码免费视频| 国产综合亚洲精品一区二| 91久久精品国产91久久公交车 | 精品无码秘人妻一区二区三区| www.911国产| 免费看欧美成人A片无码| 亚洲资源站| 黄网站免费观看| 嫩BBB嗓BBBB榛BBBB| 2025av中文字幕| 中文字幕日本电影| 色欲成人AV| a片小视频| 亚洲成av| 色视频免费在线观看| 亚洲天堂大香蕉| 超碰成人AV| 免费肏逼视频| 少妇白洁在线观看| 日本韩国无码| 专区无日本视频高清8| 久久人妻熟女中文字幕av蜜芽| 91久久精品日日躁夜夜躁国产| www.日韩| 欧美国产日韩欧美亚洲国产| 夜夜嗨av无码一区二区三区| 亚洲精品国产成人| 四川BBB操BBB| 亚洲一区二区免费视频| 一区二区A片| 免费69视频看片| 手机看片1024国产| 影音先锋AV在线资源| 2018最好看的中文字幕高清电影| 一本道中文字幕| 欧美日韩精品| 天天干天天日天天操| 51色片| 日本家庭乱伦视频| 一区二区免费在线观看| 日本黄色片视频| 肏屄一区| 成人久久网| 丁香成人五月天| 久久五月婷| 亚洲综合五月天婷婷丁香| 波多野吉衣视频| 777偷窥盗摄00000| 精品无码免费视频| 波多野59部无码喷潮| 婷婷丁香六月天| 苍井空一区二区三区| 免费一级做a爱片毛片A片小说 | 亚洲视频免费播放| 亚洲AV成人无码精在线| av在线资源| 北条麻纪视频| 国产无遮挡又黄又爽又色视频软件| 亚洲无码av中文字幕| 蜜桃传媒av| 中文字幕777| 学生妹一级J人片内射视频| 中文字幕在线字幕中文乱码区别| 91热99| 婷婷男人天堂| 国产污视频在线观看| 欧亚AV| 97色色五月天| 国产怡红院| 无码高清| 91一区二区在线观看| 苍井空视频| 欧美三级一级| 手机在线观看av| 污污污www精品国产网站| 日本三级视频| 被男友内S~高H文| igao在线观看| 日本黄色视频大全| 中文区中文字幕免费看| 农村少妇久久久久久久| 日韩成人综合| 中文字幕在线观看福利视频| 性欧美丰满熟妇XXXX性久久久| 麻豆91蜜桃传媒在线观看| 亚洲狼友视频| 日韩激情片| 亚洲无码三区| 无码一区二区北条| 香蕉视频a| 91福利网址| 亚洲日韩免费观看| 久草视频免费| 中文人妻| 黄色一级片免费在线观看| 九九九视频在线观看| 欧美在线大香蕉| 日韩特级片| 精品成人| 91色五月| 91蝌蚪视频在线播放| 91免费成人电影| 亚洲黄色免费网站| 高清中字无码| 成人动漫免费观看| 亚洲操逼电影| 青草精品| 美女天天操| 三上悠亚一区二区| 大肉大捧视频免费观看| 欧美激情三区| 久久精品三级| 蜜桃秘一二三区最新| 国产精品免费人成网站酒店| 天天舔天天干| 九色国产在线| 大香蕉伊人视频| 麻豆国产成人AV一区二区三区| 成人黄色免费在线| 麻豆久久久久| 成人免费大香蕉| 日本少妇高清视频| 日韩成人无码电影网站| 码人妻免费视频| 五月色综合| 中文字幕久久播放| 日韩精品一二| 福利视频一区二区| 国产VA| 国产精品果冻传媒| 日韩无码黄色视频| 久久色婷婷| 韩国高清无码视频| 初学影院WWWBD英语完整版在线观看| 一大高清日韩| 国产三级片AV| 国产无套视频| 欧美footjob高跟脚交| 少妇性受XXXX黑人XYX性爽| 婷婷综合久久| 熟妇自拍| 欧美美女视频网站| 18禁看网站| 无码一区二区在线观看| 三级片在线看| 国产伊人自拍| 青娱乐| 亚洲色图一区二区三区| 搡BBB搡BBBB搡BBBB-百度| 操碰99| 欧美日本中文字幕| 成人免费无码| 黄色一级aa片| 日日搔AV一区二区三区| 国产性爱在线视频| 影音先锋一区| 先锋资源国产| 天天摸天天日| 国产精品h| 亚洲欧美在线一区| 亚久久久| 午夜香蕉视频| 卡一卡二卡三| 中文字幕巨肉乱码中文乱码 | 西西444WWW大胆无| 亚洲成人黄色在线| 日韩成人网站在线观看| 夜夜操免费视频| 亚洲国产成人在线| 欧日韩在线| 91色噜噜狠狠色婷婷| 蜜桃av秘一区二区三区| 中文字幕av一区| 一二区视频| 德美日三级片在线观看| 少妇做爱特级AAA| 亚洲中文字幕免费视频| 91一区| a片网站在线观看| 欧美三级黄色| 樱桃AV| 啊啊啊亚洲| 新妺妺窝窝777777野外| 五月婷婷激情| 欧美熟妇另类久久久久久不卡 | 亚洲无码在线播放视频| aⅴ视频| 国产精品无码成人AV电影| 婷婷丁香六月天| 91探花足浴店少妇在线| 国产精品99久久免费黑人人妻| 青草久久视频| 五月天激情婷婷| 91精品91久久久中77777| 99久久99久久久精品棕色圆| 中文字幕无码av| 台湾AV在线| 三级网站免费观看| 五月婷婷色| 国产成人精品免高潮在线观看 | 成人天天爽| 婷婷五月一区| 一区二区免费| 18成人网站在线观看| 91干| 九九热播精品| 69成人天堂无码免费| 日韩第一页| 超碰97观看| 国产AV久久| 亚洲第一成人网站| 操逼超碰| 不卡无码在线观看| 特特级毛片| 欧美自拍视频在线| 人妻少妇精品视频| 综合色五月| 日韩无码人妻一区二区|