day09

一、日志管理

1.1 排错 (错误日志)

1.1.1 作用:

记录启动、关闭、日常运行过程中,状态信息,警告,错误

1.1.2 怎么配置:

默认位置:DATADIR/hostname.err
配置方式:vim /etc/my.cnf
log_error=/data/mysql/data/mysql.log
使用方法:查看[error] 上下文

1.2 数据恢复:bin_log(二进制日志)

1.2.1 作用:

数据恢复
主从复制

1.2.2 如何配置:

log_bin:
        (1) 开关
        (2) 设定存放位置
server_id:
        (1) 5.6 中不需要
        (2) 5.7 使用以上参数时必须加server_id
生产要求:日志要和数据分开存放

基础参数查看:

注意:MySQL默认是没有开启二进制日志文件的。
mysql> select @@log_bin;   ###开关
+-----------+
| @@log_bin |
+-----------+
|         1 |
+-----------+
1 row in set (0.00 sec)

mysql> select @@log_bin_basename;  ###日志路径及名字
+------------------------+
| @@log_bin_basename     |
+------------------------+
| /data/binlog/mysql-bin |
+------------------------+
1 row in set (0.00 sec)

mysql> select @@server_id;   ###服务ID号
+-------------+
| @@server_id |
+-------------+
|           6 |
+-------------+
1 row in set (0.00 sec)

mysql> select @@binlog_format;   ###二进制日志格式
+-----------------+
| @@binlog_format |
+-----------------+
| ROW             |
+-----------------+
1 row in set (0.00 sec)

mysql> select @@sync_binlog;   ###双一标准之二
+---------------+
| @@sync_binlog |
+---------------+
|             1 |
+---------------+
1 row in set (0.00 sec)

mysql> 

1.2.3 开启二进制日志文件

1. 创建日志目录
mkdir /data/binlog
chown -R mysql.mysql /data/binlog
2. 编辑配置文件
[root@db01 ~]# vim /etc/my.cnf 
log_bin=/data/binlog/mysql-bin
server_id=6
3. 重启数据库生效
[root@db01 mysql]# /etc/init.d/mysqld restart

1.2.4 如何查看配置

mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name                   | Value                        |
+---------------------------------+------------------------------+
| log_bin                         | ON                           |
| log_bin_basename                | /data/binlog/mysql-bin       |
| log_bin_index                   | /data/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF                          |
| log_bin_use_v1_row_events       | OFF                          |
| sql_log_bin                     | ON                           |
+---------------------------------+------------------------------+
6 rows in set (0.00 sec)

mysql> 

1.2.4 binlog记录了什么?

1. 大面上说明:

记录了数据库中所有变更类的操作
DDL(数据定义语言)
DCL(数据控制语言)
DML(数据执行语言)

2. 详细的说明

(1) 对于DDL(数据定义语言)和DCL(数据控制语言)语句,记录发生过的语句
(2) DML(IUD)
前提: 已经提交的事务IUD
关于记录格式:
ROW      | RBR 行记录模式,记录的是行的变化
STATEMENT  |  SBR 语句记录模式 几句操作语句本身
MIXED      | MBR 混合记录模式

电话面试题:

delete from city where id>1000;
RBR:逐行记录日志,日志量很大,但是够严谨,不会出现记录错误
SBR:只记录语句本身,日志量很少,可读性较强,对于函数类的操作,将来恢复时会造成错误
5.7版本:默认是RBR,是企业建议模式

1.2.5 二进制日志事件(event)

1. 简介:

二进制日志的最小记录单元
对于DDL、DCL,一个语句就是一个event
对于DML语句来说,只记录已提交的事务

例如以下列子,就被分为了4个event
          position号码
begin;      120  - 340
DML1        340  - 460
DML2        460  - 550
commit;     550  - 760

2. event的组成

三部分构成:
(1) 事件的开始标识
(2) 事件的内容
(3) 事件的结束标识

Position:
开始标识:at 194
结束标识:end_log_pos 254
194? 254?
某个事件在binlog中的相对位置号
位置号的作用是什么?
为了方便我们截取事件

1.2.6 二进制日志位置的查看

1.查看二进制日志所在位置

