sharding-jdbc 配置主從及 mysql 主從配置

sharding-jdbc 支持配置主從庫(kù)速蕊,本章主要介紹如何配置主從溜哮,及mysql 主從配置

mysql主從配置參考文章:https://blog.csdn.net/soslinken/article/details/97764119

版本:
springboot: 2.4.1
mybatis-plus-boot-starter: 2.2.0
sharding-jdbc-spring-boot-starter: 4.1.1
druid: 1.2.4

官網(wǎng):https://shardingsphere.apache.org/document/current/cn/user-manual/shardingsphere-jdbc/
Demo gitee: https://gitee.com/old_guys/sharding-test-demo

目錄:

  1. MySQL 主從配置
  2. sharding-jdbc主從配置

MySQL 主從配置

目錄結(jié)構(gòu)

.
├── docker-compose.yml
├── master
│   ├── Dockerfile
│   └── my.cnf
└── slave
    ├── Dockerfile
    └── my.cnf

docker-compose.yml


version: '3'
services:
  mysql-master:
    build:
      context: ./
      dockerfile: master/Dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
    links:
      - mysql-slave-1
      - mysql-slave-2
    ports:
      - "33065:3306"
    restart: always
    hostname: mysql-master
  mysql-slave-1:
    build:
      context: ./
      dockerfile: slave/Dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
    ports:
      - "33066:3306"
    restart: always
    hostname: mysql-slave-1
  mysql-slave-2:
    build:
      context: ./
      dockerfile: slave/Dockerfile
    environment:
      - "MYSQL_ROOT_PASSWORD=root"
    ports:
      - "33067:3306"
    restart: always
    hostname: mysql-slave-2

查看數(shù)據(jù)庫(kù)狀態(tài) 使用navicat 或者命令行都可以

mysql -uroot -h127.0.0.1 -P33066 -p [密碼]
mysql> show master status;
+----------------------------------+----------+--------------+------------------+-------------------+
| File                             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+----------------------------------+----------+--------------+------------------+-------------------+
| replicas-mysql-slave1-bin.000005 |      154 |              | mysql            |                   |
+----------------------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)


配置slave

master_log_file 對(duì)應(yīng) master status 的log 文件名稱
master_log_pos 對(duì)應(yīng) master status 的偏移量

STOP SLAVE;
CHANGE MASTER TO master_host = 'mysql-master',
master_port = 3306,
master_user = 'root',
master_password = 'root',
master_log_file = 'replicas-mysql-bin.000008',
master_log_pos = 11357;
START SLAVE;
SHOW SLAVE STATUS;

查看配置效果腿时,都為yes 才是有效
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

注意傀缩! mysql主從庫(kù)的數(shù)據(jù)庫(kù)必須保證一致后德,如果操作主庫(kù)中 從庫(kù)沒(méi)有的 數(shù)據(jù)庫(kù)表硝全,會(huì)拋異常栖雾,直接導(dǎo)致主從同步失敗。

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mysql-master
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: replicas-mysql-bin.000005
          Read_Master_Log_Pos: 357
               Relay_Log_File: replicas-mysql-relay-bin.000002
                Relay_Log_Pos: 329
        Relay_Master_Log_File: replicas-mysql-bin.000005
             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: 357
              Relay_Log_Space: 545
              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: 100
                  Master_UUID: 95827688-4a4c-11eb-abdc-0242ac130003
             Master_Info_File: /var/lib/mysql/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: 
            Executed_Gtid_Set: 
                Auto_Position: 0
         Replicate_Rewrite_DB: 
                 Channel_Name: 
           Master_TLS_Version: 
1 row in set (0.00 sec)

配置完成之后伟众,操作主庫(kù)析藕,從庫(kù)就會(huì)跟著同步。


sharding-jdbc主從配置

主從配置的時(shí)候類似于邏輯數(shù)據(jù)源

配置實(shí)際的數(shù)據(jù)源
spring.shardingsphere.datasource.names=ds-0,ds-1m,ds-2m,ds-1s1,ds-2s1,ds->1s2,ds-2s2
配置映射的數(shù)據(jù)源
spring.shardingsphere.sharding.master-slave-rules.ds-1.master-data-source->name=ds-1m
spring.shardingsphere.sharding.master-slave-rules.ds-1.slave-data-source->names[0]=ds-1s1
spring.shardingsphere.sharding.master-slave-rules.ds-1.slave-data-source->names[1]=ds-1s2

