MySQL 主從同步(一)

目錄:

一瞭吃、mysql主從同步概念說(shuō)明

二、主從同步實(shí)戰(zhàn)操作

三、主從同步實(shí)戰(zhàn)相關(guān)資源

閱讀完本文你的收獲:

  1. mysql 主從復(fù)制原理的是啥
  2. 如何實(shí)現(xiàn) mysql 讀寫(xiě)分離
  3. 如何解決 mysql 主從同步的延時(shí)問(wèn)題

參考:

主從同步詳解:https://juejin.cn/post/6920477753368117261

docker-compose實(shí)戰(zhàn):https://juejin.cn/post/6844904040216657927

laradock:https://github.com/laradock/laradock


一崩溪、mysql主從同步概念說(shuō)明

MySQL 主從復(fù)制原理的是啥父款?

主庫(kù)將變更寫(xiě)入 binlog 日志溢谤,然后從庫(kù)連接到主庫(kù)之后,從庫(kù)有一個(gè) IO 線程憨攒,將主庫(kù)的 binlog 日志拷貝到自己本地世杀,寫(xiě)入一個(gè) relay 中繼日志中。接著從庫(kù)中有一個(gè) SQL 線程會(huì)從中繼日志讀取 binlog肝集,然后執(zhí)行 binlog 日志中的內(nèi)容瞻坝,也就是在自己本地再次執(zhí)行一遍 SQL,這樣就可以保證自己跟主庫(kù)的數(shù)據(jù)是一樣的杏瞻。

image.png

這里有一個(gè)非常重要的一點(diǎn)所刀,就是從庫(kù)同步主庫(kù)數(shù)據(jù)的過(guò)程是串行化的,也就是說(shuō)主庫(kù)上并行的操作捞挥,在從庫(kù)上會(huì)串行執(zhí)行浮创。所以這就是一個(gè)非常重要的點(diǎn)了,由于從庫(kù)從主庫(kù)拷貝日志以及串行執(zhí)行 SQL 的特點(diǎn)砌函,在高并發(fā)場(chǎng)景下斩披,從庫(kù)的數(shù)據(jù)一定會(huì)比主庫(kù)慢一些,是有延時(shí)的讹俊。所以經(jīng)常出現(xiàn)垦沉,剛寫(xiě)入主庫(kù)的數(shù)據(jù)可能是讀不到的,要過(guò)幾十毫秒劣像,甚至幾百毫秒才能讀取到乡话。

而且這里還有另外一個(gè)問(wèn)題,就是如果主庫(kù)突然宕機(jī)耳奕,然后恰好數(shù)據(jù)還沒(méi)同步到從庫(kù)绑青,那么有些數(shù)據(jù)可能在從庫(kù)上是沒(méi)有的诬像,有些數(shù)據(jù)可能就丟失了。

所以 MySQL 實(shí)際上在這一塊有兩個(gè)機(jī)制闸婴,一個(gè)是半同步復(fù)制坏挠,用來(lái)解決主庫(kù)數(shù)據(jù)丟失問(wèn)題;一個(gè)是并行復(fù)制邪乍,用來(lái)解決主從同步延時(shí)問(wèn)題降狠。

主從節(jié)點(diǎn)使用 binglog 文件 + position 偏移量來(lái)定位主從同步的位置,從節(jié)點(diǎn)會(huì)保存其已接收到的偏移量庇楞,如果從節(jié)點(diǎn)發(fā)生宕機(jī)重啟榜配,則會(huì)自動(dòng)從 position 的位置發(fā)起同步。

  • 異步模式(默認(rèn)方式)

異步模式下吕晌,主節(jié)點(diǎn)執(zhí)行完客戶端提交的事務(wù)后立即提交事務(wù)并返回給客戶端蛋褥,并不關(guān)心 log dump 線程是否成功地將將此次事務(wù)寫(xiě)進(jìn) binglog 并且發(fā)送給從庫(kù)。假如執(zhí)行事務(wù)的主線程提交事務(wù)后睛驳,log dump 線程還未來(lái)得及寫(xiě)入 binlog烙心,此時(shí)系統(tǒng)宕機(jī),則會(huì)造成 binglog 中沒(méi)有保存剛才提交的事務(wù)乏沸,造成主從數(shù)據(jù)不一致淫茵。

