Bitrix và cập nhật MariaDB lên phiên bản ổn định mới nhất

Chúc một ngày tốt lành, Khabrovites thân mến! Cho phép tôi tự giới thiệu, Alexander. Quản trị viên hệ thống của một WEB-studio nhỏ nhưng đáng tự hào. Chúng tôi thực sự muốn mọi thứ hoạt động nhanh chóng, an toàn và với phần mềm mới. Để làm được điều này, chúng tôi thậm chí còn nâng cấp gói nagios + PhantomJS trên máy tính nội bộ văn phòng và cứ 30 phút chúng tôi lại kiểm tra tốc độ tải trang. Theo các điều khoản dịch vụ, chúng tôi cũng giám sát các bản cập nhật 1C-Bitrix và cài đặt chúng thường xuyên. Và rồi một ngày, sau bản cập nhật tiếp theo, chúng tôi thấy một thông báo trong bảng quản trị cho biết rằng kể từ mùa hè năm 2019, 1C-Bitrix ngừng hoạt động với MySQL 5.5 và cần được cập nhật. Những người từ ISPSystem rất đẹp trai và thường xuyên mở rộng chức năng của bảng điều khiển, điều này đặc biệt cảm ơn họ. Nhưng lần này không thể nhấp vào mọi thứ bằng chuột. Nhưng những gì đã xảy ra và bao nhiêu sợi tóc bạc trên bộ râu của tôi hiện nay có thể được tìm thấy dưới vết cắt.

Chỉ có một tùy chọn để cài đặt “máy chủ DBMS thay thế” được cài đặt trong vùng chứa Docker. Tất nhiên, tôi hiểu rằng Docker rất tiết kiệm tài nguyên, nhưng dù nó có hoạt động tốt đến đâu thì chi phí vẫn sẽ > 0. Và ở đây, chúng tôi đang chiến đấu trong một phần mười giây và tối ưu hóa tất cả các trang web ngay từ đầu trước khi xuất bản và ký kết thỏa thuận. Vì vậy, không phải là sự lựa chọn của tôi.
Được rồi, tài liệu có gì? Sao lưu mọi thứ, thêm tệp có liên kết đến kho MariaDB vào yum.repos.d, sau đó

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

Yum sau đó sẽ thề rằng ai đó đã gỡ bỏ các gói hàng mà anh ta không hề hay biết. Nhưng trước hết - hãy để anh ấy thề, không sao cả. Và thứ hai, nếu bạn thực hiện xóa thông qua yum, thì nó sẽ cố gắng phá hủy, cùng với MariaDB, mọi thứ liên quan đến nó bằng các phần phụ thuộc, và đây là PHP, ISPManager và PHPmyadmin. Vì vậy, chúng ta sẽ giải quyết các lỗi sau.


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

Nói chung, mọi thứ đã được thiết lập và bắt đầu. Điều tuyệt vời là các căn cứ đã được nhặt lại và không cần thiết phải khôi phục chúng từ bãi chứa. Tôi đã kiểm tra các trang web - chúng hoạt động nhanh chóng. Tôi đã đến một vài bảng quản trị để đảm bảo rằng không có gì xảy ra và hủy đăng ký với giám đốc rằng mọi thứ đều ổn. Trong vòng chưa đầy 30 phút, hóa ra nó thậm chí không ổn chút nào ...

Khi tôi cố gắng vào bảng quản trị và chỉnh sửa bất kỳ nội dung nào trong nội dung thì có một thông báo xuất hiện

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']

Vì nội dung trên trang web là do nhân viên của chúng tôi thêm vào nên khách hàng vẫn chưa biết gì và vẫn chưa bắt đầu chia rẽ chúng tôi. Nhưng đó chỉ là vấn đề thời gian vì thông tin trên các trang web cần được cập nhật và nhiều khách hàng theo dõi rất chặt chẽ việc này.

Từ nội dung lỗi, chúng ta có thể kết luận rằng Bitrix đang cố gắng thêm một bản ghi mới vào cơ sở dữ liệu, đồng thời chỉ định cùng một khóa chính mà bài viết đang được chỉnh sửa có. Vì vậy, có lý do để nghi ngờ rằng vấn đề xảy ra từ phía Bitrix. Tới trang web của họ và liên hệ với bộ phận hỗ trợ. Gần như ngay lập tức chúng tôi nhận được câu trả lời “vấn đề khó. Trao cho các kỹ sư cấp cao - đợi đã ... "

Tôi đã phải chờ khá lâu (toàn bộ cuộc đối thoại diễn ra từ ngày 25.06.2019/9.07.2019/10.4.6 đến ngày XNUMX/XNUMX/XNUMX) và kết quả là thông báo “vấn đề này không liên quan đến hoạt động của Bitrix CMS mà liên quan đến đến hoạt động của chính cơ sở dữ liệu trong mariadb XNUMX và thật không may, thiếu phần trang web để giải quyết vấn đề này, nên cần phải chuyển sang phiên bản cũ hơn của MariaDB.”