mysql> show variables like '%log_bin%';
+---------------------------------+------------------------------+
| Variable_name                   | Value                        |
+---------------------------------+------------------------------+
| log_bin                         | ON                           |
| log_bin_basename                | /data/binlog/mysql-bin       |
| log_bin_index                   | /data/binlog/mysql-bin.index |
| log_bin_trust_function_creators | OFF                          |
| log_bin_use_v1_row_events       | OFF                          |
| sql_log_bin                     | ON                           |
+---------------------------------+------------------------------+
6 rows in set (0.00 sec)

mysql> 
[root@db01~]# ll /data/binlog/
总用量 16
-rw-r----- 1 mysql mysql 217 6月  25 15:48 mysql-bin.000011
-rw-r----- 1 mysql mysql 217 6月  25 15:48 mysql-bin.000012
-rw-r----- 1 mysql mysql 194 6月  25 15:48 mysql-bin.000013
-rw-r----- 1 mysql mysql  90 6月  25 15:48 mysql-bin.index

2.查看正在使用的二进制日志

mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000011 |       217 |
| mysql-bin.000012 |       217 |
| mysql-bin.000013 |       194 |
+------------------+-----------+
3 rows in set (0.00 sec)

mysql> 

log_name:目前MySQL存在的二进制日志的名字
File_size:目前MySQL用到哪个position号

1.2.7查看二进制文件内容

show master status   ###确认当前再用的binlog
show binlog events in '%mysql-bin.000013%';  ###查看7号binlog事件
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                        |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000013 |      194 |              |                  | 3955eabf-8d95-11e9-b6fa-000c296913bb:1-7 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)

mysql> show binlog events in 'mysql-bin.000013';
+------------------+-----+----------------+-----------+-------------+------------------------------------------+
| Log_name         | Pos | Event_type     | Server_id | End_log_pos | Info                                     |
+------------------+-----+----------------+-----------+-------------+------------------------------------------+
| mysql-bin.000013 |   4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4    |
| mysql-bin.000013 | 123 | Previous_gtids |         6 |         194 | 3955eabf-8d95-11e9-b6fa-000c296913bb:1-7 |
+------------------+-----+----------------+-----------+-------------+------------------------------------------+
2 rows in set (0.00 sec)

mysql> 

注释:每一行都是一个事件
Log_name:binlog文件名
Pos:开始的position号 *****
Event_type:事件类型
Server_id:mysql服务号标识
End_log_pos:事件的结束位置号 *****
Info:事件内容*****

2. 查看二进制日志内容

[root@db01 /data/binlog]# mysqlbinlog mysql-bin.000013|grep -v "SET" >/tmp/aa.txt
[root@db01 /data/binlog]# mysqlbinlog --base64-output=desode-rows -vvv mysql-bin.000013

1.2.8 基于二进制日志数据恢复案例

1. 如何按需截取日志?

1.基于position号的截取 *****
--start-position=xxx
--stop-position=xxx

截取二进制日志的核心在于找起点和终点
[root@db01 ~]# mysqlbinlog --start-position=219 --stop-position=322 /data/binlog/mysql-bin.000002 >/tmp/bin.sql
恢复:
    mysql> drop database oldboy1;
    mysql> show databases;
    mysql> set sql_log_bin=0;
    mysql> source /tmp/bin.sql
