我的一个私人日记站点放在DO,感觉太奢侈了,所以我就转移到以前剁手买的64M VPS上算了,但是装PHP扩展的时候忘记加上PHP-MYSQLI了,所以索性用SQLite了,还能省资源。但是找来找去都没有发现什么好的转换工具。于是爬墙上谷歌搜了搜,发现了个神器ESF Database Migration Toolkit - Professional,当然,名字看起来这么高大上的软件是个收费软件,DUANG~加了特技,我们就能免费“试”用了。
当然,如果你想尊重别人的劳动成果你可以购买正版的ESF Database Migration Toolkit - Professional或者使用这个
转换脚本
从MySQL导出数据
1、一般人都使用phpMyAdmin来管理数据库,phpMyAdmin是个很方便的数据库管理工具。
2、在phpMyAdmin选在需要导出的表然后选择导出就可以将数据库导出到本地。
3、如果你没使用phpMyAdmin,则可以使用下面的命令来DUMP(导出)数据库:
tammy@my-laptop:~$ mysqldump -u root -p --compatible=ansi --skip-opt generator > dumpfile
使用ESF Database Migration Toolkit转换MySQL数据库为SQLite数据库
1、ESF Database Migration Toolkit - Professional特别版的下载地址
http://pan.baidu.com/s/1eQH3jJc
2、下载安装自行解决,不详细说了。
3、打开ESF Database Migration Toolkit - Professional会直接进入向导界面。
4、填写好源数据库信息就可以点下一步继续了,别忘了在phpMyAdmin的界面给相应的用户添加远程访问的权限。
4、接着选择输出格式,这个软件可支持N种数据库进行互换。
5、点NEXT继续。选择需要转换的数据表和视图。
6、点NEXT进入抓换环节,点Submit开始转换,转换完就可以点Exit退出了。
MySQL转SQLite脚本
#!/bin/bash
if [ "x$1" == "x" ]; then
echo "Usage: $0 <dumpname>"
exit
fi
cat $1 |
grep -v ' KEY "' |
grep -v ' UNIQUE KEY "' |
grep -v ' PRIMARY KEY ' |
sed '/^SET/d' |
sed 's/ unsigned / /g' |
sed 's/ auto_increment/ primary key autoincrement/g' |
sed 's/ smallint([0-9]*) / integer /g' |
sed 's/ tinyint([0-9]*) / integer /g' |
sed 's/ int([0-9]*) / integer /g' |
sed 's/ character set [^ ]* / /g' |
sed 's/ enum([^)]*) / varchar(255) /g' |
sed 's/ on update [^,]*//g' |
sed 's/\r\n/\n/g' |
sed 's/\/"/"/g' |
perl -e 'local $/;$_=<>;s/,\n\)/\n\)/gs;print "begin;\n":stuck_out_tongue_winking_eye:rint;print "commit;\n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
$a=$1;
s/\\'\''/'\'\''/g;
s/\\n/\n/g;
s/\),\(/\);\n$a\(/g;
}
' > $1.sql
cat $1.sql | sqlite3 $1.db > $1.err
ERRORS=`cat $1.err | wc -l`
if [ $ERRORS == 0 ]; then
echo "Conversion completed without error. Output file: $1.db"
rm $1.sql
rm $1.err
else
echo "There were errors during conversion. Please review $1.err and $1.sql for details."
fi
1、将上边的代码保存为mysql-to-sqlite.sh。
2、在shell中可以直接转换MySQL的dumpfile为SQLite数据库。
tammy@my-laptop:~$ mysql-to-sqlite.sh dumpfile
Sqlite和MySQL的语法差异
1、SQLite标记为Not Null
的字段必须非空或指定默认值,否则会报错。(需要特别注意AUTO_INCEMENT的属性)。
2、通过UPDATE语句修改数据时不能LIMIT 1
3、更多的我也不知道了。
修改程序代码以适应SQLite数据库
1、由于我使用的Typecho能使用SQLite数据库的,所以修改一下配置文件config.inc.php
就可以了。原来MySQL的配置如下:
$db = new Typecho_Db('Mysql', 'typecho_');
$db->addServer(array (
'host' => 'localhost',
'user' => '***',
'password' => '***',
'charset' => 'utf8',
'port' => '3306',
'database' => '***',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);
修改为下面这样的就可以了(如果是SQLite3请将Sqlite关键字修改为Pdo_SQLite)
$db = new Typecho_Db('SQLite', 'typecho_');
$db->addServer(array (
'file' => '***',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);</pre>
2、如果你是使用别的程序误入这里,这里给出几个常见的SQL语句的对应关系,这不是我写的,来自[这里](http://www.360doc.com/content/11/0321/11/59141_103110951.shtml)
1. mysql_real_escape_string - sqlite_escape_string
2. mysql_query - sqlite_query / sqlite_exec
3. mysql_insert_id - sqlite_last_insert_rowid
4. mysql_error - sqlite_error_string
5. mysql_errno - sqlite_last_error
6. mysql_affected_rows - sqlite_changes
## 从MySQL数据库向SQLite迁移小结
1、这是个很小众的迁移方向,相关中文资料我也只找到一篇,最后还是Googling出来好办法的,专业问题还是要Google才行啊。
站点手气不错功能设计的好
SQLite 能愉快的并发?
不能并发,但是64M的VPS开了SS、PPTP,还要并发不就很勉强?
那就是这样了,根本不用考虑这个问题了,64M的话
从来没用过Lite,据说再转出来很困难是吗?
Sqlite转MySQL网上好多教程啊,不过MySQL转Sqlite的资料只看到一个盗版且不完整的
厉害啊,第一次听说SQLite,学习了
错字了 MySQL虽然是很留行?
貌似博主改掉了,我用五笔不可能把IYTF打错的~
确实是错字,奇怪的是我的拼音输入法没有这个词啊
技术流。。顶
数据库转移写得很详细。
沙发