menu LittleJake's Blog
color_lens
avatar
Jake Liu
Never Settle
creative commons by-nc-sa
hit
Category
keyboard_arrow_down

© 2024 LittleJake's Blog.

萌ICP备20223020号

记一次Typecho从MySQL迁移SQLite3的过程

前言

为方便备份和迁移,同时兼顾速度,将目前博客从MySQL迁移至SQLite,期间找到的教程没有一个是满意的,故做个记录。

过程

创建SQLite数据库

由于数据库表前缀没有改变,还是默认的typecho_,我们首先获取初始化建表语句。

https://github.com/typecho/typecho/blob/master/install/SQLite.sql

CREATE TABLE typecho_comments ( "coid" INTEGER NOT NULL PRIMARY KEY,
"cid" int(10) default '0' ,
"created" int(10) default '0' ,
"author" varchar(150) default NULL ,
"authorId" int(10) default '0' ,
"ownerId" int(10) default '0' ,
"mail" varchar(150) default NULL ,
"url" varchar(255) default NULL ,
"ip" varchar(64) default NULL , 
"agent" varchar(511) default NULL ,
"text" text , 
"type" varchar(16) default 'comment' , 
"status" varchar(16) default 'approved' , 
"parent" int(10) default '0' );

CREATE INDEX typecho_comments_cid ON typecho_comments ("cid");
CREATE INDEX typecho_comments_created ON typecho_comments ("created");

CREATE TABLE typecho_contents ( "cid" INTEGER NOT NULL PRIMARY KEY, 
"title" varchar(150) default NULL ,
"slug" varchar(150) default NULL ,
"created" int(10) default '0' , 
"modified" int(10) default '0' , 
"text" text , 
"order" int(10) default '0' , 
"authorId" int(10) default '0' , 
"template" varchar(32) default NULL , 
"type" varchar(16) default 'post' , 
"status" varchar(16) default 'publish' , 
"password" varchar(32) default NULL , 
"commentsNum" int(10) default '0' , 
"allowComment" char(1) default '0' , 
"allowPing" char(1) default '0' , 
"allowFeed" char(1) default '0' ,
"parent" int(10) default '0' );

CREATE UNIQUE INDEX typecho_contents_slug ON typecho_contents ("slug");
CREATE INDEX typecho_contents_created ON typecho_contents ("created");

CREATE TABLE "typecho_fields" ("cid" INTEGER NOT NULL,
  "name" varchar(150) NOT NULL,
  "type" varchar(8) default 'str',
  "str_value" text,
  "int_value" int(10) default '0',
  "float_value" real default '0'
);

CREATE UNIQUE INDEX typecho_fields_cid_name ON typecho_fields ("cid", "name");
CREATE INDEX typecho_fields_int_value ON typecho_fields ("int_value");
CREATE INDEX typecho_fields_float_value ON typecho_fields ("float_value");

CREATE TABLE typecho_metas ( "mid" INTEGER NOT NULL PRIMARY KEY, 
"name" varchar(150) default NULL ,
"slug" varchar(150) default NULL ,
"type" varchar(32) NOT NULL , 
"description" varchar(150) default NULL ,
"count" int(10) default '0' , 
"order" int(10) default '0' ,
"parent" int(10) default '0');

CREATE INDEX typecho_metas_slug ON typecho_metas ("slug");

CREATE TABLE typecho_options ( "name" varchar(32) NOT NULL , 
"user" int(10) NOT NULL default '0' , 
"value" text );

CREATE UNIQUE INDEX typecho_options_name_user ON typecho_options ("name", "user");

CREATE TABLE typecho_relationships ( "cid" int(10) NOT NULL , 
"mid" int(10) NOT NULL );

CREATE UNIQUE INDEX typecho_relationships_cid_mid ON typecho_relationships ("cid", "mid");

CREATE TABLE typecho_users ( "uid" INTEGER NOT NULL PRIMARY KEY, 
"name" varchar(32) default NULL ,
"password" varchar(64) default NULL , 
"mail" varchar(150) default NULL ,
"url" varchar(150) default NULL ,
"screenName" varchar(32) default NULL , 
"created" int(10) default '0' , 
"activated" int(10) default '0' , 
"logged" int(10) default '0' , 
"group" varchar(16) default 'visitor' , 
"authCode" varchar(64) default NULL);

CREATE UNIQUE INDEX typecho_users_name ON typecho_users ("name");
CREATE UNIQUE INDEX typecho_users_mail ON typecho_users ("mail");

在如DBeaver的开源数据库管理工具,新建SQLite,并在SQL编辑器执行。

数据迁移

我们在DBeaver新建一个连接,连接到typecho的数据库。

选中SQLite中所有typecho开头的表,右键导入,可以看到有一个其他数据库源。

下一步后可以点击自动选取,或者手动对应相应的旧表和新表。

迁移即可。

更改Typecho配置

将保存后的DB文件上传至usr文件夹内,保存的文件名务必大于128位防止被猜测下载。

更改配置文件config.inc.php倒数几行即可

$db = Typecho_Db('Pdo_SQLite', 'typecho_');
$db->addServer(array (
  'file' => 'db路径',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

后记

这样子可以实现迁移目标,当然还需要进一步更换Nginx的配置或者WAF配置防止非法获取数据库文件。

Buy me a beer
Jake Liu
Never Settle

Title: 记一次Typecho从MySQL迁移SQLite3的过程

Author: Jake Liu

Origin:

Creative Commons License

This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0) For any re-post you must give appropriate credit.

文章遵循CC许可 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0) 转载请注明出处

Tag:typecho, php, MySQL, 迁移, Sqlite

评论区

Add a new comment.

Theme