第二章 MySQL的體系結(jié)構(gòu)與基礎(chǔ)管理

本課程,適合具備一定Linux運(yùn)維或者開發(fā)基礎(chǔ)的朋友警没,課程定級(jí)中匈辱、高級(jí)DBA。
只要掌握80%杀迹,輕松助力薪資15k-25K亡脸。
課程內(nèi)容均來自與MySQL官網(wǎng)+MySQL源碼。
配套精品視頻(2021 5月全新錄制树酪,版權(quán)所有:郭加磊 oldguo浅碾。),獲取方法私聊续语。

1. MySQL C/S結(jié)構(gòu)

Clinet : mysql mysqldump ,sqlyog,API
Server : mysqld守護(hù)進(jìn)程

image.png

2. 實(shí)例(instance)

實(shí)例: mysqld + 線程(Master thread , IO ,SQL ,purge...) + 預(yù)分配內(nèi)存(數(shù)據(jù)\日志\線程)
公司: boss + 員工(總經(jīng)理+普通員工) + 辦公室

3. MySQL服務(wù)的構(gòu)成

image.png

3.1 Server層

a. 連接層

b. SQL 層

3.2 engine 存儲(chǔ)引擎層

4. 對(duì)象存儲(chǔ)結(jié)構(gòu)和邏輯結(jié)構(gòu)的對(duì)比

邏輯結(jié)構(gòu):

庫 : 庫名,庫屬性(字符集,校對(duì)規(guī)則)
表 : 列+行+表屬性+表名

存儲(chǔ)結(jié)構(gòu):

庫---> 目錄
表---> xx.ibd ---> 區(qū)(extents)---->頁(pages)

5. 用戶管理

5.1 作用

登陸數(shù)據(jù)庫
管理數(shù)據(jù)庫對(duì)象

5.2 長成啥樣?

名字@'白名單'
白名單? ----> 在白名單中的IP才能連MySQL
oldguo@'localhost' --> 本地用戶
oldguo@'10.0.0.2' --> 單一IP
oldguo@'10.0.0.%' --> 范圍IP
oldguo@'10.0.0.5%' --> 范圍IP
oldguo@'10.0.0.0/255.255.254.0' --> 范圍IP
oldguo@'%' --> 范圍IP

安全規(guī)范:

a. 白名單盡量小,最好細(xì)化到單一IP, %要不得.
b. 用戶名有特點(diǎn).
c. 無用的用戶要?jiǎng)h除或者鎖定.
d. 密碼超過三種復(fù)雜度,12位以上.

5.3 查\增\刪\改

5.3.1 查詢

mysql> desc mysql.user;
mysql> select user,host ,authentication_string ,plugin from mysql.user;
mysql> select user as "用戶",host as "白名單" ,authentication_string as "密碼",plugin as "插件" from mysql.user;
mysql> select user as "用戶",host as "白名單" ,plugin as "插件" from mysql.user;

5.3.2 創(chuàng)建用戶

mysql> create user oldboy@'10.0.0.%' identified by '123';
mysql> create user oldguo@'10.0.0.%' identified with mysql_native_password by '123';

命令不會(huì),看幫助.
mysql> help create user;

5.5.3 彩蛋:

  • 8.0 之后必須先建用戶后授權(quán),grant不再支持建用戶功能和密碼修改功能;
  • 密碼插件,8.0之前使用mysql_native_password,8.0 之后使用caching_sha2_password
  • 導(dǎo)致的問題: 使用老的客戶端程序,連接不了8.0版本
    解決方法:
    a. 建用戶時(shí),指定mysql_native_password插件進(jìn)行密碼加密.
    b. 修改用戶時(shí),可以修改插件
    c. 配置文件中指定默認(rèn)加密插件為mysql_native_password

5.3.4 修改用戶

mysql> alter user oldboy@'10.0.0.%'  identified with mysql_native_password by '123';
mysql> select user as "用戶",host as "白名單" ,plugin as "插件" from mysql.user;

mysql> alter user oldboy@'10.0.0.%' ACCOUNT LOCK;
mysql> alter user oldboy@'10.0.0.%' ACCOUNT UNLOCK;

5.3.5 刪除用戶

