MySQL/MariaDB falha ao iniciar em um servidor Plesk para Linux: não é possível abrir e bloquear tabelas de privilégios
imprimir- 0
Sintomas
-
O MySQL/MariaDB falha ao iniciar devido às tabelas ausentes/corrompidas no banco de dados 'mysql'. As seguintes mensagens de erro aparecem em
/var/log/mysqld.log
ou/var/log/mariadb/mariadb.log
:[ERROR] Fatal error: Can't open and lock privilege tables: Incorrect file format '<table_name>'
[ERROR] Fatal error: Can't open and lock privilege tables: Table '<table_name>' doesn't exist
/usr/sbin/mysqld: Table '<table_name>' doesn't exist
[ERROR] Can't open the <table_name> table. Please run mysql_upgrade to create it.
Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not load
-
O Plesk não está acessível com uma das seguintes mensagens de erro em um navegador da web:
ERROR: PleskDBException: Unable to connect to database: mysql_connect(): No such file or directory /var/run/mysqld/mysqld.sock (Error code: 2002). Please check that database server is started and accessible. (Abstract.php:69)
ERROR: Uncaught exception 'Zend_Log_Exception' with message '"/var/log/plesk/panel.log" cannot be opened with mode "a"' in /usr/local/psa/admin/externals/Zend/Log/Writer/Stream.php:81
SQLSTATE[HY000] [2002] No such file or directory.
Causa
As tabelas no mysql
banco de dados estão ausentes ou corrompidas.
Resolução
-
Conecte-se ao servidor Plesk via SSH .
-
Pare o serviço MariaDB/MySQL:
# service mariadb stop
# service mysql stop -
Adicione
skip-grant-tables
aomy.cnf
arquivo:3.1. Abra o
my.cnf
arquivo em um editor de texto. Neste exemplo, estamos usando o editor vi :-
em distribuições baseadas em CentOS/RHEL
# vi /etc/my.cnf -
em distribuições baseadas em Debian/Ubuntu
# vi /etc/mysql/my.cnf
3.2. Adicione a
skip-grant-tables
diretiva na[mysqld]
seção:[mysqld]
skip-grant-tables3.3. Salve as alterações e feche o arquivo.
-
-
Inicie o serviço MariaDB/MySQL:
# service mariadb start # service mysql start -
Crie um despejo de banco de dados do
mysql
banco de dados:# MYSQL_PWD=`cat /etc/psa/.psa.shadow` mysqldump -uadmin --skip-extended-insert mysql > /root/mysql_dump.`date +%F.%s`.sql
-
Mova o
mysql
diretório para/root
:# mv /var/lib/mysql/mysql/ /root -
Liste todos os dumps diários do Plesk disponíveis ( a pasta de dumps padrão é
/var/lib/psa/dumps
):# ls -lat `cat /etc/psa/psa.conf | grep DUMP_D | grep -v "#" | awk '{print $2}'`/mysql.daily.dump*
-rw------- 1 root root 236253 Dec 3 01:51 /var/lib/psa/dumps/mysql.daily.dump.0.gz
-rw------- 1 root root 229653 Jul 2 01:48 /var/lib/psa/dumps/mysql.daily.dump.1.gz
-rw------- 1 root root 222485 Apr 1 01:56 /var/lib/psa/dumps/mysql.daily.dump.2.gz -
Restaure o
mysql
banco de dados do despejo diário mais recente do Plesk:# zcat /var/lib/psa/dumps/mysql.daily.dump.0.gz | sed -n '/-- Current Database: `mysql`/,/-- Current Database:*/p' | mysql -uadmin mysql -
Remova a
skip-grant-tables
diretiva que foi adicionada na etapa 3. -
Inicie o serviço MariaDB/MySQL:
# service mariadb restart
# service mysql restart