Incorrect key file for table ‘xxx’; try to repair it

2017-04-21 01:29:34 7f1d8c0bd700 InnoDB: Error: Write to file (merge) failed at offset 2095054848.
InnoDB: 1048576 bytes should have been written, only 978944 were written.
InnoDB: Operating system error number 28.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 28 means ‘No space left on device’.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html
2017-04-21 01:29:35 93551 [ERROR] Slave SQL: Worker 7 failed executing transaction ” at master log mysql-bin.001470, end_log_pos 931467087; Error ‘Incorrect key file for table ‘xxx’; try to repair it’ on query. Default database: ‘xxx’. Query: ‘ALTER TABLE xxx ADD xxx TINYINT(3) DEFAULT ‘0’ NOT NULL’, Error_code: 1034
2017-04-21 01:29:35 93551 [Warning] Slave SQL: … The slave coordinator and worker threads are stopped, possibly leaving data in inconsistent state. A restart should restore consistency automatically, although using non-transactional storage for data or info tables or DDL queries could lead to problems. In such cases you have to examine your data (see documentation for details). Error_code: 1756

报错信息如上,日志提示空间不够,df -h 确认 MySQL datadir 所在磁盘空间是足够的。后确认是修改表定义需新建临时表,临时表目录为 my.cnf 设置中 temdir 的路径(默认为 /tmp),修改该配置后重启 MySQL 服务,问题解决。

filebeat index out of range

filebeat 启动时出现如题报错,同样的配置文件有的机器正常有的机器报错。修改报错那台机器的 filebeat 配置文件重试多次后发现是

导致的报错,把后面的空格去掉,改为

后正常。

疑问:1. 为什么同样的配置文件有的机器报错有的不报错,2 为什么多一个空格会导致这个报错。

补充信息:报错的机器是 CentOS 7.3,正常机器是 CentOS 6.8。

nginx fpm 常见错误对比分析

fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=0 // php-fpm.conf

浏览器 8 秒后返回 504 Gateway Time-out

nginx-error.log
upstream timed out (110: Connection timed out) while reading response header from upstream

 

fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=5 // php-fpm.conf

浏览器 5 秒后返回 502 Bad Gateway

nginx-error.log
recv() failed (104: Connection reset by peer) while reading response header from upstream
fpm-error.log
[pool www] child 5378, script ‘/usr/share/nginx/html/sleep.php’ (request: “GET /sleep.php”) execution timed out (5.793874 sec), terminating

 

fastcgi_read_timeout 8; // nginx.conf
request_terminate_timeout=5 // php-fpm.conf

浏览器返回 500 Internal Server Error
php-error.log
[08-Apr-2017 23:39:44 Asia/Shanghai] PHP Fatal error: Maximum execution time of 1 second exceeded in /usr/share/nginx/html/while_true.php on line 3

convert 命令剪切合并图片

剪切和合并应用两个不同的参数分两次进行处理。

剪切图片使用的命令为:

从原始图片中剪切出 M x N 尺寸(宽为M,高为N)的图片,+a+b 表示以左上角为坐标原点,右和下方向分别为X轴Y轴的点 (a,b) 位置开始。你也可以使用 -a-b 以右下角为坐标原点,左和上为XY轴的坐标系。

合并图片的命令为:

上面命令将图片1和图片2合并得到图片3,左边对齐,垂直方向合并,假设 1.jpg 和 2.jpg 尺寸都为 300 x 400 那么合并得到的图片3尺寸为 300 x 800。

使用

+append 图片在水片方向上合并,得到的图片3尺寸为 600 x 400

 

掌握上面用法就可以很方便的完成类似这样的任务:你分别扫描了身份证正面和反面两张照片,需要将身份证正反面合并到一张照片上去。

参考:http://www.imagemagick.org/Usage/crop/

Yii2 ajax 自动跳转至登录页面原理分析

某些路由(页面,下同)需要登录才能访问,我们通常使用访问控制过滤器(Access Control Filter)来进行处理。如果未登录用户访问对应路由,会返回 302 并带上 Lacation 的 HTTP Header,此时浏览器会跳转到对应页面。当使用 ajax 请求需要登录的路由时,页面也会跳转到登录页面。仔细查看 Response Header 会发现存在名为 X-Redirect 的 HTTP Header,yii 框架自带的 yii.js(YiiAsset) 里有如下逻辑: