Bitrix和MariaDB更新到最新稳定版本

亲爱的哈布罗夫斯克居民,美好的一天! 让我介绍一下我自己,亚历山大。 一个小而自豪的 WEB 工作室的系统管理员。 我们真的希望一切都能快速、安全地运行并使用最新的软件。 为此,我们甚至在办公室内的计算机上安装了 nagios+PhantomJS 捆绑包,并每 30 分钟检查一次页面加载速度。 根据服务条款,我们还监控 1C-Bitrix 更新并定期安装。 然后有一天,在下一次更新后,我们在管理面板中看到一条消息,自 2019 年夏季以来,1C-Bitrix 停止与 MySQL 5.5 配合使用,我们需要更新。 ISPSystem 的人很帅,经常扩展面板的功能,为此特别感谢他们。 但这一次不可能用鼠标单击所有内容。 但你可以看看发生了什么,以及我的胡子里现在有多少白发。

只能选择安装安装在 Docker 容器中的“替代 DBMS 服务器”。 当然,我知道Docker非常节省资源,但无论它工作得多么出色,开销仍然>0。 而在这里,我们似乎是在几十秒内战斗,优化入口处的所有站点,然后再发布并签署协议。 所以不是我的选择。
好吧,文档说了什么? 备份所有内容,将文件添加到 yum.repos.d 并包含指向 MariaDB 存储库的链接,然后

rpm -e --nodeps MariaDB-server MariaDB-client MariaDB-common

百胜随后发誓有人在他不知情的情况下删除了这些软件包。 但首先,让他发誓,没关系。 其次,如果您通过 yum 进行删除,那么它会尝试与 MariaDB 一起删除通过依赖项连接到它的所有内容,其中包括 PHP、ISPManager 和 PHPmyadmin。 因此,我们稍后再处理脏话。


yum clean all
yum update
yum install MariaDB-server MariaDB-client MariaDB-common

总的来说,一切都已安装并启动。 好处是数据库已被拾取,无需从转储中恢复它们。 我检查了这些网站 - 它们可以工作并且速度很快。 我进入了几个管理区域,以确保没有任何东西掉落,并向主管回信说一切正常。 不到30分钟后,发现根本不对……

当我尝试进入管理区域并添加和编辑内容中的任何内容时,会弹出一条消息

MySQL Query Error: INSERT INTO b_iblock_element_property (ID, IBLOCK_ELEMENT_ID, IBLOCK_PROPERTY_ID, VAL UE, VALUE_NUM) SELECT 10555 ,2201 ,P.ID ,'3607' ,3607.0000 FR OM b_iblock_property P WHERE ID = 184 [[1062] Duplicate entry '10555' for key 'PRIMARY']

由于网站上的内容是由我们自己的员工添加的,客户还不知道任何事情,也还没有开始拆散我们。 但这只是时间问题,因为网站上的信息需要更新,并且许多客户自己密切关注这一点。

从错误文本中,我们可以得出结论,Bitrix 正在尝试向数据库添加新条目,同时指定与正在编辑的文章中相同的主键。 这意味着有理由怀疑问题出在 Bitrix 端。 我们访问他们的网站并联系支持人员。 我们几乎立刻就得到了答案“复杂的问题。” 交给高级工程师了——等等……”

我们等待了相当长的时间(整个对话发生在25.06.2019年9.07.2019月10.4.6日至XNUMX年XNUMX月XNUMX日),结果是消息“这个问题与Bitrix CMS的操作无关,而是与Bitrix CMS的操作有关”。在 mariadb XNUMX 中对数据库本身的操作,不幸的是,在站点方面,没有办法解决这个问题;您将需要切换到旧版本的 MariaDB。”

