2015年

新的工作需要用到MySQL。Leader让我复制一个数据库用来测试。以前用SQL Server都是直接图形化操作,从A数据库导出到B数据库就可以。Oracle就用expdp和impdp命令进行导出导入。MySQL的话,都是导出SQL脚本,再新建个数据库来执行。

网上找个这个教程:MySQL快速复制数据库的方法 http://www.tudaxia.com/archives/357

教程中只需两部:
1)新建数据库(shell命令)

# mysql -uroot -ppassword
mysql> CREATE DATABASE `newdb` DEFAULT CHARACTER SET UTF8 COLLATE UTF8_GENERAL_CI;

2)复制数据。通过管道的方式把两条命令合并为一条。(shell命令)

# mysqldump db1 -uroot -ppassword --add-drop-table | mysql newdb -uroot -ppassword

当数据很大的时候,建议还是老老实实地先把源数据库的数据备份成文件,再导入新的数据。(shell命令)

# mysqldump db1 -uroot -ppassword --add-drop-table --default-character-set=utf8 > /home/db_export/db1.sql
# mysql newdb -uroot -ppassword < /home/db_export/db1.sql

入手Kobo mini一个月后,选择了放弃,把它转手给更需要它的人。

使用时,深深体会到E-ink屏的低功耗,确实很棒。但是机器本身没有良好的系统与开发平台,更没有良好的网络应用,只能离线看书。这不是我想要的。

国外有开发者移植了Debian上去,也写了E-ink屏与多点触控驱动。但是该系统是在旧版fireware上通过Chroot运行的,如要升级最新fireware,需要定制kernel。搞来搞去,搞不成。

最后甚至考虑放在家里,作为留言板、遥控器之类。但是缺乏中文输入,触摸也不好用,而且现在人手一个智能手机,根本不需要这机器。

E-ink屏的低功耗是非常好的优点,但是应用场合太少了。像Yota Phone这种手机,也不能成为主流。如果再不努力,可能会被其它材质取代。

入手Kobo mini已经快一个星期了。总结一下这家伙吧。

关于机器本身
入手Kobo mini,最主要是便宜,淘宝300不到就能买到。其次是体积小,5吋屏幕,分辨率是800x600,自带WiFi,并且可以换更大的TF卡来实现扩展存储空间。最后就是可以刷Debian。关于刷Debian,刷过后才感受到不是那么美好,这个后面再说。

缺点,首先是没有背光。然后是系统基于Linux开发的,比Android的(例如:Nook Simple Touch)可玩性差很多,开发的难度也高很多。原系统对中文支持差,可以说是不支持。虽然可以外挂字体显示中文文档,但是自带的浏览器却搞不定。并且没有其它可以很好利用网络的应用软件,自带的WiFi基本是没用了。最后就是不支持外部存储扩展,更换内部TF卡要打开后背,很麻烦。当然从一个角度来说,可以更专心地用来看书。特别是刷上Koreader之后。

官方介绍机器的详细配置:
http://www.kobo.com/kobomini#techspecs
Mobile Read的WIKI:
http://wiki.mobileread.com/wiki/Kobo_Mini

系统恢复
机器到手后,点了一下factory reset,机器不断重启且不能进入系统。幸好找到img,刷上就好了。刷好后立马备份一个,以防万一。

把img文件刷到TF卡的教程(英文),关键就是改S/N和把4G的镜像刷入2G卡:
http://www.mobileread.com/forums/showpost.php?p=2597246&postcount=15
img文件下载地址(Google Driver):
https://docs.google.com/file/d/0BxbJNE-fuHAmeGloU3drOXF0WE0/edit

固件升级
这个很简单,机器用USB数据线连上PC,把升级包解压到.kobo目录下,安全断开连接后,系统就自动刷。

固件升级包地址如下(目前mini的最新版本是3.4.1):
http://wiki.mobileread.com/wiki/Kobo_Releases
Kobo 固件升级详解
http://www.by-smart.com/forum.php?mod=viewthread&tid=2828

添加中文支持
机器连接到电脑,建一个fonts文件夹,把喜欢的中文字体复制进去,然后安全断开连接。原生系统看中文书时,选复制进去的中文字体就可以完美支持中文了。但是浏览器的中文显示问题解决不了。

Kobo系列书库乱码及字体替换解决方案
http://www.by-smart.com/forum.php?mod=viewthread&tid=3776

安装Kobo Start Menu
第三方的系统中,Kobo Start Menu算是兼容性比较好的了。而且界面都是调用sh脚本文件 + html文件的方式,方便修改。缺点是界面比较丑,简直就是没有做界面。

Kobo Start Menu官方介绍(英文):
http://www.mobileread.com/forums/showthread.php?t=233259
目前最新版本及安装方法(英文):
http://www.mobileread.com/forums/showpost.php?p=2980759&postcount=591

安装Koreader
个人感觉Kobo上,Koreader是最好的阅读软件了(确实也没几个可以选择了)。

