2015-10-13 2 views
2

J'installe un serveur de réplication et lorsque je tente de démarrer le service MySQL pour la première fois, il échoue:moteur de stockage inconnu/non pris en charge: InnoDB

[[email protected] mysql]# service mysqld start 
MySQL Daemon failed to start. 
Starting mysqld:           [FAILED] 
[[email protected] mysql]# tail /var/log/mysqld.log 
151013 13:41:27 [ERROR] Plugin 'InnoDB' init function returned error. 
151013 13:41:27 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed. 
/usr/libexec/mysqld: File '/databases/mysql/mysql_slow_queries.log' not found (Errcode: 13) 
151013 13:41:27 [ERROR] Could not use /databases/mysql/mysql_slow_queries.log for logging (error 13). Turning logging off for the whole duration of the MySQL server process. To turn it on again: fix the cause, shutdown the MySQL server and restart it. 
151013 13:41:27 [ERROR] Unknown/unsupported storage engine: InnoDB 
151013 13:41:27 [ERROR] Aborting 

151013 13:41:27 [Note] /usr/libexec/mysqld: Shutdown complete 

151013 13:41:27 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended 

Je confirme que l'utilisateur mysql voit et est capable d'écrire au /databases/mysql/mysql_slow_queries.log. Puis j'ai vérifié getenforce et voir qu'il est réglé sur Enforcing.

Comment configurer MySQL pour qu'il fonctionne correctement avec SELinux?

Répondre

0

Ok, c'était effectivement much easier than expected. Par défaut, SELinux est Enforcing, ce qui empêche les écritures inattendues sur le système de fichiers. J'avais juste besoin de dire à SELinux que MySQL pouvait écrire dans un répertoire non-standard. A savoir:

[[email protected]]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?" 
-bash: semanage: command not found. 

Derp. Pour installer semanage, utilisez ceci:

yum install policycoreutils-python 

Maintenant, exécutez la commande à nouveau. Cela peut prendre quelques instants ...

[[email protected]]# semanage fcontext -a -t mysqld_db_t "/databases/mysql(/.*)?" 

Vérifiez pour voir que SELinux est configuré pour ce nouveau répertoire en regardant ce fichier de configuration:

[[email protected]]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local 

/databases/mysql(/.*)? system_u:object_r:mysqld_db_t:s0 

répertoires supplémentaires peuvent être ajoutés, par exemple si vous avez un répertoire tmp dédié quelque part.

[[email protected]]# semanage fcontext -a -t mysqld_db_t "/databases/mysql_tmp(/.*)?" 

Vérifiez la configuration à nouveau:

[[email protected]]# grep -i mysql /etc/selinux/targeted/contexts/files/file_contexts.local 

/databases/mysql(/.*)? system_u:object_r:mysqld_db_t:s0 
/databases/mysql_tmp(/.*)? system_u:object_r:mysqld_db_t:s0 

Enfin, mettre à jour les autorisations à l'aide restorecron

restorecon -R -v /www/databases/mysql/ 

et dans ma configuration,

restorecon -R -v /www/databases/mysql_tmp/ 

question maintenant:

service mysqld start 

Bene.

Starting mysqld:   [ OK ] 
1

Ce résolu mon problème

sudo apt-get remove --purge mysql-server mysql-client mysql-common 
sudo apt-get autoremove 
sudo apt-get autoremove 

sudo rm /var/lib/mysql/ib_logfile0 
sudo rm /var/lib/mysql/ib_logfile1 

sudo apt-get install mysql-server 
7

Tout ce que je avais besoin était de supprimer deux fichiers qui sont:

ib_logfile0 

et

ib_logfile1 

ensuite retourner à commencer mysql tout a fonctionné