mysql> drop user oldboy@'10.0.0.%';

6. 權(quán)限管理

6.1 作用

約束用戶能夠?qū)?shù)據(jù)庫對(duì)象(庫,表)干啥(SQL).

6.2 權(quán)限列表

mysql> SHOW PRIVILEGES;
ALL ?   除了Grant option所有權(quán)限.

2.3 授權(quán)

grant 權(quán)限 on 權(quán)限范圍 to 用戶;
權(quán)限范圍?
*.* 全局范圍,包含了所有庫表 chmod 777 -R /
wordpress.* 單庫范圍 chmod 777 -R /wordpress
wordpress.t1 單表

mysql> create user root@'10.0.0.%' identified with mysql_native_password by '123';
mysql> grant all on *.* to  root@'10.0.0.%';
mysql> create user wp_user@'10.0.0.%' identified with mysql_native_password by '123';
mysql> grant select,update,delete,insert  on wordpress.* to  wp_user@'10.0.0.%';

6.4 查詢用戶權(quán)限

6.4.1 專用命令

mysql> show grants for wp_user@'10.0.0.%';

6.4.2. 授權(quán)表查詢

use mysql ;
user         :  user  host auth plugin  全局授權(quán)(*.*)的權(quán)限   
db           :  user  host              單庫范圍授權(quán)(wordpress.* )的用戶權(quán)限
table_priv   :  user  host              單表范圍授權(quán)(wordpress.t1)的用戶權(quán)限

6.5 回收權(quán)限

mysql> revoke delete  ON `wordpress`.* from `wp_user`@`10.0.0.%`;
mysql> show grants for wp_user@'10.0.0.%';

6.6 角色 role MySQL 8.0 中的role支持

需求
oldguo.*  rw(insert,update,delete,select)     --->oldguo_rw
oldguo.*  r (select)                          --->oldguo_r

mysql> create role oldguo_rw,oldboy_r;
mysql> grant select on oldguo.* to oldboy_r;
mysql> grant select,update,insert,delete  on oldguo.* to oldguo_rw;
mysql> create user user1@'%' identified by '123';
mysql> create user user2@'%' identified by '123';
mysql> grant oldguo_r  to user1@'%';
mysql> grant oldguo_rw  to user2@'%';

6.7 彩蛋 本地管理員root@'localhost',密碼忘記(誤刪除\誤修改)

a. 重啟數(shù)據(jù)庫到無驗(yàn)證模式 
[root@db01 ~]# /etc/init.d/mysqld stop
[root@db01 ~]# mysqld_safe --skip-grant-tables --skip-networking &
b. 登錄改密碼 
[root@db01 ~]# mysql
mysql> flush privileges;
mysql> alter user root@'localhost' identified by '123';
c. 正常啟動(dòng)數(shù)據(jù)庫
[root@db01 ~]# /etc/init.d/mysqld restart

6.8 彩蛋: 如何暴力破解弱口令


7. 連接管理

7.1 自帶客戶端程序

7.1.1 mysql

(1) 本地 socket文件連接 
條件: localhost用戶需要提前創(chuàng)建.
[root@db01 ~]# mysql -uroot -p123 -S /tmp/mysql.sock
(2) 網(wǎng)絡(luò)連接串(TCP/IP)
條件: 遠(yuǎn)程連接用戶必須出現(xiàn)在白名單.
[root@db01 ~]# mysql -uoldguo -p123 -h10.0.0.51 -P3306

7.2 開發(fā)工具

sqlyog 
navicat 
workbench 

7.3 程序(驅(qū)動(dòng))連接

php 
python
go
java
等垂谢。

8. 配置文件

8.1 方式

a. 源碼包,編譯時(shí)配置一些參數(shù)(CMAKE)
b. 配置文件
c. 命令行指定

8.2 配置文件應(yīng)用

8.2.1 配置文件的默認(rèn)讀取路徑

[root@db01 ~]# mysqld --help --verbose |grep my.cnf
/etc/my.cnf     /etc/mysql/my.cnf     /usr/local/mysql/etc/my.cnf      ~/.my.cnf 