優(yōu)點(diǎn):異步模式下,主線程不用關(guān)系同步操作蹬跃,性能最好匙瘪。

缺點(diǎn):可能導(dǎo)致主從數(shù)據(jù)的不一致

  • 半同步復(fù)制

也叫 semi-sync 復(fù)制,指的就是主庫(kù)寫(xiě)入 binlog 日志之后炬转,就會(huì)將強(qiáng)制此時(shí)立即將數(shù)據(jù)同步到從庫(kù)辆苔,從庫(kù)將日志寫(xiě)入自己本地的 relay log 之后,接著會(huì)返回一個(gè) ack 給主庫(kù),主庫(kù)接收到至少一個(gè)從庫(kù)的 ack 之后才會(huì)認(rèn)為寫(xiě)操作完成了。

優(yōu)點(diǎn):相比于異步模式贰逾,半同步方式一定程度上保證了數(shù)據(jù)同步的可靠性。

缺點(diǎn):增加了主庫(kù)響應(yīng)客戶端的延時(shí)骑冗,延時(shí)至少為一個(gè) TCP/IP 的往返時(shí)間,即 binglog 發(fā)送給從庫(kù)至收到從庫(kù)的響應(yīng)時(shí)間先煎。

  • 并行復(fù)制

指的是從庫(kù)開(kāi)啟多個(gè)線程贼涩,并行讀取 relay log 中不同庫(kù)的日志,然后并行重放不同庫(kù)的日志薯蝎,這是庫(kù)級(jí)別的并行遥倦。

優(yōu)點(diǎn):對(duì)比半同步復(fù)制方式,全同步復(fù)制方式數(shù)據(jù)一致性的可靠性進(jìn)一步提高

缺點(diǎn):執(zhí)行事務(wù)時(shí)占锯,主庫(kù)需要等待所有的從庫(kù)執(zhí)行成功后才能返回袒哥,所以會(huì)大大提高主庫(kù)的響應(yīng)時(shí)間缩筛。

mysql 主從同步的延時(shí)

如果主從延遲較為嚴(yán)重,可以嘗試以下方案

1堡称、分庫(kù)瞎抛,將一個(gè)主庫(kù)拆分為多個(gè)主庫(kù),每個(gè)主庫(kù)的寫(xiě)并發(fā)就減少了幾倍却紧,此時(shí)主從延遲可以忽略不計(jì)桐臊。打開(kāi) MySQL 支持的并行復(fù)制,多個(gè)庫(kù)并行復(fù)制晓殊。如果說(shuō)某個(gè)庫(kù)的寫(xiě)入并發(fā)就是特別高断凶,單庫(kù)寫(xiě)并發(fā)達(dá)到了 2000/s,并行復(fù)制還是沒(méi)意義巫俺。

2懒浮、重構(gòu)代碼 : 重構(gòu)代碼,插入數(shù)據(jù)后识藤,直接更新,不查詢(xún)

3次伶、若確實(shí)存在必須先插入痴昧,立馬要求查詢(xún),然后立馬就反過(guò)來(lái)執(zhí)行一些操作冠王,對(duì)這個(gè)查詢(xún)?cè)O(shè)置直連主庫(kù)(不推薦赶撰,這和讀寫(xiě)分離的本意不是背道而馳?)


二柱彻、主從同步實(shí)戰(zhàn)操作

參考laradock完成容器編排豪娜,因?yàn)橹鲝膸?kù)在一臺(tái)服務(wù)器上,所以配置的3310,3312,3313端口映射到容器內(nèi)部3306

ps:相關(guān)代碼和資源在第三節(jié)

  • 創(chuàng)建網(wǎng)絡(luò)
    因?yàn)槲沂鞘褂玫囊延衝etwork哟楷,你們還需要多一步手動(dòng)創(chuàng)建網(wǎng)絡(luò)
docker network create laradock_backend
  • 構(gòu)建并啟動(dòng)容器
docker-compose up -d --build mysql-master-1  mysql-slave-1 mysql-slave-2 
  • 進(jìn)入master容器瘤载,登錄到mysql,查看binglog情況,確認(rèn)log_binON
# 進(jìn)入容器
docker exec -it mysql-master-1 /bin/bash
# 登錄mysql
mysql -uroot -proot

# 查看binglog, 確認(rèn) log_bin 為 ON
show variables like 'log_%';
image.png
  • 創(chuàng)建同步用的賬戶并給賬戶授權(quán)

