【问题标题】:How to upgrade MariaDB running as a docker container如何升级作为 docker 容器运行的 MariaDB
【发布时间】:2021-09-19 08:11:44
【问题描述】:

我在 Docker 容器中运行 MariaDB 10.1,我想升级到 10.2。我的数据保存在 /var/lib/mysql 映射到 my.cnf 的卷中,该卷未映射且未更改。正确的程序是什么最终得到一个包含完整数据的 Maria 10.2 容器?

我考虑的过程如下:

  1. 停止 10.1 容器
  2. 复制数据量
  3. 创建一个新的 10.3 容器,将数据目录映射到复制的卷
  4. 启动新容器

我关心的是第 3 步。在“标准”(非 Docker)升级期间,升级过程可能不会以某种方式改变数据目录吗?如果是这样,在升级期间应该对 /var/lib/mysql 目录进行的任何更改都不会像卷外部那样对卷进行。

我的程序正确吗?我的担心有道理吗?

【问题讨论】:

  • 这能回答你的问题吗? Running mysql_upgrade in Docker?
  • @derpirscher,不,但它确实增加了我的担忧!
  • 5.在新启动的容器中运行mysql_upgrade。您的担忧完全没有道理:如果您将卷安装在预期的数据路径上,则数据路径您的卷。无论如何,您都可以通过一种简单的方式回滚使用备份卷启动旧映像。为什么要浪费时间?试试看。

标签: docker mariadb


【解决方案1】:

MariaDB 文档确实有从 10.1 -> 10.2 documentation 升级的内容,值得一读。

虽然其中大部分是围绕软件包升级,但也有一些关于可选 SET GLOBAL innodb_fast_shutdown=0 并以 mysql_upgrade 结尾的注释。

使用docker volume inspect 查看挂载点并获取数据目录的副本是谨慎的做法,特别是如果您没有最近的备份或有快速恢复业务需求(但如果是这种情况,您应该稍后测试具有从备份恢复和就地升级过程的版本)。

在关闭之前没有SET GLOBAL innodb_fast_shutdown=0 的就地升级将导致innodb 开始恢复并将重做日志应用到数据目录。这样做的风险可能与之前有所不同。

启动新容器后,您可以测试数据是否存在。准备好后,运行mysql_upgrade(我通常会使用docker exec -i {container} mysql_upgrade)。当我想到一种可靠的方法时,这有望实现自动化(gh#350MDEV-25670)。

正如蒙蒂所说的“You should be able to trivially upgrade from ANY earlier MariaDB version to the latest one”(或任何中间的),所以不要觉得你必须 10.1 -> 10.2 和最终 10.3。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-07-18
    • 2017-04-21
    • 2017-12-09
    • 1970-01-01
    • 2021-09-05
    • 2018-10-23
    • 2018-06-01
    • 2023-02-01
    相关资源
    最近更新 更多