他们来了……故事一开始我就想过降级,但是 它白纸黑字地说不能降级。 转储转储并在完全安装的服务器上重新部署。 那些。 还好我没有一次性更新所有服务器。 那些。 “只有”一百个网站(紧张的笑:-))。 支持人员还表示:“要解决使用MariaDB 10.4.6数据库时的问题,您需要联系MariaDB技术支持,如果发出请求,事务不会从数据库中删除记录:

$DB->Query("DELETE FROM ".$strTable." WHERE ID = ".$res["ID"]);
$results = $DB->Query("SELECT * FROM ".$strTable." WHERE ID = ".$res["ID"]);”

从我开始与 MariaDB 支持人员沟通的那一刻起,希望闪烁了几个小时,但后来我收到了一封信,他们在信中非常正确地告诉我,我不是商业用户,因此没有人会故意解决我的问题,但有他们网站上有一个论坛,您可以在那里尝试寻找选项……我不会向您提供详细信息。 那里没有选择。
关于! 我们购买了 ISP 许可证!
- 你好,支持吗? 伙计们,救命啊!
— 抱歉,我们不支持那些更改 DBMS 原生版本的人渣。 如果需要,可以选择使用 Docker 中的替代服务器。
— 但是用户和数据库如何到达那里呢? 到码头工人?
- 好吧,你用手把它们拖到那里......
- 是的! 并且不要忘记 mysql 的端口将会更改,您将需要检查所有配置并重写它们。
- 好的,谢谢,我会考虑一下...
我想了想,决定手动拆除10.4并安装10.2,在其他服务器上没有问题。

该过程与更新过程没有太大区别。 我只需将存储库链接中的 10.4 更改为 10.2,重置并重新创建 yum 的缓存。 好吧,还有一件“小事”:删除 10.4 后,转到 /var/lib/mysql 并删除其中的所有内容。 安装10.2后如果没有这一步,服务会不断崩溃,你会看到

Не удалось подключиться к базе данных '' Lost connection to MySQL server at 'reading initial communication packet', system error: 104 "Connection reset by peer"

Lost connection to MySQL server at 'handshake: reading inital communication packet', system error: 104

在导入数据库之前,我首先设置了 ISP 配置中指定的 mysql 的 root 密码,并导入了 mysql 数据库转储。 那么,既然我们已经拥有了用户和权限,那么我们只需使用 root 帐户连续导入所有用户数据库即可。

数据库转储的脚本文本:

#!/bin/bash
echo 'show databases' | mysql -u root --password="ПаРоЛь_РУТА" --skip-column-names | grep -v information_schema | xargs -I {} -t bash -c 'mysqldump -u root --password="ПаРоЛь_РУТА" {} | gzip > /BACK/back-$(hostname)-{}-$(date +%Y-%m-%d-%H.%M.%S).sql.gz'

在导入数据库之前,您需要将它们解压。 所以我们只需运行命令

gunzip /BACK/*.gz

最后:出于某种原因,数据库名称中允许使用连字符(如果您通过 ISPmanager 创建数据库)。 但是,当您创建或尝试将转储上传到名称中包含连字符的数据库时,您会收到一条消息,指出请求语法不正确。

祝那些读到最后的人一切顺利。 我对最有可能放错位置的逗号表示歉意——它们是一个问题。 如果您对所描述内容的本质有任何建议,请写下个人信息,因为我担心我会在评论中遗漏一些内容。 并且不要发誓太多 - 这是我的第一篇文章:)

UPD1:

我差点忘了提:当我试图在不降级 MariaDB 的情况下找到问题的解决方案时,我必须以某种方式更新信息。 它的更新是这样的:整个数据库从InnoDB转换为MyISAM,信息被更新,然后转换回InooDB。
UPD2:

我刚刚收到1C-Bitrix的一封信,内容如下:

修改请求已完成
“将 mariadb 升级到 10.4.6 后,保存信息块元素时发生错误”
模块:iblock,版本:未知
解决方案:拒绝

所以现在显然不可能更新到 10.4 🙁

来源: habr.com

添加评论