這里'slave'@'%' 讓slave 可以在任何機(jī)器都可以登錄卖擅,知道Slave節(jié)點(diǎn)IP 的話鸣奔,建議使用IP,增加賬號(hào)安全性惩阶。

# ---------- mysql5.7 ----------
grant file,select,replication slave on *.* to 'slave'@'%' identified by 'slave';

# ---------- mysql8.0 ----------
# 新版的mysql版本已經(jīng)將創(chuàng)建賬戶和賦予權(quán)限的方式分開(kāi)了挎狸,并且更換了默認(rèn)加密方式
# 創(chuàng)建賬戶
CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'slave';
# 賦予權(quán)限
GRANT ALL PRIVILEGES ON *.* TO 'slave'@'%';

# 最后刷新一下權(quán)限
flush privileges;

再次確認(rèn)一下新增的用戶狀態(tài), 不對(duì)就修改一下

use mysql;
select Host,User,plugin from user;

# 已經(jīng)存在了就去修改
# ALTER user 'slave'@'%' IDENTIFIED WITH mysql_native_password  BY 'slave';
image.png
  • 查看Master狀態(tài)

記錄下FilePosition,后面會(huì)用到

show master status;
image.png

  • 新開(kāi)一個(gè)命令行窗口,進(jìn)入slave節(jié)點(diǎn)断楷,登錄mysql锨匆,
# 進(jìn)入容器
docker exec -it mysql-slave-1 /bin/bash
# 登錄mysql
mysql -uroot -proot
  • 配置master的信息
change master to master_host='mysql-master-1',master_user='slave',master_password='slave',master_log_file='mysql-master-bin.000005',master_log_pos=541;

注意:【參數(shù)說(shuō)明】需要修改為自己的配置:

master_host     : 主節(jié)點(diǎn)IP, 由于mysql-master 和msql-slave都在同一個(gè)backend網(wǎng)路中,所以可以通過(guò)mysql-master名稱(chēng)訪問(wèn)到冬筒。docker 幫我們做了host解析恐锣。
master_user     : 前面創(chuàng)建的用于同步的賬號(hào)
master_password : master節(jié)點(diǎn)登錄密碼
master_log_file : master節(jié)點(diǎn)要同步的binlog文件名茅主。
master_log_pos  : 從binlong文件的哪個(gè)位置開(kāi)始同步。
  • 啟停同步
stop slave;
start slave;

# 如果遇到報(bào)錯(cuò):ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
# 重置一下slave
reset slave;
  • 查看主從同步狀態(tài)
show slave status\G

Slave_IO_RunningSlave_SQL_Running: 兩列的值都為"Yes"侥蒙,這表明 Slave 的 I/O 和 SQL 線程都在正常運(yùn)行暗膜。
Seconds_Behind_Master:表示延遲多少,一般情況為0鞭衩。
到此主從同步已經(jīng)實(shí)現(xiàn)学搜,mysql-slave-2節(jié)點(diǎn)也是相同配置。

image.png

三论衍、主從同步實(shí)戰(zhàn)相關(guān)資源

  • 文件目錄
|- docker-compose.yml
|- .env
|- mysql-master-1
|   |- Dockerfile
|   |- my.cnf
|   |- docker-entrypoint-initdb.d
|       |- createdb.sql.example
|
|- mysql-slave-1
|   |- Dockerfile
|   |- my.cnf
|   |- docker-entrypoint-initdb.d
|       |- createdb.sql.example
|- mysql-slave-2
|   |- Dockerfile
|   |- my.cnf
|   |- docker-entrypoint-initdb.d
|       |- createdb.sql.example
  • docker-compose.yml
version: '3'

networks:  #定義網(wǎng)路
 laradock_backend:
    external: true
   #driver: ${NETWORKS_DRIVER}
#-------------------------------------------------------------------
services:
  mysql-master-1: # Master 節(jié)點(diǎn)
    build:
      context: ./${MYSQL_PATH_MASTER_1}  #自定義鏡像
      args:
        - MYSQL_VERSION=${MYSQL_VERSION}
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}  #默認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)
      - MYSQL_USER=${MYSQL_USER}  #創(chuàng)建用戶
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}  #用戶密碼
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} #root 用戶秘密
      - TZ=${WORKSPACE_TIMEZONE}
    volumes:
      - "${DATA_PATH_HOST}/master_1:/var/lib/mysql"
      - "${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d:"
    ports:
      - "${MYSQL_PORT_MASTER_1}:3306"
    container_name: mysql-master-1
    networks:
      - ${NETWORK}