Koreader的介绍
http://www.hi-pda.com/forum/viewthread.php?tid=1078988
Koreader的安装使用贴士——该帖适用于Kobo全系列机型
http://bbs.cooldu.net/forum.php?mod=viewthread&tid=1253
Koreader下载地址
https://github.com/koreader/koreader/wiki/Download
字典下载,zh_CN 简体中文词典
http://abloz.com/huzheng/stardict-dic/zh_CN/

安装Vlasovsoftlauncher
Vlasovsoftlauncher集成了几个游戏(数独、国际象棋、国际跳棋、黑白棋、推箱子等),无聊时可以玩玩。还集成了Coolreader。不过已装了Koreader,就对Coolreader不感冒了。

KOBO系列产品CoolReader安装教程(参考方法二)
http://www.cooldu.net/forum.php?mod=viewthread&tid=1495&page=1
Vlasovsoftlauncher各版本安装包下载链接
http://vlasovsoft.triolan.com.ua/files/builds_en.html
安装方法原帖链接
http://wiki.vlasovsoft.net/doku.php?id=en:pbchess-1.2.6#dokuwiki__top

刷Debian系统
试着刷上该系统,但发现操作起来各种不适应,系统很多地方都没有针对本机器进行优化。最后还是刷回原版系统。

Kobo as a Linux tablet(系统作者的Blog)
https://sites.google.com/site/gibekm/hardware/kobo/kobo-as-tablet
系统作者在论坛上发的帖
http://www.mobileread.com/forums/showthread.php?t=222123
另一个详细安装教程,附Debian镜像下载地址
http://robotsfuckyeahalloneword.svbtle.com/debian-on-kobo-mini

至此,应付看书应该没问题了。但是我希望能运行Debian,或者开发更多的应用。那么,只能继续折腾了。

用Oracle导出导入数据,以前用exp和imp总是报字符集的错误。后来查了下,Oracle 10g新增了expdp(导出)和impdp(导入)两个工具,而它们会自动根据数据库的配置来设置导出文件的字符集,就是可以无视客户端的字符集设置了。但是有个缺点,导出文件只能放在服务器上。这个问题不大,只要设好目录及相关权限就可以了。

以下例子,假设把USER_A的数据库,复制成USER_B的数据库。

首先,看一下已定义好的目录。如果有需要就新增一个。新增前要授权用户拥有“create any directory”的权限。

--查看已定义的文件夹
select * from dba_directories;

--查看用户“USER_A”的权限
select * from dba_sys_privs where grantee='USER_A';

--授创建文件夹的权限
grant create any directory to USER_A;

--创建目录
create or replace directory NEW_DIR as '/tmp';

进行导入导出之前,要授权相关用于拥有读写文件夹的权限。USER_A要导出数据,那他应该有“写”文件夹的权限;USER_B要导入数据,他要有“读”文件夹的权限。嫌麻烦的话,可以同时赋予文件夹的读写权限。

--授权用户“USER_A”拥有文件夹“NEW_DIR”的读写权限
grant read,write on directory NEW_DIR to USER_A;

--授权用户“USER_A”只有文件夹“NEW_DIR”的写权限
grant write on directory NEW_DIR to USER_A;

--授权用户“USER_B”只有文件夹“NEW_DIR”的读权限
grant read on directory NEW_DIR to USER_B;

导出导入的相关参数,查一下就知道了,这里只是操作该用户的所有对象。其中impdp的参数中,remap_schema是把源用户转换成目标用户(格式是 源用户:目标用户),remap_tablespace是把源表空间转换为目标表空间(格式是 源表空间:目标表空间)。以下命令需要在服务器的命令窗口执行。

--导出备份文件,USER_A的数据库
expdp USER_A/PASSWORD@sid schemas=USER_A directory=NEW_DIR dumpfile=user_a_backup.dmp

--导入备份文件,把USER_A的数据库导入到USER_B的数据库
impdp USER_B/PASSWORD@sid remap_schema=USER_A:USER_B remap_tablespace=USER_A_TS:USER_B_TS directory=NEW_DIR dumpfile=user_a_backup.dmp

参考资料:
exp/imp 与 expdp/impdp 对比 及使用中的一些优化事项
http://blog.csdn.net/tianlesoftware/article/details/6093973

ORACLE expdp/impdp详解(原创)
http://czmmiao.iteye.com/blog/2041703

oracle 查看 用户,用户权限,用户表空间,用户默认表空间
http://it4j.iteye.com/blog/2002433

在“搬瓦工”上部署了ownCloud 7,记录一下相关的东西吧。采用 Debian 7 x86_64 + Nginx 部署。

服务器安装
由于ownCloud 7的官方文档很齐全,所以基本按照教程就能顺利部署了。

1)在apt配置增加分发包安装地址,然后用apt安装。会提示相关依赖包,一并安装。命令如下:

sudo echo "deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /" >> /etc/apt/sources.list.d/owncloud.list
apt-get update
apt-get install owncloud

用apt的好处是,升级方便。

2)Nginx配置。这个我找了好久,原来官方文档就已经说明清楚了。
Nginx Configuration — ownCloud Administrators Manual 7.0 documentation
http://doc.owncloud.org/server/7.0/admin_manual/installation/configuration_nginx.html
按照文档内容部署好,重启一下Nginx就可以了。由于StartSSL的证书申请失败,只能先放弃https。

