2016年11月

Windows 10 UAC设置卡死Bug

最新的:Microsoft Windows [版本 10.0.14393],安装成功之后第一件事情就是将“更改用户账户控制设置”设置为“从不通知”。点确认后卡死,问题是ChsIME.exe微软拼音造成。更换其他第三方输入法后问题解决。看来Windows 10 is still buggy。

WIN10 UAC卡死.png

MySQL 5.6从*.ibd文件恢复数据

MySQL我最常用的两种数据引擎是MyISAM和InnoDB。最近在本地WAMP环境下安装了WordPress博客。某一天发现无法登录WordPress后台了,直接跳转到WordPress的安装页面。看来是PHP无法连接MySQL数据库造成的。我继续用phpMyAdmin、SQLyog等客户端工具连接数据库查询WordPress表数据都返回一句法文错误信息,翻译过来的意思是“该数据表不存在”。打开 D:\wamp\bin\mysql\mysql5.6.17\my.ini配置文件,找到lc-messages=fr_FR修改为lc-messages=en_US 保存信息变为看得懂的英文。但是奇怪的是show tables 显示出来有的表,但是运行select全部报错table doesn't exist.

又打开Windows事件查看器(eventvwr.msc),筛选事件源为MySQL,发现了大量这种的警告信息:

InnoDB: Cannot open table wordpress/wp_posts from the internal data dictionary of InnoDB though the .frm file for the table exists. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting.html for how you can resolve the problem.

经过两天两夜的大量Gooogle,发现此问题充斥着网络,貌似是一个普遍问题,而且是一个对MySQL新手来说容易犯的错误。MyISAM数据表.frm可以从一个服务器移动到另外一个服务器,而InnoDB数据引擎则不能直接移动,否则会出现tablespace不一致的问题。这种情况下日志会这种报错:

InnoDB: in InnoDB data dictionary has tablespace id N,
InnoDB: but tablespace with that id or name does not exist. Have
InnoDB: you deleted or moved .ibd files?
InnoDB: This may also be a table created with CREATE TEMPORARY TABLE
InnoDB: whose .ibd and .frm files MySQL automatically removed, but the
InnoDB: table still exists in the InnoDB internal data dictionary.

了解了这么多,中文网络里面的一般做法就是修改my.ini,加上

[mysqld]
innodb_force_recovery = 1

innodb_force_recovery的值可以是1、2、3、4、5、6,具体的含义参见:https://dev.mysql.com/doc/refman/5.0/en/forcing-innodb-recovery.html。但是我尝试了这样的方法还是找不到数据表。看来从MySQL服务器配置上恢复数据的方法走不通。我想尝试直接通过InnoDB的数据文件ibdata1、ib_logfile0、ib_logfile1,还是wordpress目录下的wp_posts.frm和wp_posts.ibd文件直接恢复。用Winhex分辨查看了以上文件,发现wp_posts.ibd里面有明文的数据内容(记得将Winhex的Charset设置为UTF-8)。然后Google到了从ibd文件恢复数据的方法。此方法略微“复杂”,以下我详细的写一下:

首选需要Linux系统,我这里安装的是最新的Debian 8.0 Jessie,直接通过apt-get加软件库来安装

加入apt签名:

apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A

将以下内容添加到/etc/apt/sources.list,VERSION是版本代码,比如wheezy ,jessie等。

deb http://repo.percona.com/apt VERSION main deb-src http://repo.percona.com/apt VERSION main

更新一下: $ apt-get update

安装Percona Server、Client

$ apt-get install percona-server-server-5.6 percona-server-client-5.6

注意:Percona Server不能和MySQL Server同时共存,安装Percona前请先移除MySQL Serer。

安装完成后登录MySQL

mysql -uroot -ppassword

创建一个数据库

mysql> create database tunps_com; mysql> use tunps_com;

将我丢失数据的WordPress数据库表结构SQL文件导到刚才建的tunps_com数据库wp_posts表。

这个时候数据库目录下会有一个wp_posts.ibd文件。

分离数据表的数据和结构:ALTER TABLE wp_posts DISCARD TABLESPACE;

此时我们会看到该数据表的ibd文件消失了。

把要恢复的ibd文件复制到新的数据表文件夹中,然后使用:ALTER TABLE wp_posts IMPORT TABLESPACE;来建立关系。 此时有可能会报错,报错内容为:

