Bom dia, queridos Khabrovchianos! Deixe-me me apresentar, Alexander. Administrador do sistema de um pequeno, mas orgulhoso estúdio WEB. Nós realmente queremos que tudo funcione rapidamente, com segurança e com software novo. Para fazer isso, eles ainda geraram um monte de nagios + PhantomJS no computador do escritório e verificaram a velocidade de carregamento da página a cada 30 minutos. De acordo com os termos de serviço, também seguimos as atualizações do 1C-Bitrix e as instalamos regularmente. E uma vez, após a próxima atualização, vemos uma mensagem no painel de administração informando que, no verão de 2019, o 1C-Bitrix para de trabalhar com o MySQL 5.5 e precisa ser atualizado. Os caras do ISPSystem são bonitos e expandem regularmente a funcionalidade do painel, pela qual agradeço separadamente. Mas desta vez não foi possível clicar em todo o mouse. Mas o que aconteceu e quanto cabelo grisalho está agora na minha barba pode ser encontrado embaixo do corte.
Havia apenas uma opção para colocar um "servidor DBMS alternativo", que é colocado no contêiner do Docker. Obviamente, entendo que o Docker é muito eficiente em termos de recursos, mas não importa o quão legal ele funcione, a sobrecarga ainda será> 0. E aqui estamos lutando, por assim dizer, em décimos de segundo, e na entrada otimizamos todos os sites antes de publicar e assinar um contrato. Portanto, essa não é minha opção.
Ok, o que está escrito na documentação? No total do backup, adicione um arquivo com um link ao repositório MariaDB em yum.repos.d e, em seguida,
rpm -e --nodeps MariaDB-server MariaDB-client MariaDB-common
Yum amaldiçoará depois que alguém removeu / instalou pacotes sem o seu conhecimento. Mas, primeiro, deixe jurar, tudo bem. Em segundo lugar, se você fizer a exclusão via yum, ele tenta derrubar com MariaDB tudo o que está relacionado a ela, e isso é PHP, ISPManager e PHPmyadmin. Portanto, lidaremos com rabiscos.
yum clean all yum update yum install MariaDB-server MariaDB-client MariaDB-common
Em geral, tudo foi montado e encerrado. O bom é que as bases foram recolhidas e não houve necessidade de restaurá-las dos lixões. Eu verifiquei os sites - eles funcionam e rapidamente. Entrei em algumas páginas de administração para garantir que nada caísse e escrevi para o diretor que estava tudo bem. Em menos de 30 minutos, descobriu-se que não estava tudo bem ...
Ao tentar acessar o painel de administração e adicionar / editar qualquer coisa, uma mensagem caiu no conteúdo
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']
Como nossos funcionários estão adicionando conteúdo ao site, os clientes ainda não sabiam de nada e ainda não haviam começado a nos separar. Mas era uma questão de tempo, porque as informações nos sites precisam ser atualizadas e é isso que muitos clientes seguem a si mesmos e de perto.
A partir do texto do erro, podemos concluir que o Bitrix está tentando adicionar um novo registro ao banco de dados enquanto indica a mesma chave primária que o artigo editado. Portanto, há motivos para suspeitar que o problema surge do lado do Bitrix. Vamos ao site deles e voltamos para o suporte. Quase imediatamente obtemos a resposta “um problema difícil. Entregue a engenheiros seniores - espere ... "
Eu tive que esperar muito tempo (todo o diálogo ocorreu de 25/06/2019 a 09/09/2019) e o resultado foi a mensagem “esse problema não está relacionado à operação do Bitrix CMS, mas à operação do próprio banco de dados no mariadb 10.4.6 e, infelizmente, com do lado do site esse problema para resolver a possibilidade está faltando, será necessário atualizar para a versão antiga do MariaDB.
Eles chegaram ... Pensei no rebaixamento no início da história, mas
aqui é dito em preto e branco que não pode haver rebaixamento. Mesclar despejos e implantar novamente em um servidor instalado corretamente. I.e. é bom que eu não atualizei todos os servidores de uma só vez. I.e. “Apenas” cem sites (uma risada nervosa :-)). Eles também disseram em apoio: “Para resolver o problema ao usar o banco de dados MariaDB 10.4.6, você precisará entrar em contato com o suporte técnico do MariaDB para que a transação não exclua o registro do banco de dados se a solicitação for feita:
$DB->Query("DELETE FROM ".$strTable." WHERE ID = ".$res["ID"]); $results = $DB->Query("SELECT * FROM ".$strTable." WHERE ID = ".$res["ID"]);”
Nadezhda estava aquecendo há algumas horas desde o início da comunicação com o suporte do MariaDB, mas então chegou uma carta na qual eles me disseram corretamente que eu não era um usuário comercial e, portanto, ninguém resolveria deliberadamente o meu problema, mas havia um fórum no site deles e você poderia tentar procurar opções lá ... Eu não vou aborrecer os detalhes. Não há opções lá.
Oh! Temos uma licença comprada para o ISP!
- Olá suporte? Gente, ajuda!
- Desculpe, não oferecemos suporte aos scumbags que alteram a versão nativa do DBMS. Você quer - existe uma opção com um servidor alternativo na janela de encaixe.
- Mas como os usuários e bancos de dados chegam lá? Para docker?
- Bem, você os arrasta para lá com as mãos ...
Sim! E não esqueça que a porta para o mysql mudará e você precisará passar por todas as configurações e reescrevê-lo.
- Ok, obrigado, eu vou pensar ...
Pensei e decidi demolir 10.4 com canetas e colocar 10.2 com as quais não havia problemas em outros servidores.
O processo não foi muito diferente do processo de atualização. Somente no link para o repositório foi necessário alterar 10.4 para 10.2, redefinir e recriar o cache para o yum. Bem, mais uma "ninharia": depois de remover a 10.4, vá para / var / lib / mysql e exclua tudo daqui. Sem esta etapa, após a instalação do 10.2, o serviço cairá constantemente e você verá
'' Lost connection to MySQL server at 'reading initial communication packet', system error: 104 "Connection reset by peer"
Ou
Lost connection to MySQL server at 'handshake: reading inital communication packet', system error: 104
Antes de importar os bancos de dados, primeiro defina a senha raiz do mysql que foi registrada nas configurações do ISP e importei o dump do banco de dados mysql. Bem, então, como já existem usuários e direitos, simplesmente importamos todas as bases de usuários em uma linha com a conta raiz.
Texto de script para despejo de banco de dados:
Antes de importar bancos de dados, é necessário descompactá-los. Então, basta executar o comando
gunzip /BACK/*.gz
E a última: por algum motivo, hífens são permitidos no nome dos bancos de dados (se você criar através do ISPmanager). Mas, ao criar ou tentar preencher o despejo no banco de dados com um hífen no nome, você recebe uma mensagem informando que a sintaxe da consulta está incorreta.
Leia até o final de todas as bênçãos. Peço desculpas pelas vírgulas provavelmente não colocadas - problemas com elas. Se houver desejos / sugestões sobre a essência do que está descrito - escreva em uma mensagem pessoal porque tenho medo de perder alguma coisa nos comentários. E não juro muito - este é o meu primeiro artigo :-)
UPD1:
Quase esqueci de mencionar: enquanto tentava encontrar uma solução para o problema sem fazer o downgrade do MariaDB, tive que atualizar de alguma forma as informações. Ele foi atualizado da seguinte forma: o banco de dados inteiro é convertido do InnoDB para MyISAM, as informações são atualizadas e depois convertidas novamente para o InooDB.
UPD2:
Acabou de chegar uma carta da 1C-Bitrix com o seguinte conteúdo:
Pedido de revisão implementado
"Após atualizar o mariadb para 10.4.6, ocorreu um erro ao salvar o elemento do bloco de informações"
Módulo: iblock, versão: desconhecido
Solução: rejeitado
Portanto, embora seja aparentemente impossível atualizar para 10.4 :-(