1 min read

迁移Ghost数据库MariaDB到 MySQL 8.0

迁移Ghost数据库MariaDB到 MySQL 8.0

本次更新花费 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

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