2.基于时间点的截取(了解)
--start-datetime
--stop-datetime
例子:
条件:
#1. 
create database binlog charset utf8mb4;
#2. 
use binlog;
create table t1(id int);
#3. 
insert into t1 values(1);
commit;
insert into t1 values(2);
commit;
insert into t1 values(3);
commit;
#4. 
drop database binlog;
----------------------------------------------
解决:
1.查看当前使用的binlog
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------------------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------------+----------+--------------+------------------+-------------------------------------------+
| mysql-bin.000013 |     1128 |              |                  | 3955eabf-8d95-11e9-b6fa-000c296913bb:1-11 |
+------------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.00 sec)
2.查看事件
mysql> show binlog events in 'mysql-bin.000013';
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| Log_name         | Pos  | Event_type     | Server_id | End_log_pos | Info                                                               |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
| mysql-bin.000013 |    4 | Format_desc    |         6 |         123 | Server ver: 5.7.26-log, Binlog ver: 4                              |
| mysql-bin.000013 |  123 | Previous_gtids |         6 |         194 | 3955eabf-8d95-11e9-b6fa-000c296913bb:1-7                           |
| mysql-bin.000013 |  194 | Gtid           |         6 |         259 | SET @@SESSION.GTID_NEXT= '3955eabf-8d95-11e9-b6fa-000c296913bb:8'  |
| mysql-bin.000013 |  259 | Query          |         6 |         333 | BEGIN                                                              |
| mysql-bin.000013 |  333 | Table_map      |         6 |         380 | table_id: 114 (binlog.t1)                                          |
| mysql-bin.000013 |  380 | Write_rows     |         6 |         420 | table_id: 114 flags: STMT_END_F                                    |
| mysql-bin.000013 |  420 | Xid            |         6 |         451 | COMMIT /* xid=888 */                                               |
| mysql-bin.000013 |  451 | Gtid           |         6 |         516 | SET @@SESSION.GTID_NEXT= '3955eabf-8d95-11e9-b6fa-000c296913bb:9'  |
| mysql-bin.000013 |  516 | Query          |         6 |         590 | BEGIN                                                              |
| mysql-bin.000013 |  590 | Table_map      |         6 |         637 | table_id: 114 (binlog.t1)                                          |
| mysql-bin.000013 |  637 | Write_rows     |         6 |         677 | table_id: 114 flags: STMT_END_F                                    |
| mysql-bin.000013 |  677 | Xid            |         6 |         708 | COMMIT /* xid=890 */                                               |
| mysql-bin.000013 |  708 | Gtid           |         6 |         773 | SET @@SESSION.GTID_NEXT= '3955eabf-8d95-11e9-b6fa-000c296913bb:10' |
| mysql-bin.000013 |  773 | Query          |         6 |         847 | BEGIN                                                              |
| mysql-bin.000013 |  847 | Table_map      |         6 |         894 | table_id: 114 (binlog.t1)                                          |
| mysql-bin.000013 |  894 | Write_rows     |         6 |         934 | table_id: 114 flags: STMT_END_F                                    |
| mysql-bin.000013 |  934 | Xid            |         6 |         965 | COMMIT /* xid=892 */                                               |
| mysql-bin.000013 |  965 | Gtid           |         6 |        1030 | SET @@SESSION.GTID_NEXT= '3955eabf-8d95-11e9-b6fa-000c296913bb:11' |
| mysql-bin.000013 | 1030 | Query          |         6 |        1128 | drop database binlog                                               |
+------------------+------+----------------+-----------+-------------+--------------------------------------------------------------------+
19 rows in set (0.00 sec)
3.截取日志
[root@db01/data/binlog]# mysqlbinlog --start-position=384 --stop-position=1502 /data/bin/mysql-bin.000007 >/tmp/bak.sql
4.进行恢复
mysql> set sql_log_bin=0;
Query OK, 0 rows affected (0.00 sec)

mysql> source /tmp/binlog.sql;
5.验证:
mysql> use binlog
Database changed
mysql> select * from t1;
+------+
| id   |
+------+
|    1 |
|    2 |
|    3 |
+------+

1.2.9 开启GTID功能的二进制日志管理

0. 思考:下面怎么恢复?

#1. 
create database binlog charset utf8mb4;
#2. 
use binlog;
create table t1(id int);
#3. 
insert into t1 values(1);
commit;
insert into t1 values(2);
commit;

truncate table t1;

insert into t1 values(3);
commit;
#4. 
drop database binlog;
基于position号恢复需要多次截取,找起点和终点过程很复杂

1. 什么是GTID(全局事务编号)

5.6版本新加的特性,5.7中做了加强
5.6中不开启,没有这个功能
5.7中的GTID,即使不开也会自动生成
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'

是对一个已提交事务的编号,并且是一个全局唯一的编号。

它的官方定义如下:
GTID = source_id :transaction_id
7E11FA47-31CA-19E1-9E56-C43AA21293967:29

说明:
DDL、DCL:一条语句(事件)就是一个事物,占一个GTID号
DML:一个完整的事物(begin-->commit),是一个事物,站一个GTID号

2. 开启GTID

vim /etc/my.cnf
gtid-mode=on
enforce-gtid-consistency=true
修改之后重启
systemctl restart mysqld

3. 查看本机GTID信息

mysql> create database gg;
mysql> show master status;
mysql> use gg;
mysql> create table t1 (id int);
mysql> insert into t1 values(1);
mysql> commit;
mysql> insert into t1 values(2);
mysql> commit;
mysql> insert into t1 values(3);
mysql> commit;
drop database gg; 

4. 基于GTID截取二进制日志

