跳到主要内容

迁移Ghost数据库MariaDB到 MySQL 8.0

· 阅读需 2 分钟

本次更新花费 10 分钟左右,基本上纯 docker 命令操作,不难。

当然,为了避免一些瞎操作导致灾难事件,可以先做个系统备份。

  1. 停止 ghost 容器
  2. dump mariadb 数据库
sudo docker exec blog_mariadb_1 mysqldump --user ghost --password=ghost ghost > db_backup.sql
  1. 停止 mariadb 容器
  2. 编辑 docker-compose.yml 文件

假如原先是:

  mariadb:
image: 'mariadb:latest'
restart: always
volumes:
- mariadb:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=ghost
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost

ghost:
image: 'ghost:alpine'
restart: always
depends_on:
- mariadb
volumes:
- ./ghost:/var/lib/ghost/content
environment:
- database__client=mysql
- database__connection__host=mariadb

改成:

  mysql:
image: 'mysql:8.0'
restart: always
volumes:
- mysql:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=ghost
- MYSQL_DATABASE=ghost
- MYSQL_USER=ghost
- MYSQL_PASSWORD=ghost

ghost:
image: 'ghost:alpine'
restart: always
depends_on:
- mysql
volumes:
- ./ghost:/var/lib/ghost/content
environment:
- database__client=mysql
- database__connection__host=mysql
  1. 启动 mysql 容器
sudo docker-compose up -d mysql

这里会自动创建 ghost数据库,后续导入用到。

  1. 导入备份的数据,这里遇到个问题,通过 docker exec 导入失败,所以我先复制到容器内,然后进入容器 bash
sudo docker cp db_backup.sql  blog_mysql_1:/
sudo docker exec -it blog_mysql_1 /bin/bash

然后执行 mysql 的命令导入:

mysql --user ghost --password=ghost ghost < /db_backup.sql

数据不多的话,很快就完成了,然后输入exit退出容器。

  1. 删除创建的容器,再重新创建
sudo docker-compose down --remove-orphans && sudo docker-compose up -d

至此,所有操作基本上完成了,再次访问博客应该没啥问题了。