#-------------------------------------------------------------------
  mysql-slave-1:  #Slave 節(jié)點(diǎn)
    build:
      context: ./${MYSQL_PATH_SLAVE_1}  #自定義鏡像
      args:
        - MYSQL_VERSION=${MYSQL_VERSION}
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}  #默認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)
      - MYSQL_USER=${MYSQL_USER}  #創(chuàng)建用戶
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}  #用戶密碼
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} #root 用戶秘密
      - TZ=${WORKSPACE_TIMEZONE}
    volumes:
      - "${DATA_PATH_HOST}/slave_1:/var/lib/mysql"
      - "${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d"
    ports:
      - "${MYSQL_PORT_SLAVE_1}:3306"
    container_name: mysql-slave-1
    networks:
      - ${NETWORK}
#-------------------------------------------------------------------
  mysql-slave-2:  #Slave 節(jié)點(diǎn)
    build:
      context: ./${MYSQL_PATH_SLAVE_2}  #自定義鏡像
      args:
        - MYSQL_VERSION=${MYSQL_VERSION}
    environment:
      - MYSQL_DATABASE=${MYSQL_DATABASE}  #默認(rèn)創(chuàng)建數(shù)據(jù)庫(kù)
      - MYSQL_USER=${MYSQL_USER}  #創(chuàng)建用戶
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}  #用戶密碼
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} #root 用戶秘密
      - TZ=${WORKSPACE_TIMEZONE}
    volumes:
      - "${DATA_PATH_HOST}/slave_2:/var/lib/mysql"
      - "${MYSQL_ENTRYPOINT_INITDB}:/docker-entrypoint-initdb.d"
    ports:
      - "${MYSQL_PORT_SLAVE_2}:3306"
    container_name: mysql-slave-2
    networks:
      - ${NETWORK}
  • .env
### DOCKER 配置 #################################################
NETWORK=laradock_backend
NETWORKS_DRIVER=bridge

WORKSPACE_TIMEZONE=UTC
DATA_PATH_HOST=./data

### MYSQL 配置 #################################################
MYSQL_VERSION=8.0
MYSQL_DATABASE=ebook
MYSQL_USER=sync
MYSQL_PASSWORD=sync
MYSQL_ROOT_PASSWORD=root
MYSQL_ENTRYPOINT_INITDB=./mysql/docker-entrypoint-initdb.d

### MYSQL-MASTER-1 配置 #################################################
MYSQL_PATH_MASTER_1=mysql-master-1
MYSQL_PORT_MASTER_1=3310

### MYSQL-SLAVE-1 配置 #################################################
MYSQL_PATH_SLAVE_1=mysql-slave-1
MYSQL_PORT_SLAVE_1=3312

### MYSQL-SLAVE-2 配置 #################################################
MYSQL_PATH_SLAVE_2=mysql-slave-2
MYSQL_PORT_SLAVE_2=3313
  • Dockerfile
ARG MYSQL_VERSION=latest
FROM mysql:${MYSQL_VERSION}

#####################################
# Set Timezone
#####################################

ARG TZ=UTC
ENV TZ ${TZ}

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && chown -R mysql:root /var/lib/mysql/
COPY my.cnf /etc/mysql/conf.d/my.cnf
CMD ["mysqld"]

EXPOSE 3306
  • mysql-master-1/my.cnf
# The MySQL  Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysql]

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8

## 主庫(kù)配置
## 設(shè)置server_id瑞佩,一般設(shè)置為IP,保證唯一就好
server_id=1

# 開(kāi)啟binlog,名字可以隨意取
log-bin=mysql-master-bin

## binlog日志格式,(mixed,statement,row坯台,默認(rèn)格式是statement)
binlog_format=row

## 日志自動(dòng)刪除日期,默認(rèn)值為0炬丸,表示不自動(dòng)刪除。
expire_logs_days=7

## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類(lèi)型的錯(cuò)誤蜒蕾,避免slave端復(fù)制中斷稠炬。
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062

## 復(fù)制過(guò)濾:也就是指定哪個(gè)數(shù)據(jù)庫(kù)不用同步(mysql庫(kù)一般不同步)
binlog-ignore-db=mysql

