欢迎光临
我们一直在努力

搭建Mastodon实例和Typecho数据库迁移

周末折腾了两天服务器,干了两件事:

1、搭建Mastodon实例,个人账号@skyue@m.skyue.com欢迎关注。
2、博客从AWS迁移到阿里云香港,同时将Typecho数据库从MySQL迁移到SQLite3。

源起

去年买AWS的Lightsail搭建Typecho的原因之一是官网说只要3.5刀/月(单核/512M内存/20G SSD),但实际用起来发现平均要7刀/月,显然我被坑了。但是吧,7刀也并非不能接受,考虑到迁移的麻烦,便一直将就用着。

搭建Mastodon实例和Typecho数据库迁移9月AWS的Lightsail账单

最近想搭建Mastodon实例,买了阿里云香港轻量级服务器,单核2G内存50G SSD,比AWS配置高多了,却只要34元/月,于是趁机把博客也迁移了。

搭建mastodon实例

教程:《如何利用Docker搭建Mastodon实例(一):基础搭建篇》

我完全按照上面文章一步步配置的,只有两个小错误已经反馈给原作者修改。

特别留意「安装并配置Nginx」那一节,有如下一段:

sudo snap install core; sudo snap refresh core    #如果没有snap则 apt insall snapd 安装
sudo snap install --classic certbot
sudo ln -s /snap/bin/certbot /usr/bin/certbot
sudo certbot --nginx -d 你的域名

这段应该是安装SSL证书,支持https访问。我在下文的Typecho迁移时,也复用了这段命令,给博客添加SSL证书。比我以前申请、证书、上传证书,再配置方便多了。

Typecho博客迁移

MySQL迁移方案

最开始,我只打算迁移服务器的同时,把Apache改为Nginx,因为Mastodon使用了Nginx,复用比较方便。

所以,我做了两件事:

1、将旧服务器Apapche站点主目录文件打包,迁移到新服务器的网站目录,再配置Nginx指向该目录。
2、将MySQL导出,再导入到新服务器MySQL,MySQL导出和导入参考《Typecho博客迁移 》,新服务器的MySQL安装,参考《Ubuntu18.04 安装MySQL》

服务器之间的文件迁移有个小技巧:如果旧服务器博客还没有关停,可以将文件放在旧服务器的站点根目录,然后到新服务器用wget命令获取。

站点文件和数据库均完成迁移,Nginx也配置好了,我以为一切就绪,但访问时却发生数据库连接错误,查了一些资源,发现是MySQL数据库root账户的权限问题。参考《解决 MySQL 的 ERROR 1698 (28000): Access denied for user ‘root’@’localhost’》得到解决。

这句「得到解决」写起来容易,其实我把MySQL卸载重装了N次才搞定,每次按网上修改root权限后,就不能再使用root密码登录MySQL了,到最后仍然如此,只是我突然发现可以不用密码登录MySQL,然后把站点下config.ini.php中的密码设为空,成功访问博客数据。

经此一役,让我觉得MySQL迁移太麻烦了,所以决定改用SQLite,SQLite是个文件,迁移只需要复制文件即可。

MySQL迁移到SQLite3

我的博客日访问UV很少超过50,SQLite数据库足够了。

首先,需要将MySQL数据转为SQLite数据文件,在网上找到一个Python库mysql-to-sqlite3可以解决。安装后,执行下面的命令将博客数据库导出为SQLite的DB数据文件。

mysql2sqlite -f blog.db -d blog -u root
# -f: 导出的SQLite文件名 (必须)
# -d: 需要导出的MySQL数据库,我的是blog,Typecho默认一般是typecho (必须)
# -u: MySQL用户名 (必须)
# -p: MySQL密码 (若有)

然后修改config.ini.php,将下面这段

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_Mysql', 'blog_');
$db->addServer(array (
  'host' => 'localhost',
  'user' => 'root',
  'password' => '',
  'charset' => 'utf8',
  'port' => '3306',
  'database' => 'blog',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

修改为:

/** 定义数据库参数 */
$db = new Typecho_Db('Pdo_SQLite', 'blog_');
$db->addServer(array (
  'file' => 'SQLite数据库文件绝对地址',
), Typecho_Db::READ | Typecho_Db::WRITE);
Typecho_Db::set($db);

修改完成后,再访问博客,发现还是有权限问题:

SQLSTATE[HY000]: General error: 8 attempt to write a readonly database

这时只是文件权限,改起来比较简单,参考《Typecho博客搬家后遗症》,执行:

# 将 * 换成SQLite数据文件所在的目录绝对路径
chown -R :www-data *
chmod -R 775 *

再访问,就能打开网站了。

你现在看到的本博客,就是Typecho + SQLite的方案。

赞(0) 打赏
未经允许不得转载:哈哈 » 搭建Mastodon实例和Typecho数据库迁移

评论 抢沙发

更好的WordPress主题

支持快讯、专题、百度收录推送、人机验证、多级分类筛选器,适用于垂直站点、科技博客、个人站,扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、文章图片弹窗、自动缩略图等...

联系我们联系我们

觉得文章有用就打赏一下文章作者

非常感谢你的打赏,我们将继续提供更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

登录

找回密码

注册