注意:
a. 多個(gè)文件會(huì)依次從左到右讀取,如果有重復(fù),最后讀取的生效.
b. 啟動(dòng)時(shí),強(qiáng)制指定讀取哪個(gè)配置文件(--defaults-file=/opt/aa.txt),mysqld mysqld_safe 程序能夠調(diào)用

8.2.2 基本結(jié)構(gòu)

[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3306/data
port=3306 
socket=/tmp/mysql.sock 
[client]
socket=/tmp/mysql.sock

[標(biāo)簽] :
[服務(wù)端]:  [mysqld]  [mysqld_safe]  [server]
影響: 數(shù)據(jù)庫啟動(dòng),初始化.
[客戶端]:  [mysql] [mysqldump]     [client]
影響:  只影響到本機(jī)客戶端程序運(yùn)行.

9. 啟動(dòng)關(guān)閉

9.1 啟動(dòng)方式

mysqld & 
mysqld_safe & 
mysql.server start
service  start    systemd   start 

9.2 關(guān)閉方式

mysql.server stop 
sys-v  systemd  stop
mysqladmin -uroot -p123 shutdown  
shutdown 

10. 多實(shí)例

10.1 同版本

10.1.1 多套目錄

mkdir -p /data/330{7..9}/data 
chown -R mysql. /data

10.1.2 配置文件

cat >/data/3307/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3307/data
port=3307 
socket=/tmp/mysql3307.sock 
EOF

cat >/data/3308/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3308/data
port=3308 
socket=/tmp/mysql3308.sock 
EOF


cat >/data/3309/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql 
datadir=/data/3309/data
port=3309 
socket=/tmp/mysql3309.sock 
EOF

10.1.3 初始化數(shù)據(jù)

mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3307/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3308/data
mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/3309/data

10.1.4 啟動(dòng)數(shù)據(jù)庫

mysqld_safe --defaults-file=/data/3307/my.cnf &
mysqld_safe --defaults-file=/data/3308/my.cnf &
mysqld_safe --defaults-file=/data/3309/my.cnf &


cat >/etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3307/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3308/my.cnf
LimitNOFILE = 5000
EOF

cat >/etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/data/3309/my.cnf
LimitNOFILE = 5000
EOF


systemctl start mysqld3307
systemctl start mysqld3308
systemctl start mysqld3309

10.2 多版本多實(shí)例

10.2.1 5.6和5.7 解壓和軟連接

[root@db01 opt]# ln -s /opt/mysql-5.7.30-linux-glibc2.12-x86_64 /usr/local/mysql57
[root@db01 opt]# ln -s /opt/mysql-5.6.46-linux-glibc2.12-x86_64  /usr/local/mysql56

10.2.2 目錄及授權(quán)

mkdir -p /data/331{6..7}/data 
chown -R mysql. /data

10.2.3 配置文件

cat >/data/3316/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql56 
datadir=/data/3316/data
port=3316 
socket=/tmp/mysql3316.sock 
EOF

cat >/data/3317/my.cnf <<EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql57 
datadir=/data/3317/data
port=3317 
socket=/tmp/mysql3317.sock 
EOF

10.2.4 初始化數(shù)據(jù)

/usr/local/mysql57/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql57 --datadir=/data/3317/data
/usr/local/mysql56/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql56 --datadir=/data/3316/data

10.2.5 啟動(dòng)

[root@db01 opt]# /usr/local/mysql56/bin/mysqld_safe --defaults-file=/data/3316/my.cnf &
[root@db01 opt]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3317/my.cnf &

10.2.6 連接

[root@db01 opt]# mysql -S /tmp/mysql3307.sock
[root@db01 opt]# mysql -S /tmp/mysql3316.sock
[root@db01 opt]# mysql -S /tmp/mysql3317.sock

11. 升級(jí)

11.1 升級(jí)方式

a. inplace (就地升級(jí))
適合于有主從環(huán)境.
b. merging (邏輯備份遷移升級(jí))

11.2 升級(jí)注意事項(xiàng)(INPLACE)

來自于MySQL官網(wǎng)
Upgrade is only supported between General Availability (GA) releases.
Upgrade from MySQL 5.6 to 5.7 is supported. Upgrading to the latest release is recommended before upgrading to the next version. For example, upgrade to the latest MySQL 5.6 release before upgrading to MySQL 5.7.
Upgrade that skips versions is not supported. For example, upgrading directly from MySQL 5.5 to 5.7 is not supported.
Upgrade within a release series is supported. For example, upgrading from MySQL 5.7.x to 5.7.y is supported. Skipping a release is also supported. For example, upgrading from MySQL 5.7.x to 5.7.z is supported.

翻譯:
a. 支持GA版本之間升級(jí)
b. 5.6--> 5.7 ,先將5.6升級(jí)至最新版,再升級(jí)到5.7
c. 5.5 ---> 5.7 ,先將5.5 升級(jí)至最新疮茄,再5.5---> 5.6最新滥朱,再5.6--->5.7 最新
d. 回退方案要提前考慮好,最好升級(jí)前要備份(特別是往8.0版本升級(jí))力试。
e. 降低停機(jī)時(shí)間(停業(yè)務(wù)的時(shí)間)

11.3 INPLACE 升級(jí)過程原理

1.備份原數(shù)據(jù)庫數(shù)據(jù)
2. 安裝新版本軟件
3. 關(guān)閉原數(shù)據(jù)庫(掛維護(hù)頁
4. 使用新版本軟件 “掛” 舊版本數(shù)據(jù)啟動(dòng)(--skip-grant-tables ,--skip-networking)
5. 升級(jí) : 只是升級(jí)系統(tǒng)表徙邻。升級(jí)時(shí)間和數(shù)據(jù)量無關(guān)的。
6. 正常重啟數(shù)據(jù)庫畸裳。
7. 驗(yàn)證各項(xiàng)功能是否正常缰犁。
8. 業(yè)務(wù)恢復(fù)。

11.4 5.6.48 ----> 5.7.30 Inplace 升級(jí)演練

11.4.1 安裝 新版本軟件 5.7.30

ok躯畴。

11.4.2 停原庫 ,做冷備.

a. 快速關(guān)庫功能關(guān)閉(優(yōu)雅關(guān)閉)

連接到數(shù)據(jù)庫中(5.6.48)民鼓,執(zhí)行以下語句:
[root@db01 ~]# mysql -S /tmp/mysql3316.sock -e "set global innodb_fast_shutdown=0 ;"
[root@db01 ~]# mysql -S /tmp/mysql3316.sock -e "select @@innodb_fast_shutdown ;"
[root@db01 ~]# /usr/local/mysql56/bin/mysqladmin -S /tmp/mysql3316.sock  shutdown 

b. 冷備:

[root@db01 ~]# cp -r /data/3316/data/ /tmp/bak

c. 使用高版本軟件(5.7.30)掛低版本(5.6.48)數(shù)據(jù)啟動(dòng)

[root@db01 data]# vim /data/3316/my.cnf 
[mysqld]
user=mysql
basedir=/usr/local/mysql57
datadir=/data/3316/data
socket=/tmp/mysql3316.sock
port=3316
innodb_fast_shutdown=0

[root@db01 data]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3316/my.cnf --skip-grant-tables --skip-networking &

d. 升級(jí) (升級(jí)到8.0可以省略)

[root@db01 data]# /usr/local/mysql57/bin/mysql_upgrade -S /tmp/mysql3316.sock --force 

e. 重啟數(shù)據(jù)庫到正常狀態(tài)

[root@db01 data]# /usr/local/mysql57/bin/mysqladmin -S /tmp/mysql3316.sock shutdown
[root@db01 data]# /usr/local/mysql57/bin/mysqld_safe --defaults-file=/data/3316/my.cnf &

11.5 Mysql 5.7.30 Inplace升級(jí)到MySQL 8.0.20

11.5.1 升級(jí)之前的預(yù)檢查

a. 安裝mysqlsh

[root@db01 opt]# tar xf mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz 
[root@db01 opt]# ln -s /opt/mysql-shell-8.0.20-linux-glibc2.12-x86-64bit /usr/local/mysqlsh
[root@db01 opt]# cd /usr/local/mysqlsh/
[root@db01 bin]# vim /etc/profile
export PATH=/usr/local/mysqlsh/bin:$PATH
[root@db01 bin]# source /etc/profile
[root@db01 bin]# mysqlsh --version
mysqlsh   Ver 8.0.20 for Linux on x86_64 - for MySQL 8.0.20 (MySQL Community Server (GPL))

b. 在5730數(shù)據(jù)庫中創(chuàng)建鏈接用戶

[root@db01 bin]# mysql -S /tmp/mysql3317.sock
mysql> create user root@'10.0.0.%' identified with mysql_native_password by '123';
mysql> grant all on *.* to root@'10.0.0.%';

c. 升級(jí)前檢測

[root@db01 ~]# mysqlsh root:123@10.0.0.51:3317 -e "util.checkForServerUpgrade()" >>/tmp/up.log

11.5.2 正式升級(jí)

a. 安裝 新版本軟件 8.0.20

ok。

b. 停原庫

# 1. 快速關(guān)庫功能關(guān)閉(優(yōu)雅關(guān)閉)  

連接到數(shù)據(jù)庫中(5.7.30)蓬抄,執(zhí)行以下語句丰嘉。

mysql> set global innodb_fast_shutdown=0 ;
mysql> select @@innodb_fast_shutdown;
mysql> shutdown ;

c. 使用高版本軟件(8.0.20)掛低版本(5.7.30)數(shù)據(jù)啟動(dòng)

[root@db01 data]# vim /data/3317/my.cnf 
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/3317/data
socket=/tmp/mysql3317.sock
port=3317

[root@db01 data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3317/my.cnf --skip-grant-tables --skip-networking &

d. 重啟數(shù)據(jù)庫到正常狀態(tài)

[root@db01 data]# mysqladmin -S /tmp/mysql3317.sock shutdown
[root@db01 data]# /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/3317/my.cnf &

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市嚷缭,隨后出現(xiàn)的幾起案子饮亏,更是在濱河造成了極大的恐慌耍贾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,941評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件路幸,死亡現(xiàn)場離奇詭異荐开,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)简肴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門晃听,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人砰识,你說我怎么就攤上這事能扒。” “怎么了辫狼?”我有些...
    開封第一講書人閱讀 165,345評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵初斑,是天一觀的道長。 經(jīng)常有香客問我膨处,道長见秤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評(píng)論 1 295
  • 正文 為了忘掉前任真椿,我火速辦了婚禮鹃答,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘突硝。我一直安慰自己挣跋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,868評(píng)論 6 392
  • 文/花漫 我一把揭開白布狞换。 她就那樣靜靜地躺著避咆,像睡著了一般。 火紅的嫁衣襯著肌膚如雪修噪。 梳的紋絲不亂的頭發(fā)上查库,一...
    開封第一講書人閱讀 51,688評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音黄琼,去河邊找鬼樊销。 笑死,一個(gè)胖子當(dāng)著我的面吹牛脏款,可吹牛的內(nèi)容都是我干的围苫。 我是一名探鬼主播,決...
    沈念sama閱讀 40,414評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼撤师,長吁一口氣:“原來是場噩夢啊……” “哼剂府!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起剃盾,我...
    開封第一講書人閱讀 39,319評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤腺占,失蹤者是張志新(化名)和其女友劉穎淤袜,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體衰伯,經(jīng)...
    沈念sama閱讀 45,775評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡铡羡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了意鲸。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烦周。...
    茶點(diǎn)故事閱讀 40,096評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖怎顾,靈堂內(nèi)的尸體忽然破棺而出论矾,到底是詐尸還是另有隱情,我是刑警寧澤杆勇,帶...
    沈念sama閱讀 35,789評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站饱亿,受9級(jí)特大地震影響蚜退,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彪笼,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,437評(píng)論 3 331
  • 文/蒙蒙 一钻注、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧配猫,春花似錦幅恋、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至腐巢,卻和暖如春品追,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背冯丙。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評(píng)論 1 271
  • 我被黑心中介騙來泰國打工肉瓦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人胃惜。 一個(gè)月前我還...
    沈念sama閱讀 48,308評(píng)論 3 372
  • 正文 我出身青樓泞莉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親船殉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鲫趁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,037評(píng)論 2 355

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