[root@db01~]# mysqlbinlog --skip-gtids --include-gtids='3955eabf-8d95-11e9-b6fa-000c296913bb:1-5' /data/binlog/mysql-bin.000013 >/tmp/ddd.sql
注意:以上日志截取出来的日志不能直接恢复?为什么?
gtid的幂等性

5.正确的截取方法是:

mysqlbinlog --skip-gtids --include-gtids='3955eabf-8d95-11e9-b6fa-000c296913bb:1-10' /data/binlog/mysql-bin.000013 >/tmp/as.sql

跳过某些gtid不截取
mysqlbinlog --skip-gtids --include-gtids='ee956c61-9653-11e9-8518-000c29099eb6:1-5' --exclude-gtids='ee956c61-9653-11e9-8518-000c29099eb6:2,ee956c61-9653-11e9-8518-000c29099eb6:4' /data/binlog/mysql-bin.000003 >/tmp/gtids.sql

1.2.10 二进制日志其他操作

1. 临时关闭

set sql_log_bin=0;
说明:
临时关闭二进制日志记录,退出mysql窗口可以恢复
做数据恢复之前,使用以上参数

2. 自动清理

参数:
mysql> select @@expire_log_days;
设置依据:
至少是一个全备周期+1,企业建议至少两个全备周期+1

怎么设置?
(1) 临时设置,重启时效:
mysql> set global expire_logs_days=8;
(2) 永久设置,重启生效:
vim /etc/my.cnf
expire_logs_days=8

3. 手工清理

PURGE BINARY LOGS BEFORE now() - INTERVAL 3 DAY;
PURGE BINARY LOCK TO 'mysql-bin.000013';
注意:不要手工rm binlog文件
1.my.cnf binlog关闭掉,启动数据库
2.把数据库关闭,开启binlog,启动数据库
删除所有binlog,并 从000001开始重新记录日志

删除所有binlog,从000001开始(危险!!!)
mysql> reset master;

4. 日志滚动

重启数据库
flush logs
mysqladmin -uroot -p flush-logs
show variables like '%max_binlog_size%';
备份加一些参数,会触发滚动日志

1.3 优化相关日志-slowlog

1.3.1 作用

记录慢SQL语句的日志,定位低效SQL语句的工具日志

1.3.2 开启慢日志(默认没有开启)

开关:
slow_query_log=1
文件位置及名字:
slow_query_log_file=/data/mysql/slow/slow.log
设定慢查询时间:
long_query_time=0.1
没走索引的语句也记录:
log_queries_not_using_indexes

vim /etc/my.cnf
slow_query_log=1 
slow_query_log_file=/data/mysql/slow.log
long_query_time=0.1
log_queries_not_using_indexes
systemctl restart mysqld

1.3.3mysqldumpslow 分析慢日志

mysqldumpslow -s c -t 10 /data/mysql/data/slow.log

1.3.4 第三方工具(自己扩展)

https://www.percona.com/downloads/percona-toolkit/LATEST/
yum install perl-DBI perl-DBD-MySQL perl-Time-HiRes perl-IO-Socket-SSL perl-Digest-MD5
toolkit工具包中的命令:
./pt-query-diagest  /data/mysql/slow.log

Anemometer基于pt-query-digest将MySQL慢查询可视化

备份恢复与迁移


一、DBA在数据库备份恢复方面的职责

1.1 设计备份策略

全备
增量

时间
自动

1.2 日志备份检查

备份存在性
备份空间够用否

1.3 定期恢复演练(测试库)

一季度 或者 半年

1.4 故障恢复

通过现有备份,能够将数据库恢复到故障之前的时间点

1.5 迁移(非技术)

1.停机时间
2.回退方面

二、备份类型

2.1 热备

在数据库正常业务时,备份数据,并且能够一致性恢复(只能是innodb)
对业务影响非常小

2.2 温备

锁表备份,只能查询不能修改(myisam)
影响到写入操作

2.3 冷备

关闭数据库业务,数据库没有任何变更的情况下,进行备份数据.
业务停止

三、备份方式及工具介绍

3.1 逻辑备份工具

基于SQL语句进行备份
mysqldump(MDP) *****
mysqlbinlog *****

3.2 物理备份工具

基于磁盘数据文件备份
xtrabackup(XBK) :Percona 第三方 *****
MySQL Enterprise Backup(MEB)

四、逻辑备份和物理备份的比较

4.1 mysqldump (MDP)

