正在创建更新的mariadb可以使用的数据库的fs快照?

e0bqpujr  于 2022-11-29  发布在  其他
关注(0)|答案(1)|浏览(153)

有一个大的数据库,试图哑需要永远。以前/目前基本上会做:

#!/usr/bin/env bash
mysql -u root << EOF
    FLUSH TABLES WITH READ LOCK;
    system zfs snapshot db01/mysql@cron-$(date +%Y%m%d.%H%M);
    UNLOCK TABLES;
EOF

然后使用zfs send/recv进行增量备份。我们之前已经使用过这些备份进行测试......而且一直都很好。设置一些测试示例,复制一些快照,启动mariadb,它"就可以工作了"。但新示例将始终是具有相同版本mariadb的相同CentOS7映像,我猜这避免了快照可能出现的一些问题。
但现在我想对文件系统进行快照,然后将fs发送到具有较新版本mariadb的系统,但它无法启动:

Nov 24 02:55:51 test001 mariadbd[453773]: 2022-11-24  2:55:51 0 [ERROR] InnoDB: Upgrade after a crash is not supported. This redo log was created before MariaDB 10.2.2.
Nov 24 02:55:51 test001 mariadbd[453773]: 2022-11-24  2:55:51 0 [ERROR] InnoDB: Plugin initialization aborted with error Generic error
Nov 24 02:55:51 test001 mariadbd[453773]: 2022-11-24  2:55:51 0 [Note] InnoDB: Starting shutdown...

可是......"崩溃后升级......"为什么它会认为发生了崩溃?
如果要备份某些表,FLUSH TABLES WITH READ LOCK非常有用。当FLUSH TABLES WITH READ LOCK返回时,将阻止对表的所有写访问,并在磁盘上将所有表标记为"已正确关闭"。这些表仍可用于读取操作。
那么,为什么它认为发生了崩溃?我能做些什么来使快照更好,这样它就不会被视为"崩溃后升级"。或者有[简单]的方法来完成我正在尝试做的事情吗?
我试过使用FLUSH TABLES <list of all tables> FOR EXPORT,但它似乎在5.5.56上不起作用。

tag5nh1u

tag5nh1u1#

FLUSH TABLES WITH READ LOCK不足以创建无崩溃快照,原因是此sql不会阻止InnoDB刷新线程应用先前的写入。
好的方面是zfs快照是一致的。
所以你需要在副本上短暂地启动MariaDB-5. 5,然后让它干净地关闭。然后你就可以继续你的10. 2+版本了。
像podman这样的用户空间容器管理器,运行docker.io/library/mariadb:5.5容器,并将datadir作为-v /snapshot:/var/lib/mysql:Z传入,然后停止(而不是终止)该容器。

相关问题