[SQL]ALTER TABLE wp_posts IMPORT TABLESPACE;
[Err] 1030 - Got error -1 from storage engine

此时需要查看mysql错误日志,发现:

InnoDB: how you can resolve the problem.
170728 11:10:23
InnoDB: Error: tablespace id and flags in file ‘.\tunps_com\wp_posts.ibd’ are 4 and 0, but in the InnoDB
InnoDB: data dictionary they are 3 and 0.

错误表示两个表的tablespace id不一致。旧数据表的tablespace id为4,但目前的数据表的tablespace id为3。那么接下来要做的是使tablespace id一致。

比较tablespace id,使得tablespace id一致

如果新的表的tablespace id 小于待恢复表的tablespace id,则可以通过创建表来增加tablespace id,最后在待恢复表的tablespace id处再创建一次members表,再分离表结构和表数据,把待恢复的ibd文件复制到新的表文件夹中,再把结构和数据建立关系,如果此时没报错,则关系已建立完成。
批量生成数据表可使用php脚本来完成:

<?php
    $dsn = "mysql:host=localhost;port=3306;charset=utf8;dbname=blueshop";
    $user = 'root';
    $password = 'root';
    $pdo = new PDO($dsn,$user,$password);

    $sql = "";
    for($i=1;$i<12;$i++){
        $sql .= "create table i{$i}(id int)engine innodb;";
    }
    $pdo->exec($sql);
?>

如果新的表的tablespace id 大于待恢复表的tablespace id,则有两种方案,第一,重建一个mysql服务,则tablespace id就会从1开始,则必定小于待恢复表的tablespace id。第二,找到待恢复表的tablespace id所对应的那个表,然后把这个表改成与待恢复表的结构和表名。

备份数据

关系建立完成,但还是不能查询数据,此时需要更改mysql配置文件, 添加或修改:innodb_force_recovery=5,不行则1-6都尝试一遍。待数据可查询时,立即备份即可。

参考:
https://www.percona.com/blog/2013/11/05/how-to-recover-an-orphaned-ibd-file-with-mysql-5-6/

Typecho实现键盘左箭头右箭头按键切换到上一篇下一篇文章

github gist: https://gist.github.com/fr33m44/f2abc5a5204e0d14cdf915c56d5ffb10

if(document.getElementsByClassName('post-near')[0].childNodes[1].innerHTML != '上一篇: 没有了')
    var pre_link = document.getElementsByClassName('post-near')[0].childNodes[1].childNodes[1].href;
if(document.getElementsByClassName('post-near')[0].childNodes[3].innerHTML != '上一篇: 没有了')
    var next_link = document.getElementsByClassName('post-near')[0].childNodes[3].childNodes[1].href;
document.onkeydown=function(e){
    if(e.keyCode==37 && pre_link != undefined)
        window.location = pre_link;
    else if (e.keyCode ==39 && next_link != undefined)
        window.location = next_link;
};

jqka2手机使用史

2001 摩托罗拉 V998 , 500mAh 手机通话时间 120-180分钟 手机待机时间 40-100小时 上市日期 2000年03月
初中,看父辈们们用过,当时打电话8毛一分钟。
摩托罗拉 V998

2004 TCL 3188,锂电池,550mAh 通话时间180分钟;待机时间150小时初中,主打女性手机,红色镶钻。妈妈的第一部手机。(初中)

TCL 3188.jpg

2004 波导黑白屏直板, 年代久远,型号忘记了,网络上也无法搜索到机型图片,只能打电话、发短信、玩贪食蛇、铃声预制了几个,24和弦?主要用来和家长联系。(高一)

2005 三星SGH-E348, TFT 96×64像素 GSM900/1800 蓝牙 220小时待机 30万像素摄像头 支持MP3、AAC格式 姐姐送给我的,感觉用起来一般。没啥特别印象。(高中)

三星SGH-E348.jpg

2005 摩托罗拉V3ie,2.2英寸 80ppi 65536色TFT材质,分辨率为96×96像素 最高可支持512M移动内存卡
支持热插拔T-Flash卡 123万像素 首次进入彩屏时代,一代经典的“刀锋”超薄设计的折叠手机,分辨率为176×220像素,6万色TFT屏、72和弦。每次打电话大拇指翻盖是一种帅得掉渣的动作。(高中)

