1Panel 面板MySQL 8.0迁移MariaDB

MySQL 8.0和MariaDB的选择

小型 VPS、自建环境、不依赖云厂商生态的话,MariaDB 通常是更合适。

  1. 安装与维护更省事 大多数 Linux 发行版仓库(Debian/Ubuntu/CentOS/RHEL)默认提供 MariaDB,直接 apt install mariadb-server 或 yum install mariadb-server 就能用,不需要额外仓库。
  2. 内存占用更友好,对轻量 VPS 来说,MariaDB 能多留出一块内存给 PHP/NGINX。
    1. 典型 1–2 GB RAM VPS:
      1. MariaDB 10.11 经过简单调优可常驻 100–150 MB
      2. MySQL 8.0/8.4 即使调优,也常驻 150–250 MB
    2. :backhand_index_pointing_right: 粗算:MariaDB 比 MySQL 通常能省出 30–40% 的常驻内存(极简场景更明显)。
  3. 功能够用
  • 常见建站应用(WordPress、Discuz、Nextcloud、常规 PHP/Python 框架)都能直接跑,不需要 MySQL 的特殊新特性。只要你避免重度用 MySQL 8 专属的 JSON/角色权限/数据字典特性,兼容性基本没问题。

一、容器里执行导出 MySQL 8 的两个库

建议先让写入型应用(如 Chevereto、博客后台)进维护模式,避免迁移过程中有新数据写入。

  1. 进 MySQL 容器:
docker exec -it 1Panel-mysql-8Q8h bash
  1. 容器内用 mysqldump 导出(把 db1 db2换成你的真实库名):
mysqldump -u root -p \
  --databases db1 db2 \
  --single-transaction --routines --triggers --events \
  --set-gtid-purged=OFF --default-character-set=utf8mb4 \
  > /tmp/dump.sql

会提示输入 root 密码。导出完成后退出容器 exit

  1. 把导出文件拷到:
宿主机运行,不是容器内运行
docker cp 1Panel-mysql-8Q8h:/tmp/dump.sql ./dump.sql

备份好 ./dump.sql;你的“回滚保险”。

二、 新建一个 MariaDB 10.11 容器(与 MySQL 并存一会儿)

1Panel 的应用商店装 MariaDB(端口映射到宿主机 3307,避免与现有 3306 冲突)。

健康检查一下:

docker logs -f 1Panel-mariadb-W9vZ

三、 导入到 MariaDB

  1. 边解压边清理边导入 MySQL 8 默认常用 utf8mb4_0900_ai_ci;MariaDB 多用 utf8mb4_unicode_ci。
gunzip -c /root/dump.sql.gz \
| sed -e 's/utf8mb4_0900_ai_ci/utf8mb4_unicode_ci/g' \
      -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/g' \
| docker exec -i 1Panel-mariadb-W9vZ sh -lc "mysql -uroot -p'密码'"
  1. 导入后检查
docker exec -it 1Panel-mariadb-W9vZ mysql -uroot -p'密码' -e "SHOW DATABASES; USE chevereto; SHOW TABLES; USE typecho; SHOW TABLES;"

四、应用的数据库连接到 MariaDB

  1. 两个库各建业务账号
docker exec -it 1Panel-mariadb-W9vZ mysql -uroot -p'mariadb_***6' -e "\
CREATE USER 'chev'@'%' IDENTIFIED BY '强密码1'; \
GRANT ALL PRIVILEGES ON chevereto.* TO 'chev'@'%'; \
CREATE USER 'typ'@'%' IDENTIFIED BY '强密码2'; \
GRANT ALL PRIVILEGES ON typecho.* TO 'typ'@'%'; \
FLUSH PRIVILEGES;"

chev’@‘%’ :backhand_index_pointing_right: 用户名 = chev,主机 = % @‘%’ 是这个用户的“来源限制条件”,% 表示任意来源 % 表示允许这个用户从 任意 IP 连接(只要有密码就能登录) 如果写成 ‘chev’@‘localhost’ :backhand_index_pointing_right: 只允许从 本机 登录 ‘chev’@‘127.0.0.1’ :backhand_index_pointing_right: 只允许从 127.0.0.1 登录 应用里配置数据库连接时,账号就写 chev,密码写你设定的 ‘强密码1’

  1. 配置运用
  • Chevereto:把环境变量/配置里的 DB 连接改为 MariaDB(Host 用容器名 1Panel-mariadb-W9vZ ),然后重启容器。
  • Typecho:编辑 config.inc.php(或安装向导保存的配置),同样改到 MariaDB。

注意:端口:容器间通信请用 3306,不是 3307(3307 只是在“宿主机→容器”的映射端口)。