tipos - usuarios y privilegios en mysql
Error fatal: no se pueden abrir y bloquear tablas de privilegios: la tabla ''mysql.host'' no existe (17)
Desinstalar mysql usando
yum remove mysql*
Eliminar recursivamente
/usr/bin/mysql
y/var/lib/mysql
Eliminar el archivo
/etc/my.cnf.rmp
Use
ps -e
para verificar los procesos y asegurarse de que mysql aún no se esté ejecutando.Reinicie el servidor con
reboot
Ejecute
yum install mysql-server
. Esto también parece instalar el cliente mysql como una dependencia.Dale propiedad mysql y privelegios de grupo con:
chown -R mysql /var/lib/mysql
chgrp -R mysql /var/lib/mysql
Use el
service mysqld start
para iniciar MySQL Daemon.
Estoy en un servidor que tiene una nueva instalación en RHEL 5. Pude instalar Apache y PHP sin problemas, pero estoy teniendo serios problemas con mi instalación de MySQL. Intenté lo siguiente:
yum install mysql-server mysql
Y no obtuvo ningún error o conflicto. Entonces traté de iniciar mysql con los siguientes comandos:
chkconfig --levels 235 mysqld on
service mysqld start
Y se Timeout error occurred trying to start MySQL Daemon.
Revisé mis registros y veo este error:
[ERROR] Fatal error: Can''t open and lock privilege tables: Table ''mysql.host'' doesn''t exist
No estoy seguro de a dónde ir desde aquí.
Como referencia, estoy usando RHEL 5 e instalé las últimas versiones de PHP 5 y Apache.
Acabo de encontrar el mismo problema con mysql 5.7 en OSX:
rm -rf {datadir}
mysqld --initialize --datadir {datadir}
mysqld --datadir {datadir}
Cuando descargue la versión zip de mysql, si ejecuta mysqld directamente, obtendrá este error: 2016-02-18T07: 23: 48.318481Z 0 [ERROR] Error fatal: No se pueden abrir y bloquear las tablas de privilegios: Tabla ''mysql.user'' no existe 2016-02-18T07: 23: 48.319482Z 0 [ERROR] Aborto
Primero debes ejecutar debajo del comando: mysqld --initialize
Asegúrese de que su carpeta de datos esté vacía antes de este comando.
Después de chown
y chgrp
''ing /var/lib/mysql
según la respuesta de @Bad Programmer , también puede tener que ejecutar el siguiente comando:
sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql
Luego reinicia tu mysqld
.
En CentOS EL 6 y quizás en versiones anteriores, hay una forma de meterse en este mismo lío.
Instale CentOS EL6 con una instalación mínima. Por ejemplo, utilicé kickstart para instalar lo siguiente:
%packages
@core
acpid
bison
cmake
dhcp-common
flex
gcc
gcc-c++
git
libaio-devel
make
man
ncurses-devel
perl
ntp
ntpdate
pciutils
tar
tcpdump
wget
%end
Encontrará que una de las dependencias de la lista anterior es mysql-libs
. Descubrí que mi sistema tiene un my.cnf
predeterminado en /etc
y contiene:
[mysqld]
dataddir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Cuando compila desde el Generic Linux (Architecture Independent), Compressed TAR Archive
su directorio de datos predeterminado es /usr/local/mysql/data
que entra en conflicto con el /etc/my.cnf
ya presente que define datadir=/var/lib/mysql
. Además, el pid-file
definido en el mismo archivo no tiene permisos para que el usuario / grupo mysql escriba en /var/run/mysqld
.
Un remedio rápido es mv /etc/my.cnf /etc/my.cnf.old
que debería hacer funcionar su procedimiento fuente genérico.
Por supuesto, la experiencia es diferente de usar las RPM fuente.
En mi caso, la ruta de la carpeta de datos MySQL tenía un carácter especial "ç" y me hace obtener ...
Error fatal: no se pueden abrir y bloquear tablas de privilegios: la tabla ''mysql.host'' no existe.
He eliminado todos los caracteres especiales y todo funciona.
La raíz de mi problema parecía ser selinux, que se activó automáticamente en la instalación del sistema operativo.
Yo quería mi mysql en / data.
Después de verificar que my.cnf tenía:
datadir=/data/mysql
(y dejando el socket en / var / lib / mysql) ejecuté el comando para apagar selinux para mysqld (la alternativa es apagarlo por completo):
setsebool -P mysqld_disable_trans=1
Ejecuté los siguientes comandos:
> chown -R mysql .
> chgrp -R mysql .
> mysql_install_db --user=mysql
Inicié el daemon mysql y todo funcionó bien después de eso.
Mi caso en Ubuntu 14.04.2 LTS fue similar a otros con my.cnf, pero para mí la causa fue un ~ / .my.cnf que fue el resto de una instalación anterior. Después de eliminar ese archivo y purgar / reinstalar mysql-server, funcionó bien.
Obtuve un error similar en overlayfs (overlay2) que es el predeterminado en Docker para Mac. El error ocurre al iniciar mysql en la imagen, después de crear una imagen con mysql.
2017-11-15T06:44:22.141481Z 0 [ERROR] Fatal error: Can''t open and lock privilege tables: Table storage engine for ''user'' doesn''t have this option
Cambiar a "aufs" resolvió el problema. (En Docker para Mac, el "daemon.json" se puede editar seleccionando el menú "Preferencias ..." y seleccionando la pestaña "Daemon", y seleccionando la pestaña "Avanzado").
/etc/docker/daemon.json:
{
"storage-driver" : "aufs",
"debug" : true,
"experimental" : true
}
Árbitro:
Para mí, tuve que hacer:
yum remove mysql*
rm -rf /var/lib/mysql/
cp /etc/my.cnf ~/my.cnf.bkup
yum install -y mysql-server mysql-client
mysql_install_db
chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /var/log/mysql
service mysql start
Luego pude volver a mis bases de datos y configurarlas de nuevo después de que las desconecté por primera vez.
Si mueve su datadir, no solo necesita dar los permisos del nuevo DataDir, sino que debe asegurarse de que todos los directorios principales tengan permiso.
Moví mi datadir a un disco duro, montado en Ubuntu como:
/media/*user*/Data/
y mi datadir era Bases de datos .
Tuve que establecer permisos para 771 en cada uno de los medios, usuarios y directorios de datos:
sudo chmod 771 *DIR*
Si esto no funciona, otra forma de hacer que mysql funcione es cambiar el usuario en /etc/mysql/my.cnf a root; aunque no hay duda de algunos problemas para hacerlo desde una perspectiva de seguridad.
Si tiene un servidor que solía ejecutar MySQL felizmente, pero ahora ofrece este error, entonces una desinstalación y reinstalación de MySQL es excesiva.
En mi caso, el servidor murió y tomó algunos bloques de disco con él. Esto afectó a algunos archivos, incluidos /var/lib/mysql/mysql/host.frm y /var/lib/mysql/mysql/proc.frm
Afortunadamente, pude copiarlos de otro servidor, y esto me ayudó a superar el error de la tabla.
Solo este comando es suficiente para hacer la magia en centos 6.6
mysql_install_db
También tuve este problema en Arch Linux. El problema fue que pacman instaló el paquete en una ubicación diferente a la que esperaba MySQL. Pude solucionar el problema con esto:
sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/
¡Espero que esto ayude a alguien!
Tuve el mismo problema al tratar de iniciar el servidor y seguí la solución "comprobada". Pero todavía tenía el problema. El problema era que mi archivo /etc/my.cnf no apuntaba a mi datadir designado como se definió cuando ejecuté mysql_install_db con --datadir definido. Una vez que actualicé esto, el servidor comenzó correctamente.
inicializar mysql antes de iniciar en Windows.
mysqld --initialize
mysql_install_db –-user=mysql –ldata=/var/lib/mysql
Trabajó para mí en Centos 7