Como corrigir casos de corrupção do InnoDB para os bancos de dados MySQL no Plesk para Windows?
imprimir- 0
Sintomas
O servidor Plesk SQL não pode ser iniciado com o seguinte erro:
Função incorreta (código de erro 1) ao iniciar o serviço PleskSQLServer em (service::startStopService linha 997) |
Erro 1067: O processo foi encerrado inesperadamente, Código de exceção: 0xc0000005 |
O MySQL no Windows está travando com o seguinte erro:
Nome do aplicativo com falha: mysqld.exe, versão: 5.6.36.0, registro de data e hora: 0x58ccdb65 Nome do módulo com falha: mysqld.exe, versão: 5.6.36.0, registro de data e hora: 0x58ccdb65 Código de exceção: 0x80000003 Compensação de falha: 0x00000000002bb162 ID do processo com falha: 0x17 64 Falha hora de início do aplicativo: 0x01d4639065120bae Caminho do aplicativo com falha: C:\Arquivos de programas\MySQL\MySQL Server 5.6\bin\mysqld.exe Caminho do módulo com falha: C:\Arquivos de programas\MySQL\MySQL Server 5.6\bin\mysqld.exe ID do relatório: f33b3065-14ac-4735-b77c-3653d732bef3 |
O seguinte pode ser observado no %plesk_dir%\databases\mysql\data\*.err
arquivo:
InnoDB: Corrupção do diretório da página: ínfimo não apontado para InnoDB: Despejo de página em ascii e hex (16384 bytes): len 16384; hexadecimal 00.....000; asc ; InnoDB: Fim do despejo de página |
[ERRO] InnoDB: Página [id da página: espaço=0, número da página=237] número de sequência de log 1737623713 está no futuro! Número de sequência de log do sistema atual 1704662866. |
[ERRO] InnoDB: Não é possível criar arquivos de log porque os arquivos de dados estão corrompidos ou o banco de dados não foi encerrado corretamente após a criação dos arquivos de dados. |
Caso seja o serviço PleskSQL, o Plesk está inacessível com:
ERROR 500 Zend_Db_Adapter_Exception SQLSTATE[HY000] [2002] Nenhuma conexão pôde ser feita porque a máquina de destino a recusou ativamente. |
As seguintes mensagens podem ser encontradas em Visualizador de Eventos > Logs do Windows > Aplicativo :
|
Nome do aplicativo com falha: mysqld.exe, versão: 5.5.52.0, registro de data e hora: 0x57c0337c Nome do módulo com falha: mysqld.exe, versão: 5.5.52.0, registro de data e hora: 0x57c0337c <..> Caminho do aplicativo com falha: C:\Arquivos de Programas ( x86)\Parallels\Plesk\MySQL\bin\mysqld.exe Caminho do módulo com falha: C:\Arquivos de programas (x86)\Parallels\Plesk\MySQL\bin\mysqld.exe ID do relatório: 3ec05b88-c439-11e8-8102-005056b17492 Nome completo do pacote com falha: ID do aplicativo relativo ao pacote com falha: |
A atualização do Plesk falha com o próximo erro:
ERRO 2013 (HY000) na linha 275: Conexão perdida com o servidor MySQL durante a consulta |
As seguintes informações são encontradas no %plesk_dir%MySQL\Data\*.err
arquivo:
InnoDB: Inicialização concluída do buffer pool InnoDB: Erro: soma de verificação incompatível no arquivo de dados .\ibdata1 InnoDB: Não foi possível abrir ou criar arquivos de dados. InnoDB: Se você tentou adicionar novos arquivos de dados e falhou aqui, InnoDB: agora você deve editar innodb_data_file_path em my.cnf de volta InnoDB: para o que era e remover os novos arquivos ibdata InnoDB criou InnoDB: nesta tentativa falhada. O InnoDB apenas escreveu aqueles arquivos cheios de InnoDB: zeros, mas ainda não os usou de forma alguma. Mas tenha cuidado: não InnoDB: remova arquivos de dados antigos que contêm seus dados preciosos! [ERRO] A função init do plug-in 'InnoDB' retornou um erro. [ERRO] Falha no registro do plug-in 'InnoDB' como STORAGE ENGINE. [ERRO] Mecanismo de armazenamento desconhecido/sem suporte: INNODB [ERRO] Abortando |
Causa
InnoDB corrupção.
A maioria das corrupções do InnoDB está relacionada ao hardware. Gravações de páginas corrompidas podem ser causadas por falhas de energia ou memória ruim. O problema também pode ser causado pelo uso de armazenamento conectado à rede (NAS) e pela alocação de bancos de dados InnoDB nele.
Resolução
Plesk tem dois servidores MySQL em uma plataforma Windows:
PleskSQLServer é para bancos de dados relacionados ao Plesk na porta 8306: [Windows] Servidor MySQL local para bancos de dados relacionados ao Plesk (psa, apsc, horde)
A outra é para bancos de dados MySQL do cliente na porta 3306: [Windows] Servidor MySQL local para bancos de dados dos clientes
Note: To start/stop/restart PleskSQLServer/MySQL, it is recommended to use Plesk Services Monitor.
Recupere o InnoDB para o servidor de banco de dados afetado:
Recuperação InnoDB para o serviço PleskSQLServer
-
Conecte-se ao servidor via RDP .
-
Crie um backup de todos os dados e bancos de dados MySQL relacionados ao Plesk em
%plesk_dir%MySQL\Data\
-
Abra o
%plesk_dir%MySQL\my.ini
arquivo. -
Adicione as seguintes linhas na
[PleskSQLServer]
seção:-
innodb_force_recovery = 1
skip-grant-tables
-
-
Tente iniciar o PleskSQLServer.
-
Caso falhe novamente, defina
innodb_force_recovery
um valor maior e tente iniciá-lo novamente.Warning: Only set
innodb_force_recovery
to a value greater than 0 in an emergency situation, so that you can start InnoDB and dump your tables. Values of 4 or greater can permanently corrupt data files. Therefore, increase this value incrementally, as necessary. Please see more details in the official MySQL Documentation. -
Depois que o PleskSQLServer for iniciado no modo de recuperação forçada, crie dumps de todos os bancos de dados usando o seguinte comando executado pelo PowerShell:
PS cd $env:plesk_dir\mysql\bin\
mkdir .\data_restore
.\mysql.exe -uadmin -P8306 -sNe "SHOW DATABASES" | findstr /V performance_schema | findstr /V information_schema > c:\db_list.txt
foreach ($var in get-content c:\db_list.txt) {.\mysqldump.exe -uadmin -P8306 $var > .\data_restore\$var.sql} -
Pare o serviço PleskSQLServer.
-
Remova todos os dados do MySQL, exceto
mysql
a pasta e os logs de erro do%plesk_dir%MySQL\Data\
diretório. -
Remova a linha
innodb_force_recovery
domy.ini
arquivo -
Inicie o PleskSQLServer
-
Restaure os bancos de dados dos dumps feitos durante a etapa 7:
PS foreach ($var in get-content c:\db_list.txt) {.\mysql.exe -uadmin -P8306 -e"create database $var"}
foreach ($var in get-content c:\db_list.txt) {get-content .\data_restore\$var.sql | .\mysql.exe -uadmin -P8306 $var} -
Remova a
skip-grant-tables
linha domy.ini
arquivo e reinicie o PleskSQLServer .
Recuperação InnoDB para o serviço MySQL de clientes-
Conecte-se ao servidor via RDP .
-
Crie um backup de todos os dados e bancos de dados MySQL atuais em
%plesk_dir%Databases\MySQL\data
-
Abra o
%plesk_dir%Databases\MySQL\my.ini
arquivo. -
Adicione a seguinte linha na
[MySQLD]
seção:innodb_force_recovery = 1
skip-grant-tables -
Tente iniciar o MySQL.
-
Caso falhe novamente, defina
innodb_force_recovery
um valor maior e tente iniciá-lo novamente.Warning: Only set
innodb_force_recovery
to a value greater than 0 in an emergency situation, so that you can start InnoDB and dump your tables. Values of 4 or greater can permanently corrupt data files. Therefore, increase this value incrementally, as necessary. Please see more details in the Official MySQL Documentation. -
Depois que o MySQL for iniciado no modo de recuperação forçada, crie despejos de todos os bancos de dados usando o seguinte comando executado pelo PowerShell:
PS cd $env:plesk_dir\mysql\bin\
mkdir .\data_restore
.\mysql.exe -uadmin -P3306 -e"SHOW DATABASES" > c:\db_list.txt
foreach ($var in get-content c:\db_list.txt) {.\mysqldump.exe -uadmin -P3306 $var > .\data_restore\$var.sql} -
Pare o serviço MySQL.
-
Remova todos os dados do MySQL, exceto
mysql
a pasta e os logs de erro do%plesk_dir%Databases\MySQL\data
diretório. -
Remova a linha
innodb_force_recovery
domy.ini
arquivo e inicie o MySQL. -
Restaure os bancos de dados dos dumps feitos durante a etapa 7:
PS foreach ($var in get-content c:\db_list.txt) {.\mysql.exe -uadmin -P3306 -e"create database $var" }
foreach ($var in get-content c:\db_list.txt) {get-content .\data_restore\$var.sql | .\mysql.exe -uadmin -P3306 $var} -
Remova a
skip-grant-tables
linha domy.ini
arquivo e reinicie o MySQL.
Se o MySQL falhar ao iniciar mesmo com o
innodb_force_recovery
valor mais alto possível definido como6
, o único método restante é reinicializar o MySQL e restaurar os bancos de dados de um backup:
Reinicialize o PleskSQLServer-
Conecte-se ao servidor via RDP .
-
Certifique-se de que haja dumps diários do Plesk disponíveis no servidor no arquivo
%plesk_dir%Mysql\Backup
. -
Pare o servidor Plesk SQL através do Plesk Services Monitor .
-
Crie um backup de todos os dados e bancos de dados MySQL atuais na
%plesk_dir%MySQL\Data
pasta. -
Inicie o prompt de comando e inicialize o MySQL executando o seguinte comando:
-
Para MariaDB >= 10.5:
"%plesk_dir%MySQL\bin\mysql_install_db.exe" --datadir="%plesk_dir%MySQL\Data" -
Para versões mais antigas do MariaDB/MySQL:
"%plesk_dir%MySQL\bin\mysqld.exe" --initialize --datadir="%plesk_dir%MySQL\Data" --console
-
-
Aplique as permissões corretas ao diretório MySQL:
plesk sbin ApplySecurity.exe --apply-to-directory --directory="%plesk_dir%MySQL" -
Inicie o Plesk SQL Server através do Plesk Services Monitor .
-
Crie um
root
usuário e senha MySQL:plesk sbin mysqlmng_adm.exe --inject-root
plesk sbin mysqlmng_adm.exe --add-super-user --login=admin "--password= senha " --allowed-host=localhost Note: Replace password with the password of choice
plesk sbin psadb.exe --update-admin-password --password=" senha " -
Faça login no servidor de banco de dados MySQL com a senha definida na etapa anterior:
"%plesk_dir%MySQL\bin\mysqld.exe" -uadmin -p" -
Crie o banco de dados psa e faça logoff do servidor de banco de dados:
CRIAR BANCO DE DADOS psa;
Consulta OK, 1 linha afetada (0,002 seg)
\q -
Restaure o
psa
banco de dados Plesk de um despejo diário . -
Crie o
apsc
banco de dados:plesk sbin mysqlmng_adm.exe --create-database --database=apsc
plesk sbin mysqlmng_adm.exe --add-user --database=apsc --new-user-login=apsc "--new-user-password= senha " --allowed-host=localhost
plesk php "%plesk_dir%admin\plib\scripts\register_apsc_database.php" --register -host 127.0.0.1 -port 8306 -database apsc -login apsc -password " password " -
Restaure o
apsc
banco de dados de um despejo diário como na etapa 9.
Para o servidor MySQL dos clientes-
Conecte-se ao servidor via RDP .
-
Crie um backup de todos os dados e bancos de dados MySQL atuais em formato
%plesk_dir%Databases\MySQL\Data
. -
Remova todos os dados da
%plesk_dir%Databases\MySQL\Data
pasta. -
Abra o prompt de comando como administrador e execute o comando abaixo para inicializar o MariaDB.
Note: In the example below the command is provided for MariaDB 10.6 and Plesk directory is a default one (
%plesk_dir%
=C:\Program Files (x86)\Plesk
). Please consider adjusting paths if required"C:\Program Files\MariaDB 10.6\bin\mysql_install_db.exe" --datadir="%plesk_dir%Databases\MySQL\Data" -
Inicie o MariaDB através do Plesk Services Monitor .
-
Abra o
%plesk_dir%Databases\MySQL\my.ini
arquivo para edição, adicione askip-grant-tables
opção a ele na[MySQLD]
seção:[MySQLD]
...
skip-grant-tablesSalve as alterações.
-
Reinicie o MariaDB através do Plesk Services Monitor para aplicar as alterações.
-
Faça login no MySQL dos clientes sem a senha por meio do prompt de comando:
"%plesk_dir%\MySQL\bin\mysql.exe" -P3306 -
Execute os comandos abaixo um a um:
9.1. Recarregue as políticas grant-tables executando o próximo comando:
FLUSH PRIVILÉGIOS; 9.2. Recrie o usuário especificando uma nova senha usando os próximos dois comandos:
CRIAR USUÁRIO 'admin'@'localhost' IDENTIFICADO POR ' senha ';
CONCEDA TODOS OS PRIVILÉGIOS EM . TO 'admin'@'localhost' identificado por ' password ' WITH GRANT OPTION; Note: Make sure to replace password with a new password of choice.
9.3. Diga ao servidor de banco de dados para recarregar as tabelas de concessão emitindo o comando FLUSH PRIVILEGES:
FLUSH PRIVILÉGIOS; -
Remova o
skip-grant-tables
do arquivo de configuração do MySQL%plesk_dir%Databases\MySQL\my.ini
e reinicie o serviço novamente como na Etapa 7. -
Navegue até Ferramentas e configurações > Servidores de banco de dados e clique em localhost .
-
Na página aberta, clique no botão Configurações e especifique a nova senha, que foi definida na Etapa 9.2 nos campos Senha do administrador e Confirmar senha .
-
No prompt de comando, execute o comando abaixo para sincronizar bancos de dados e usuários de banco de dados com o Plesk:
plesk repara mysql -y -
Restaure os bancos de dados dos clientes a partir de um backup .
-
-