#控制binlog的寫(xiě)入頻率咪啡。每執(zhí)行多少次事務(wù)寫(xiě)入一次(這個(gè)參數(shù)性能消耗很大首启,但可減小MySQL崩潰造成的損失)
sync_binlog = 1

#這個(gè)參數(shù)一般用在主主同步中,用來(lái)錯(cuò)開(kāi)自增值, 防止鍵值沖突
auto_increment_offset = 1

#這個(gè)參數(shù)一般用在主主同步中撤摸,用來(lái)錯(cuò)開(kāi)自增值, 防止鍵值沖突
auto_increment_increment = 1

#通過(guò)同步產(chǎn)生的變化將記錄在自己的binlog中
log-slave-updates=ON
  • mysql-slave-1/my.cnf
    ps:mysql-slave-2 只是 server_id=3
# The MySQL  Client configuration file.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

[mysql]

[mysqld]
sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION"
character-set-server=utf8

## 主庫(kù)配置
## 設(shè)置server_id毅桃,一般設(shè)置為IP,保證唯一就好
server_id=2

# 開(kāi)啟binlog,名字可以隨意取
log-bin=mysql-slave-bin

## binlog日志格式,(mixed,statement,row准夷,默認(rèn)格式是statement)
binlog_format=row

## 日志自動(dòng)刪除日期,默認(rèn)值為0钥飞,表示不自動(dòng)刪除。
expire_logs_days=7

## 跳過(guò)主從復(fù)制中遇到的所有錯(cuò)誤或指定類(lèi)型的錯(cuò)誤衫嵌,避免slave端復(fù)制中斷读宙。
## 如:1062錯(cuò)誤是指一些主鍵重復(fù),1032錯(cuò)誤是因?yàn)橹鲝臄?shù)據(jù)庫(kù)數(shù)據(jù)不一致
slave_skip_errors=1062

## 復(fù)制過(guò)濾:也就是指定哪個(gè)數(shù)據(jù)庫(kù)不用同步(mysql庫(kù)一般不同步)
binlog-ignore-db=mysql

#控制binlog的寫(xiě)入頻率渐扮。每執(zhí)行多少次事務(wù)寫(xiě)入一次(這個(gè)參數(shù)性能消耗很大论悴,但可減小MySQL崩潰造成的損失)
sync_binlog = 1


# 加快事務(wù)處理速度,犧牲了一定的可靠性墓律。由于Slave 是Master 的備份膀估,所以即使Slave 服務(wù)崩潰或者斷點(diǎn)丟失數(shù)據(jù),也可以重新啟動(dòng)后從主庫(kù)恢復(fù)耻讽。
sync_binlog = 0
innodb_flush_log_at_trx_commit = 0

# 只讀察纯,主從同步線程具有管理員權(quán)限,不受read_only控制,所以能夠正常寫(xiě)入饼记。
read_only=1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末香伴,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子具则,更是在濱河造成了極大的恐慌即纲,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件博肋,死亡現(xiàn)場(chǎng)離奇詭異低斋,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)匪凡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)膊畴,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人病游,你說(shuō)我怎么就攤上這事唇跨。” “怎么了衬衬?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵买猖,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我滋尉,道長(zhǎng)政勃,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任兼砖,我火速辦了婚禮,結(jié)果婚禮上既棺,老公的妹妹穿的比我還像新娘讽挟。我一直安慰自己,他們只是感情好丸冕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布耽梅。 她就那樣靜靜地躺著,像睡著了一般胖烛。 火紅的嫁衣襯著肌膚如雪眼姐。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天佩番,我揣著相機(jī)與錄音众旗,去河邊找鬼。 笑死趟畏,一個(gè)胖子當(dāng)著我的面吹牛贡歧,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼利朵,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼律想!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起绍弟,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤技即,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后樟遣,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體而叼,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年年碘,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了澈歉。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡屿衅,死狀恐怖埃难,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情涤久,我是刑警寧澤涡尘,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站响迂,受9級(jí)特大地震影響考抄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蔗彤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一川梅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧然遏,春花似錦贫途、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至秧倾,卻和暖如春怨酝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背那先。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工农猬, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人售淡。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓盛险,卻偏偏與公主長(zhǎng)得像瞄摊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子苦掘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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