摩托罗拉V3ie.jpg

2006 NEC N830,240×320像素(QVGA)屏幕 运存28MB,130万像素 内置闪光灯 GPRS Class 8 支持3GPP和MPEG4视频 姐夫给我的手机,高三,那个时候迷上了wap上网,移动2G办理了无限流量卡,后来取消之后,我的sim卡上课被同学们接过来接过去。(高三)

NEC N830.png

2006 摩托罗拉MOTO L7,支持JAVA,可惜运行速度很慢,一直感觉L7用起来很卡。(大一)

摩托罗拉MOTO L7.png

2007 黑莓7230,65536色TFT彩色屏幕;240×160像素,2.8英寸 Intel XScale processor 2003上市 当时对智能手机很感兴趣,淘宝当时才兴起,花300块淘的二手洋垃圾,玩了几个月,300块卖掉。(大二)

黑莓7230.png

2007 诺基亚 N72 ¥2000 2.1英寸的26万色176×208 TFT, Symbian 8、S60v2 CPU 220MHz 200万像素摄像头 闪光灯 1200x1600像素分辨率的照片 支持352×288像素的有声视频拍摄 德州仪器TI OMAP1710,主频220HMz 64和弦铃声 运存20MB 使用时间 1年 弃用原因:丢失。滑动后盖直接打开照相机,当时的诺基亚的工业设计真的没谁了。第一次接触塞班系统,算是半智能机,可以安装sis软件。没有上N73是因为:穷。(大三)

诺基亚 N72.png

2008 索爱k510c,26万色TFT屏;128×160像素;1.8英寸 750mAh 40和弦 28MB Java MIDP 2.0 键盘中间的导航键真心好用。弃用原因:丢失。(大学毕业)

索爱k510c.png

2010.06.12 HTC Touch Diamond,2.8英寸 高通 MSM7200 528MHz WIFI 480x640像素 GPRS,EDGE,HSDPA
320万像素 CMOS 900mAh GPS 3G手机 电脑城购买,WM6.1 Touch FLO 3D 系统,电阻屏,触摸手感不能直视。弃用原因:垃圾电阻屏

HTC Touch Diamond.png

2011 诺基亚8600luna,1600万色彩屏 2.0英寸QVGA240 x 320 三姨淘汰下来的备用机,沉,价格贵,质感很不错,性价比渣渣。

诺基亚8600luna.png

2012.07.16 HTC One X,Android4.0 NVIDIA TEGRA3 四核 1GB RAM 4.7寸 7201280 super LCD 前置130W 后置800W
第一台安卓系统,Sense UI 1800mAH 。弃用原因:
进水*,自行淘宝换屏失败后丢弃。

HTC One X.jpg

2013 iPhone 4,妹妹换4S淘汰下来的手机。

iPhone 4.png

2014.04.02 小米2S,16GB,白色,可拆卸电池,易用性比OneX高了太多,喜欢上了MIUI。

小米2S.png

2015.03.27 魅蓝NOTE,没有经典安卓三键,用起来很捉急。flyme卡得一逼。用了5个月卖掉

魅蓝NOTE.png

2015.08.19 小米NOTE,白色64GB双网通,5.7寸大屏,单手操作还是不习惯。

小米NOTE.jpg

2016.09.01 一加3,发热,耗电快,硬件牛逼,系统ROM毫无优化可言,垃圾手机,用了2个星期闲鱼卖掉

一加3.png

2016.09.29 小米5 黑色高配,换回5寸屏幕。大小合适。有时候导航没信号,重启系统可解决。转给妈妈用,2个月后荷塘月色三轮车上丢失。

小米5.jpg

2017.06.18 iPhone6S 咸鱼买了二手64G粉色6s国行,2400,免费到apple售后换了电池(6s电池更换计划)目前任何问题使用至今。

2017.09.20 iPhone6S 因为给老妈的mi5丢失,咸鱼又买了一个6s,2150,64gb粉色国行。

2018.04.06 iPhone6S 老婆手机iPhone7 128GB国行被偷,咸鱼又买了一个黑色6s64gb港行,1618,我开始用这个黑色的,粉色的给老婆。

6s pink 64GB.jpg