Bitrix并将MariaDB更新到最新的稳定版本

美好的一天,亲爱的Khabrovchians! 让我自我介绍一下,亚历山大。 一个小型但引以为傲的WEB工作室的系统管理员。 我们真的希望一切都可以使用新软件快速,安全地工作。 为此,他们甚至在办公计算机上举起了nagios + PhantomJS,每30分钟检查一次页面加载速度。 根据服务条款,我们还会关注1C-Bitrix的更新并定期进行安装。 一次,在下一次更新之后,我们会在管理面板中看到一条消息,指出在2019年夏天1C-Bitrix停止使用MySQL 5.5,需要进行更新。 ISPSystem的专家很帅,并会定期扩展面板的功能,为此,他们特别感谢。 但是这一次不可能单击所有鼠标。 但是发生了什么,现在我的胡须中留了多少白发,可以在割伤处找到。

只能将“备用DBMS服务器”放置在Docker容器中。 当然,我知道Docker是非常节省资源的,但是不管它工作得多么酷,其开销仍然会大于0。 在这里,我们正在战斗,大约是十分之一秒,在入口处,我们在发布和签订合同之前优化了所有站点。 所以这不是我的选择。
好的,文档中写了什么? 总计备份,在yum.repos.d中添加一个带有指向MariaDB存储库的链接的文件,然后

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

Yum稍后将诅咒某人在不知情的情况下删除/安装了软件包。 但是首先-让它发誓,没关系。 其次,如果您通过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方面。 我们转到他们的网站并寻求支持。 几乎立即我们得到答案“一个困难的问题。 给高级工程师-等待...”

我不得不等待很长时间(整个对话从06/25/2019到07/09/2019进行了),结果是消息“此问题与Bitrix CMS的操作无关,而与mariadb 10.4.6中数据库本身的操作有关,不幸的是,该站点一侧解决了解决此问题的可能性,因此有必要升级到旧版本的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支持进行交流以来,Nadezhda一直在升温两个小时,但是随后一封信中他们正确地告诉我我不是商业用户,因此没有人会故意解决我的问题,但是他们网站上有一个论坛,您可以尝试在那里找到解决方案...我不会透露细节。 那里没有选择。
喔! 我们已经购买了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的根密码,然后导入mysql数据库转储。 那么,既然已经有了用户和权限,我们只需使用根帐户连续导入所有用户群即可。

数据库转储的脚本文本:

 #!/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 :-(

Source: https://habr.com/ru/post/zh-CN459795/


All Articles