3)初次配置。登录部署好的OwnCloud,按照提示操作即可。

客户端安装
我的移动设备就只有Android手机和平板了。虽然Android客户端是开源的,但是官方提供的下载地址是Google Play的收费版。由于不能付费购买,就只好自己编译。但我比较懒,幸好网上有提供编译好的版本。链接如下:
ownCloud Synchronization client - F-Droid
https://f-droid.org/repository/browse/?fdid=com.owncloud.android

部署个ownCloud也纯粹是玩玩而已。对于一个国外(速度慢)廉价(空间小)VPS来说,实用性还是不大。但是ownCloud支持Google Drive(15GB免费)、Dropbox(2GB免费)、FTP等扩展,其实用性大大提升!

前段时间把自己的小玩意迁移到GitHub,于是学了一下git。把相关的教程整理一下。

1)git - 简明指南
http://rogerdudler.github.io/git-guide/index.zh.html
这个教程应该是最简单明了,没有之一。几分钟就看完。还有多国语言版。

2)Learn Git Branching
http://pcottle.github.io/learnGitBranching/
在线学习并操作git命令。图形化界面,非常适合初学者。

3)Git教程 - 廖雪峰的官方网站
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000
篇幅不长的教程,号称“史上最浅显易懂的Git教程”。教程中,作者把git相关的问题,该说的都说清楚了。

4)Pro Git中文版
https://www.progit.cn/
基本上关于Git的详细内容都在这本书了。如果看了上面的教程,仍有疑问,那么这本书应该都能解决。

现在最方便最便宜的存储,当属网盘了。于是想,是否可以利用来作为VPS的日常备份?Google了一下,很多教程。本来想用百度盘,毕竟2TB的免费空间肯定用不完。但是想想,还是用国外的吧,速度会更快。Google Drive的免费空间有15GB,而且已有了开源的同步工具,就选它了。

以下教程已经说得很详细了:
VPS每日自动备份到Google Drive
http://eamin.net/vps%E6%AF%8F%E6%97%A5%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD%E5%88%B0google-drive/

按照教程去配置同步工具grive,修改了一下备份脚本,如下(主要是去掉了数据库文件的加密操作):

[code]
#### begin file autobackup.sh ##########################
#!/bin/bash
# from http://eamin.net/vps%E6%AF%8F%E6%97%A5%E8%87%AA%E5%8A%A8%E5%A4%87%E4%BB%BD%E5%88%B0google-drive/
# begin settings
# MySQL user
MYSQL_USER=ro
# MySQL password
MYSQL_PASS=123
# backup directory
BACKUPDIR=/opt/backup
# grive directory
GDRIVEDIR=/opt/grive/
# website directory
WEB_DATA=/opt/www/
# the password file for encrypting the database backup files
#PASSWDFILE=/home/passwd
# end settings

# naming rule of backup files
DataBakName=mysql_$(date +"%Y%m%d").tar.gz
WebBakName=www_$(date +%Y%m%d).tar.gz
# delete files three weeks ago
OldData=mysql_$(date -d -21day +"%Y%m%d").tar.gz
OldWeb=www_$(date -d -21day +"%Y%m%d").tar.gz

# Create the directory when not existed
if [ ! -d $BACKUPDIR ]; then
    mkdir -p $BACKUPDIR
fi

cd $BACKUPDIR

# begin backup database
DATABASES=`mysql -h "127.0.0.1" -u $MYSQL_USER -p$MYSQL_PASS -Bse 'show databases'`

for DB in $DATABASES; do

# ignore system tables
if [ "$DB" == "information_schema" -o "$DB" == "performance_schema" -o "$DB" == "mysql" ]; then
    continue
fi

# export data to backup file
SQLFILE="$BACKUPDIR/$DB.sql.gz"
#ENCFILE="$BACKUPDIR/$DB.sql.gz.enc"
mysqldump -h "127.0.0.1" -u $MYSQL_USER -p$MYSQL_PASS $DB | gzip -9 > $SQLFILE

# encrypt database backup file
#openssl des3 -in $SQLFILE -out $ENCFILE -pass file:$PASSWDFILE
# decrypt database backup file
#openssl des3 -d -in $ENCFILE -out $SQLFILE -pass file:$PASSWDFILE

# delete the file without encryption
#rm $SQLFILE
done
# end backup database

# compress and merge all the backup files
#tar zcf $BACKUPDIR/$DataBakName $BACKUPDIR/*.sql.gz.enc
#rm $BACKUPDIR/*.sql.gz.enc
tar zcf $BACKUPDIR/$DataBakName $BACKUPDIR/*.sql.gz
rm $BACKUPDIR/*.sql.gz

# backup website files
tar zcpf $BACKUPDIR/$WebBakName $WEB_DATA

cd $GDRIVEDIR
grive
rm $OldData
rm $OldWeb

# move the files to grive directory
mv $BACKUPDIR/$WebBakName $GDRIVEDIR/bwg01_backup
mv $BACKUPDIR/$DataBakName $GDRIVEDIR/bwg01_backup
grive

#### end file autobackup.sh ##########################
[/code]