Acabo de hacer esto en CentOS 6.7 con lo siguiente:
mysql_secure_installation <<EOF
y
secret
secret
y
y
y
y
EOF
Desde mysql_secure_installation
es solo un script Bash, solo revise el código fuente sin procesar como se muestra aquí. Busque las líneas que dicen, do_query
(tenga en cuenta que el espacio adicional que coloqué después de do_query
; necesita encontrar consultas versus la función) y luego puede encontrar estos comandos.
UPDATE mysql.user SET Password=PASSWORD('root') WHERE User='root';
DELETE FROM mysql.user WHERE User='';
DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1', '::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
FLUSH PRIVILEGES;
Tenga en cuenta que para este ejemplo, tengo la contraseña establecida en root
pero siéntase libre de cambiar eso para que coincida con sus necesidades de configuración. De todos modos, toma esa pila de comandos de MySQL y guárdala en un archivo llamado mysql_secure_installation.sql
.
Una vez hecho esto, simplemente ejecute el siguiente comando a través de un script para asegurar la instalación de MySQL:
mysql -sfu root < "mysql_secure_installation.sql"
El s
silencia los errores y el f
fuerza a los comandos a continuar incluso si uno se ahoga. El u
se relaciona con el nombre de usuario que le sigue inmediatamente que, en este caso, es claramente root
.
Ejecute eso en un script de implementación donde MySQL se instala inicialmente sin una contraseña y está listo para bloquearlo sin ninguna interacción con el teclado.
PD:este script se creó para asegurar una instalación de MySQL en Ubuntu 14.04 que se instaló con el export DEBIAN_FRONTEND=noninteractive
set y el comando de instalación real se establece en sudo -E aptitude install -y --assume-yes -q mysql-server mysql-client
. Hacer eso instalará MySQL en Ubuntu sin contraseña; lo cual es bueno para los scripts de implementación. Este mysql -sfu root < "mysql_secure_installation.sql"
simplemente lo bloquea todo en segundos después de que ocurre la instalación.
Me topé con esta pregunta pero decidí ejecutar las consultas manualmente a través de un script Bash:
#!/bin/bash
# Make sure that NOBODY can access the server without a password
mysql -e "UPDATE mysql.user SET Password = PASSWORD('CHANGEME') WHERE User = 'root'"
# Kill the anonymous users
mysql -e "DROP USER ''@'localhost'"
# Because our hostname varies we'll use some Bash magic here.
mysql -e "DROP USER ''@'$(hostname)'"
# Kill off the demo database
mysql -e "DROP DATABASE test"
# Make our changes take effect
mysql -e "FLUSH PRIVILEGES"
# Any subsequent tries to run queries this way will get access denied because lack of usr/pwd param
Puede intentar usar expect, que automatiza las aplicaciones interactivas. Mire esto automatizando mysql_secure_installation o mi modificación.