Đi thuyền ... Tôi đã nghĩ đến việc hạ cấp ngay từ đầu câu chuyện, nhưng ở đây có màu đen và trắngrằng không thể hạ cấp được. Hợp nhất các bãi chứa và triển khai lại trên máy chủ mới cài đặt. Những thứ kia. thật tốt là tôi đã không cập nhật tất cả các máy chủ cùng một lúc. Những thứ kia. “chỉ” một trăm trang web (cười khúc khích :-)). Họ cũng cho biết trong phần hỗ trợ: “Để giải quyết vấn đề khi sử dụng cơ sở dữ liệu MariaDB 10.4.6, bạn sẽ cần liên hệ với bộ phận hỗ trợ kỹ thuật của MariaDB để giao dịch sẽ không xóa bản ghi khỏi cơ sở dữ liệu nếu có yêu cầu:

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

Hy vọng đã lóe lên trong vài giờ kể từ thời điểm chúng tôi bắt đầu liên lạc với bộ phận hỗ trợ của MariaDB, nhưng sau đó tôi nhận được một lá thư trong đó tôi được thông báo cực kỳ chính xác rằng tôi không phải là người dùng thương mại và do đó không ai có chủ đích giải quyết vấn đề của tôi, nhưng có một diễn đàn trên trang web của họ và bạn có thể thử tìm kiếm các lựa chọn ở đó… Tôi sẽ không cung cấp thêm thông tin chi tiết cho bạn. Không có lựa chọn nào ở đó.
VỀ! Chúng tôi đã mua giấy phép cho ISP!
Xin chào, hỗ trợ? Các bạn, giúp đỡ!
- Rất tiếc, chúng tôi không hỗ trợ những kẻ côn đồ thay đổi phiên bản gốc của DBMS. Nếu bạn muốn, có một tùy chọn với máy chủ thay thế trong docker.
- Nhưng người dùng và cơ sở dữ liệu sẽ đến đó bằng cách nào? Để cập bến?
- Chà, bạn kéo chúng đến đó bằng tay ...
- Đúng! Và đừng quên rằng cổng cho mysql sẽ thay đổi và bạn sẽ cần phải xem lại và viết lại tất cả các cấu hình.
Được rồi, cảm ơn, tôi sẽ suy nghĩ về việc đó...
Tôi đã suy nghĩ và quyết định phá bỏ 10.4 bằng tay cầm và cài đặt 10.2 mà không gặp vấn đề gì trên các máy chủ khác.

Quá trình này không khác nhiều so với quá trình nâng cấp. Chỉ cần thay đổi 10.4 thành 10.2 trong liên kết đến kho lưu trữ, đặt lại và tạo lại bộ đệm cho yum. Chà, thêm một điều “chuyện vặt” nữa: sau khi xóa 10.4, chúng ta truy cập /var/lib/mysql và xóa mọi thứ khỏi đó. Nếu không có bước này, sau khi cài đặt 10.2, dịch vụ sẽ liên tục bị lỗi và bạn sẽ thấy

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

Hoặc

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

Trước khi nhập cơ sở dữ liệu, trước tiên tôi đặt mật khẩu gốc mysql đã được chỉ định trong cấu hình ISP và nhập kết xuất cơ sở dữ liệu mysql. Vậy thì, vì đã có người dùng và quyền nên chúng tôi chỉ cần nhập tất cả cơ sở dữ liệu người dùng liên tiếp bằng tài khoản root.

Văn bản tập lệnh cho kết xuất cơ sở dữ liệu:

#!/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'

Trước khi nhập cơ sở dữ liệu, bạn cần giải nén chúng. Vì vậy, chỉ cần chạy lệnh

gunzip /BACK/*.gz

Và điều cuối cùng: vì lý do nào đó, dấu gạch nối được phép có trong tên cơ sở dữ liệu (nếu bạn tạo chúng bằng ISPmanager). Tuy nhiên, khi tạo hoặc cố gắng tải kết xuất lên cơ sở dữ liệu có dấu gạch nối trong tên, bạn sẽ nhận được thông báo rằng cú pháp truy vấn không chính xác.

Đọc đến cuối tất cả các phước lành. Tôi xin lỗi vì rất có thể những dấu phẩy không cách nhau - chúng đang gặp rắc rối. Nếu có những mong muốn về một đề xuất được mô tả về cơ bản - hãy viết thư cá nhân vì trong phần bình luận, tôi sợ bỏ sót điều gì đó. Và đừng chửi thề quá nhiều - đây là bài viết đầu tiên của tôi 🙂

CẬP NHẬT1:

Tôi gần như quên đề cập: trong khi tôi đang cố gắng tìm giải pháp cho vấn đề mà không hạ cấp MariaDB, tôi đã phải cập nhật thông tin bằng cách nào đó. Nó được cập nhật như thế này: toàn bộ cơ sở dữ liệu được chuyển đổi từ InnoDB sang MyISAM, infa được cập nhật và sau đó được chuyển đổi trở lại InooDB.
CẬP NHẬT2:

Vừa nhận được thư từ 1C-Bitrix với nội dung như sau:

Yêu cầu sửa đổi đã hoàn tất
"Sau khi cập nhật mariadb lên 10.4.6, đã xảy ra lỗi khi lưu phần tử khối thông tin"
Mô-đun: iblock, phiên bản: không xác định
Giải pháp: bị từ chối

Vì vậy, hiện tại, rõ ràng là không thể cập nhật lên 10.4 🙁

Nguồn: www.habr.com

Thêm một lời nhận xét