spring.shardingsphere.sharding.master-slave-rules.ds-2.master-data-source->name=ds-2m
spring.shardingsphere.sharding.master-slave-rules.ds-2.slave-data-source->names=ds-2s1,ds-2s2
使用映射的數(shù)據(jù)源配置分庫(kù)分表
spring.shardingsphere.sharding.tables.test_user.actual-data-nodes=ds-$->>{1..2}.test_user_$->{0..3}
spring.shardingsphere.sharding.tables.test_user.database-strategy.inline.sharding->column=scope
spring.shardingsphere.sharding.tables.test_user.database->strategy.inline.algorithm-expression=ds-$->{scope%2+1}
spring.shardingsphere.sharding.tables.test_user.table-strategy.inline.sharding->column=id
spring.shardingsphere.sharding.tables.test_user.table-strategy.inline.algorithm->expression=test_user_$->{id%4}

完整的環(huán)境變量

spring.shardingsphere.datasource.names=ds-0,ds-1m,ds-2m,ds-1s1,ds-2s1,ds-1s2,ds-2s2

#打開(kāi)sql顯示
spring.shardingsphere.props.sql.show=true

spring.shardingsphere.datasource.ds-0.url=jdbc:mysql://127.0.0.1:3306/ds-0?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-0.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-0.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-0.username=root
spring.shardingsphere.datasource.ds-0.password=root

spring.shardingsphere.datasource.ds-1m.url=jdbc:mysql://192.168.62.165:33065/test_db_01?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-1m.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-1m.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-1m.username=root
spring.shardingsphere.datasource.ds-1m.password=root


spring.shardingsphere.datasource.ds-2m.url=jdbc:mysql://192.168.62.165:33065/test_db_02?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-2m.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-2m.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-2m.username=root
spring.shardingsphere.datasource.ds-2m.password=root

spring.shardingsphere.datasource.ds-1s1.url=jdbc:mysql://192.168.62.165:33066/test_db_01?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-1s1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-1s1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-1s1.username=root
spring.shardingsphere.datasource.ds-1s1.password=root


spring.shardingsphere.datasource.ds-2s1.url=jdbc:mysql://192.168.62.165:33066/test_db_02?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-2s1.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-2s1.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-2s1.username=root
spring.shardingsphere.datasource.ds-2s1.password=root

spring.shardingsphere.datasource.ds-1s2.url=jdbc:mysql://192.168.62.165:33067/test_db_01?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-1s2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-1s2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-1s2.username=root
spring.shardingsphere.datasource.ds-1s2.password=root


spring.shardingsphere.datasource.ds-2s2.url=jdbc:mysql://192.168.62.165:33067/test_db_02?useUnicode=true&characterEncoding=utf8&useSSL=false&allowMultiQueries=true&serverTimezone=GMT
spring.shardingsphere.datasource.ds-2s2.type=com.alibaba.druid.pool.DruidDataSource
spring.shardingsphere.datasource.ds-2s2.driver-class-name=com.mysql.cj.jdbc.Driver
spring.shardingsphere.datasource.ds-2s2.username=root
spring.shardingsphere.datasource.ds-2s2.password=root

## 自定義參數(shù)
my-sharding-table.config=0,1,2,3

## demo2_test_user 如果有多個(gè)數(shù)據(jù)源凳厢,但是不配置(配置失效)的時(shí)候账胧,就會(huì)隨機(jī)獲取一個(gè)數(shù)據(jù)源進(jìn)行處理竞慢。
spring.shardingsphere.sharding.tables.demo2_test_user.actual-data-nodes=ds-0.test_user
##test_user
spring.shardingsphere.sharding.tables.test_user.actual-data-nodes=ds-$->{1..2}.test_user_$->{0..3}
spring.shardingsphere.sharding.tables.test_user.database-strategy.inline.sharding-column=scope
spring.shardingsphere.sharding.tables.test_user.database-strategy.inline.algorithm-expression=ds-$->{scope%2+1}
spring.shardingsphere.sharding.tables.test_user.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.test_user.table-strategy.inline.algorithm-expression=test_user_$->{id%4}
##course
spring.shardingsphere.sharding.tables.course.actual-data-nodes=ds-$->{[1,2]}.course_$->{[${my-sharding-table.config}]}
spring.shardingsphere.sharding.tables.course.database-strategy.inline.sharding-column=scope
spring.shardingsphere.sharding.tables.course.database-strategy.inline.algorithm-expression=ds-$->{scope%2+1}
spring.shardingsphere.sharding.tables.course.table-strategy.inline.sharding-column=id
spring.shardingsphere.sharding.tables.course.table-strategy.inline.algorithm-expression=course_$->{id%4}
##course_selected
spring.shardingsphere.sharding.tables.course_selected.actual-data-nodes=ds-$->{1..2}.course_selected_$->{0..3}
spring.shardingsphere.sharding.tables.course_selected.database-strategy.inline.sharding-column=scope
spring.shardingsphere.sharding.tables.course_selected.database-strategy.inline.algorithm-expression=ds-$->{scope%2+1}
spring.shardingsphere.sharding.tables.course_selected.table-strategy.inline.sharding-column=user_id
spring.shardingsphere.sharding.tables.course_selected.table-strategy.inline.algorithm-expression=course_selected_$->{user_id%4}