优点:
1.不需要下载安装
2.备份出来的是SQL,文本格式,可读性高,便于备份处理
3.压缩比较高,节省备份的磁盘空间
缺点:
4.依赖于数据库引擎,需要从磁盘把数据读出
然后转换成SQL进行转储,比较耗费资源,数据量大的话效率较低
建议:
100G以内的数据量级,可以使用mysqldump
超过TB以上,我们也可能选择的是mysqldump,配合分布式的系统
1EB =1024 PB = 1000000 TB

4.2 xtrabackup(XBK)

优点:
1.类似于直接cp数据文件,不需要管逻辑结构,相对来说性能较高
缺点:
2.可读性差
3.压缩比低,需要更多磁盘空间
建议:
>100G<TB

五、备份策略

5.1 备份方式:

全备:全库备份,备份所有数据
增量:备份变化的数据
逻辑备份=mysqldump+mysqlbinlog
物理备份=xtrabackup_full+xtrabackup_incr+binlog 或者 xtrabackup_full+binlog

5.2 备份周期:

根据数据量设计备份周期
比如:周日全备,周1-周6增量
其他:通过主从复制备份

六、逻辑备份工具-mysqldump

6.1 客户端通用命令,和链接有关

-u 
-p 
-S 
-h 
-P 

本地备份连接方式:
mysqldump -uroot -pxxx -S  /tmp/mysql.sock
远程备份的连接方式:
mysqldump -uroot -pxxx -h xxx  -P xxx  

6.2 基本备份参数

-A:全库备份
例子:实现全库备份
[root@db01 ~]# mkdir -p /data/backup
[root@db01 ~]#  mysqldump -uroot -p123 -A -S /tmp/mysql.sock >/data/backup/full.sql
-B:备份 单个库或多个库数据
例子: 备份oldboy和world数据库
[root@db01 ~]#  mysqldump -uroot -p123 -B world oldboy  -S /tmp/mysql.sock >/data/backup/db.sql

库名 表名:备份某个库下的1张或多张表

例子:备份world数据库下的city和country表
[root@db01 ~]# mysqldump -uroot -p123 world city country   -S /tmp/mysql.sock >/data/backup/tab.sql

注意: 此种方法,只会备份建表+插入语句。所以,恢复前需要把库建好,而且要use到库中。

6.3 必加参数(1)

-R         在备份时,同时备份存储过程和函数,如果没有会自动忽略
-E         在备份时,同时备份EVENT,如果没有会自动忽略
--triggers 在备份时,同时备份触发器,如果没有会自动忽略

6.4 必加参数(2)

--master-data=2    
  记录备份开始时 position号 ,可以作为将来做日志截取的起点。 
  功能: 
  1. 记录备份时的position 
  2. 自动锁表 
  3. 配合--single-transaction,减少锁的(innodb引擎)
                             
--single-transaction
  对于innodb的表,实现快照备份,不锁表

6.5 其他(不是必加的,了解下功能即可)

-F 
--set-gtid-purged=auto
auto , on
off 
使用场景:
1. --set-gtid-purged=OFF,可以使用在日常备份参数中.
mysqldump -uroot -p -A -R -E --triggers --master-data=2  --single-transaction --set-gtid-purged=OFF >/data/backup/full.sql

2. auto , on:在构建主从复制环境时需要的参数配置
mysqldump -uroot -p -A -R -E --triggers --master-data=2  --max-allowed-packet=128M --single-transaction --set-gtid-purged=ON >/data/backup/full.sql

--max-allowed-packet=#   
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容

  • 晚上来辆奥迪A3,胎压报警,测量胎压都高,给胎压复位,仪表都是英文,根本搞不懂,叫老师傅下来,也不好弄,后来手机百...
    京心达查晓旭阅读 99评论 0 0
  • 大爱的老师,智慧美丽的班主任,亲爱的众学兄们: 大家好!我是蔡剑锋来自杭州佳能广告,今天是2018.9.1...
    佳能广告阅读 115评论 0 0
  • 早晨天色暗,风雨洗西楼。羊城雨纷纷,急风伞而翻。下雨也不怕,楼宇有酒家。电梯到厅堂,何惧暴雨下。
    甘朝武阅读 66评论 0 0
  • 从我毕业分配到这个学校开始,学校的操场就是始终灰暗暗的,没有一丝生机与活力,让你无论如何是爱不上它...
    鞍山晓军阅读 388评论 0 5