Bomber Code

Web Master => Servidores - Hosting => Mensaje iniciado por: Rock Lee en 22 Marzo de 2020, 05:08 pm

Título: Agregar soporte MySql 8 para VestaCP
Publicado por: Rock Lee en 22 Marzo de 2020, 05:08 pm
Bueno con esto de la cuarentena me pidieron que agregar soporte a VestaCP (https://vestacp.com/) sobre Debian 9, la ultima vez habia mirado no era totalmente estable para aplicarlo, por lo que me puse a probar si todo iba bien... Pense me iba a dar varios problemas pero por suerte fue todo medianamente sencillo, por eso primero añadimos los repositorios de MySql 8 con las siguientes lineas de comando:

Código: [Seleccionar]
wget https://dev.mysql.com/get/mysql-apt-config_0.8.10-1_all.deb

dpkg -i mysql-apt-config_0.8.10-1_all.deb


Sin embargo, lo que respecta a las bases de datos que creamos no funcionan y por eso debemos fixerlo (arreglarlo). Primero añadimos soporte para el sistema antiguo de contraseñas ya que no funcionará de momento con las contraseñas cifradas en SHA-256. Para eso es necesario modificar my.cnf después de [Mysqld] se tiene que agregar lo siguiente:

Código: [Seleccionar]
default_authentication_plugin=mysql_native_password

Reiniciamos mysql y fixeamos el VestaCP con lo siguiente:

https://github.com/serghey-rodin/vesta/pull/1805/files
https://github.com/serghey-rodin/vesta/pull/1806/files

De momento no es oficial, requiere revisión por parte de vestacp y testeos varios, en principio funcionan bien pero puede que tarden en ser aceptados, eso no se sabe. En todo caso el parche importante para que la creación de bases de datos y usuarios funcione es el parche 1805, que añade compatibilidad a mysql 8.

Lo más sencillo es reemplazar toda la función add_mysql_database del func/db.sh por la siguiente función modificada, se cambiaron muchas lineas así que reemplazarla es más sencillo:

Código: [Seleccionar]
add_mysql_database() {
    mysql_connect $host

    query="CREATE DATABASE \`$database\` CHARACTER SET $charset"
    mysql_query "$query" > /dev/null

   if [ "$(echo $mysql_ver |cut -d '.' -f1)" -eq 8 ]; then
        query="CREATE USER IF NOT EXISTS '$dbuser'@'localhost' IDENTIFIED BY '$dbpass';"
        mysql_query "$query" > /dev/null
        query="CREATE USER IF NOT EXISTS '$dbuser'@'%' IDENTIFIED BY '$dbpass';"
        mysql_query "$query" > /dev/null
        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`"
        query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost"
        mysql_query "$query" > /dev/null
    else
    query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@\`%\`
        IDENTIFIED BY '$dbpass'"
    mysql_query "$query" > /dev/null

    query="GRANT ALL ON \`$database\`.* TO \`$dbuser\`@localhost
        IDENTIFIED BY '$dbpass'"
    mysql_query "$query" > /dev/null
    fi 
     if [ "$(echo $mysql_ver |cut -d '.' -f2)" -ge 7 ] || [ "$(echo $mysql_ver |cut -d '.' -f1)" -eq 8 ]; then
        md5=$(mysql_query "SHOW CREATE USER \`$dbuser\`" 2>/dev/null)
        md5=$(echo "$md5" |grep password |cut -f8 -d \')
    else
        md5=$(mysql_query "SHOW GRANTS FOR \`$dbuser\`" 2>/dev/null)
        md5=$(echo "$md5" |grep PASSW|tr ' ' '\n' |tail -n1 |cut -f 2 -d \')
    fi
}

En lineas generales deberia funcionar todo sin problemas y el otro parche tienen que aplicarlo si quieren restaurar copias de seguridad (backups) ???


Saludos Familia!