spring.shardingsphere.sharding.binding-tables[0]=test_user,course_selected,course


spring.shardingsphere.sharding.master-slave-rules.ds-1.master-data-source-name=ds-1m
spring.shardingsphere.sharding.master-slave-rules.ds-1.slave-data-source-names[0]=ds-1s1
spring.shardingsphere.sharding.master-slave-rules.ds-1.slave-data-source-names[1]=ds-1s2

spring.shardingsphere.sharding.master-slave-rules.ds-2.master-data-source-name=ds-2m
spring.shardingsphere.sharding.master-slave-rules.ds-2.slave-data-source-names=ds-2s1,ds-2s2
結(jié)果

查詢會(huì)直接根據(jù)從庫(kù)進(jìn)行負(fù)載均衡

2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Logic SQL: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user a JOIN course_selected b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : SQLStatement: SelectStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.SelectStatement@34e990cc, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@c82d925), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@c82d925, projectionsContext=ProjectionsContext(startIndex=7, stopIndex=76, distinctRow=false, projections=[ColumnProjection(owner=a, name=id, alias=Optional.empty), ColumnProjection(owner=null, name=name, alias=Optional.empty), ColumnProjection(owner=b, name=course_id, alias=Optional.empty), ExpressionProjection(expression=CASEa.scopeWHEN0THEN100ELSE200END, alias=Optional[scope])]), groupByContext=org.apache.shardingsphere.sql.parser.binder.segment.select.groupby.GroupByContext@55c03e4, orderByContext=org.apache.shardingsphere.sql.parser.binder.segment.select.orderby.OrderByContext@14df5253, paginationContext=org.apache.shardingsphere.sql.parser.binder.segment.select.pagination.PaginationContext@605eb072, containsSubquery=false)
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1s1 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_0 a JOIN course_selected_0 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1s2 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_1 a JOIN course_selected_1 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1s1 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_2 a JOIN course_selected_2 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1s2 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_3 a JOIN course_selected_3 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-2s1 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_0 a JOIN course_selected_0 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-2s2 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_1 a JOIN course_selected_1 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-2s1 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_2 a JOIN course_selected_2 b ON a.id = b.user_id
2021-01-14 16:24:08.861  INFO 7400 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-2s2 ::: SELECT a.id,name,b.course_id, CASE a.scope WHEN 0 THEN 100 ELSE 200 END scope FROM test_user_3 a JOIN course_selected_3 b ON a.id = b.user_id

插入 只會(huì)使用主庫(kù)進(jìn)行操作

2021-01-14 17:10:23.860  INFO 3968 --- [           main] ShardingSphere-SQL                       : Logic SQL: INSERT INTO course 
 ( id,
    `name`,
    `scope` )  VALUES 
 ( ?,
    ?,
    ? )
2021-01-14 17:10:23.860  INFO 3968 --- [           main] ShardingSphere-SQL                       : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@6eabe718, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@38d525aa), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@38d525aa, columnNames=[id, name, scope], insertValueContexts=[InsertValueContext(parametersCount=3, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=59, stopIndex=59, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=63, stopIndex=63, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=67, stopIndex=67, parameterMarkerIndex=2)], parameters=[1349645022316584961, 測(cè)試-7743ee152931455491f6bd9dc20a6cb2, 0])], generatedKeyContext=Optional.empty)
2021-01-14 17:10:23.861  INFO 3968 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1m ::: INSERT INTO course_1 
 ( id,
    `name`,
    `scope` )  VALUES 
 (?, ?, ?) ::: [1349645022316584961, 測(cè)試-7743ee152931455491f6bd9dc20a6cb2, 0]
2021-01-14 17:10:23.912  INFO 3968 --- [           main] ShardingSphere-SQL                       : Logic SQL: INSERT INTO test_user 
 ( id,
    `name`,
    `scope` )  VALUES 
 ( ?,
    ?,
    ? )
