Bitrix 並將 MariaDB 更新到最新的穩定版本

美好的一天,親愛的哈布羅維人! 請允許我自我介紹一下,亞歷山大。 一個小而自豪的 WEB 工作室的系統管理員。 我們真的希望一切都能夠快速、安全地運行並使用新的軟件。 為此,我們甚至在辦公室內的計算機上安裝了 nagios + PhantomJS 捆綁包,並每 30 分鐘檢查一次頁面加載速度。 根據服務條款,我們還監控 1C-Bitrix 更新並定期安裝。 然後有一天,在下一次更新之後,我們在管理面板中看到一條消息,指出自 2019 年夏季以來,1C-Bitrix 停止與 MySQL 5.5 配合使用,需要更新。 ISPSystem 的人很帥,經常擴展面板的功能,為此特別感謝他們。 但這一次不可能用鼠標單擊所有內容。 但到底發生了什麼,我的鬍子裡現在有多少白髮,都可以在傷口下面找到。

只有一個選項可以安裝安裝在 Docker 容器中的“替代 DBMS 服務器”。 當然,我知道Docker對資源非常節約,但無論它工作得多麼出色,開銷仍然> 0。 而我們在這裡,可以說是在幾十秒的時間內戰鬥,在發布和簽署協議之前優化入口處的所有站點。 所以不是我的選擇。
好的,文檔中有什麼內容? 備份所有內容,將包含 MariaDB 存儲庫鏈接的文件添加到 yum.repos.d,然後

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 的操作無關,但與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,infa更新然後轉換回InooDB。
UPD2:

剛剛收到1C-Bitrix的來信,內容如下:

修改請求已完成
“將 mariadb 更新到 10.4.6 後,保存 infoblock 元素時發生錯誤”
模塊:iblock,版本:未知
解決方案:拒絕

所以現在顯然不可能更新到 10.4 🙁

來源: www.habr.com

添加評論