2021-01-14 17:10:23.912  INFO 3968 --- [           main] ShardingSphere-SQL                       : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@32e697ac, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@3866c96e), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@3866c96e, columnNames=[id, name, scope], insertValueContexts=[InsertValueContext(parametersCount=3, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=62, stopIndex=62, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=66, stopIndex=66, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=70, stopIndex=70, parameterMarkerIndex=2)], parameters=[1349645025416175617, 測(cè)試用戶-9f56aa0505334005b323cb561293b8b5, 0])], generatedKeyContext=Optional.empty)
2021-01-14 17:10:23.912  INFO 3968 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1m ::: INSERT INTO test_user_1 
 ( id,
    `name`,
    `scope` )  VALUES 
 (?, ?, ?) ::: [1349645025416175617, 測(cè)試用戶-9f56aa0505334005b323cb561293b8b5, 0]
TestUserEntity(id=1349645025416175617, name=測(cè)試用戶-9f56aa0505334005b323cb561293b8b5, scope=0)
CourseEntity(id=1349645022316584961, name=測(cè)試-7743ee152931455491f6bd9dc20a6cb2, scope=0)
2021-01-14 17:10:23.920  INFO 3968 --- [           main] ShardingSphere-SQL                       : Logic SQL: INSERT INTO course_selected 
 ( id,
    user_id,
    course_id,
    `scope` )  VALUES 
 ( ?,
    ?,
    ?,
    ? )
2021-01-14 17:10:23.920  INFO 3968 --- [           main] ShardingSphere-SQL                       : SQLStatement: InsertStatementContext(super=CommonSQLStatementContext(sqlStatement=org.apache.shardingsphere.sql.parser.sql.statement.dml.InsertStatement@5aab5b31, tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5408d4b3), tablesContext=org.apache.shardingsphere.sql.parser.binder.segment.table.TablesContext@5408d4b3, columnNames=[id, user_id, course_id, scope], insertValueContexts=[InsertValueContext(parametersCount=4, valueExpressions=[ParameterMarkerExpressionSegment(startIndex=81, stopIndex=81, parameterMarkerIndex=0), ParameterMarkerExpressionSegment(startIndex=85, stopIndex=85, parameterMarkerIndex=1), ParameterMarkerExpressionSegment(startIndex=89, stopIndex=89, parameterMarkerIndex=2), ParameterMarkerExpressionSegment(startIndex=93, stopIndex=93, parameterMarkerIndex=3)], parameters=[1349645025458118657, 1349645025416175617, 1349645022316584961, 0])], generatedKeyContext=Optional.empty)
2021-01-14 17:10:23.921  INFO 3968 --- [           main] ShardingSphere-SQL                       : Actual SQL: ds-1m ::: INSERT INTO course_selected_1 
 ( id,
    user_id,
    course_id,
    `scope` )  VALUES 
 (?, ?, ?, ?) ::: [1349645025458118657, 1349645025416175617, 1349645022316584961, 0]
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市治泥,隨后出現(xiàn)的幾起案子筹煮,更是在濱河造成了極大的恐慌,老刑警劉巖居夹,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件败潦,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡准脂,警方通過(guò)查閱死者的電腦和手機(jī)变屁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)意狠,“玉大人粟关,你說(shuō)我怎么就攤上這事』犯辏” “怎么了闷板?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)院塞。 經(jīng)常有香客問(wèn)我遮晚,道長(zhǎng),這世上最難降的妖魔是什么拦止? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任县遣,我火速辦了婚禮,結(jié)果婚禮上汹族,老公的妹妹穿的比我還像新娘萧求。我一直安慰自己,他們只是感情好顶瞒,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布夸政。 她就那樣靜靜地躺著,像睡著了一般榴徐。 火紅的嫁衣襯著肌膚如雪守问。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天坑资,我揣著相機(jī)與錄音耗帕,去河邊找鬼。 笑死袱贮,一個(gè)胖子當(dāng)著我的面吹牛仿便,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼探越,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼狡赐!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起钦幔,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤枕屉,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后鲤氢,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體搀擂,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年卷玉,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了哨颂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡相种,死狀恐怖威恼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情寝并,我是刑警寧澤箫措,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站衬潦,受9級(jí)特大地震影響斤蔓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜镀岛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一弦牡、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧漂羊,春花似錦驾锰、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)艾猜。三九已至买喧,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間匆赃,已是汗流浹背淤毛。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留算柳,地道東北人低淡。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蔗蹋。 傳聞我的和親對(duì)象是個(gè)殘疾皇子何荚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容