Mysql Exportar configuración actual a un archivo

11

Perdimos nuestro archivo my.cnf y nos preguntamos si hay una manera de exportar una copia de la instancia de mysql actualmente en ejecución.

¡Gracias!

samspot
fuente

Respuestas:

16

Tres (3) opciones

OPCIÓN 1: desde el cliente mysql

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

Esto capturará todas las opciones en el archivo de texto.

OPCIÓN 2: desde la línea de comandos de Linux

ps -ef | grep mysqld | grep -v grep

Esto mostrará las opciones con las que mysqld comenzó como se establece en mysqld_safe

OPCIÓN 3: Pregunte al servidor directamente

mysqld --help --verbose

En la parte inferior de la pantalla 'mysqld --help --verbose', verá la configuración actual mysqld cargada desde my.cnf o predeterminada.

RolandoMySQLDBA
fuente
-1 Lo siento, pero esto no tiene sentido. ¿Por qué está volcando SHOW VARIABLES en un archivo de texto, luego ajusta la lista de procesos y no hace nada con sus resultados, luego dice lee la bandera de ayuda a mysqld?
Coops
@Coops: son tres cosas distintas. La primera captura las MOSTRAR VARIABLES en un archivo de texto. El segundo le permite ver qué opciones están especificadas por /etc/init.d/mysql en el inicio de mysql. El tercero le permite ver en la mitad inferior de la pantalla con qué opera mysqld actualmente. Depende de samspot hacer el trabajo preliminar de configurar esas opciones en /etc/my.cnf desde estas pantallas. ¿Debería haber escrito algo para automatizar y regenerar /etc/my.cnf?
RolandoMySQLDBA
Su línea de apertura es "haga todo lo siguiente" sugiriendo que proporcione una guía paso a paso para lograr una respuesta a la pregunta. ¡Tampoco explicas qué hace cada paso o cómo responde la pregunta, lo que aumenta la confusión! :-)
Coops
Perdón por cualquier confusión causada por la forma en que escribí mi respuesta originalmente.
RolandoMySQLDBA
Aunque regenerar my.cnf sería el mejor de los casos (esperaba que mysql pudiera hacer esto), esta es realmente una gran información para que podamos recuperarnos. Intenté buscar en Google esta información, pero todo lo que pude encontrar fueron artículos sobre cómo respaldar la base de datos. ¡Gracias!
samspot
3

Estas instrucciones son para el stock mariadb en centos 7.1.

Aquí se explica cómo hacer una copia de seguridad o replicar la configuración actual de una máquina en una nueva instalación, presente o futura.

En la máquina desde la que queremos copiar la configuración, podemos ejecutar:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

En otra máquina, podemos instalar mariadb-server y ejecutar:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

Luego colocamos ambos archivos en un directorio, que en este ejemplo es "/ a /".

Luego corremos:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

Si no hay salida, los dos archivos son idénticos. Lo que significa que todas las configuraciones, en ambas máquinas, están por defecto.

Si hay algo de salida, algunas líneas no se sangrarán, mientras que algunas líneas se sangrarán.

Las líneas no sangradas están presentes solo en el primer archivo, que aquí es /a/mysql_current_settings.txt.

Las líneas interminables están presentes solo en el segundo archivo, que aquí es /a/mysql_default_settings.txt.

Ahora conocemos todas las configuraciones, excepto algunas configuraciones que se establecen en la línea de comando que inició mysqld. Esta configuración puede provenir de /etc/my.cnf, o /etc/my.cnf.d/*, o un script personalizado, o un alias, etc. En cualquier caso, podemos verlos con el siguiente comando:

ps -ef | grep mysqld

Ahora conocemos las pocas configuraciones que tenemos que cambiar en una nueva instalación para configurarla como la anterior.


Aquí siguen algunos otros detalles.

En centos 7.1, el siguiente comando muestra todas las configuraciones actuales, excepto algunas configuraciones que se establecen en la línea de comando que inició mysqld:

/usr/libexec/mysqld --help --verbose

En total, muestra:

en la primera parte, la configuración que podemos usar como primer parámetro después de "mysqld" cuando la iniciamos;

en la segunda parte, la configuración establecida en tiempo de compilación;

en la tercera parte, la configuración actual.

Incluso si la última línea de su salida dice: para ver qué valores está utilizando un servidor MySQL en ejecución, escriba:

    mysqladmin variables -uroot -p

ese comando no muestra, fe, bind-address, incluso si lo cambiamos en /etc/my.cnf y reiniciamos mysql.

Además, el siguiente comando muestra muchas configuraciones pero no "bind-address":

mysql -uroot -p -e"SHOW VARIABLES;"

Tenga en cuenta que, en centos 7.1, mysqld no está en $ PATH.

el Salvador
fuente
2

Aquí está mi forma favorita de generar un my.cnf actual:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

Sin embargo, esto no funciona de manera confiable para Mac OS X.

Esto generará un registro limpio de variables, comentado, listo para importar a su my.cnf.

Fuente original: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Ryan
fuente
Algunas notas: 1. bsdmainutils necesita ser instalado 2. Advertencia: escribe la versión del cliente mysql, no el servidor
gadelat
Para la versión del servidor, el comando es mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. No estoy seguro de que importe, ya que creo que tanto el cliente como el servidor están instalados juntos. ¿Cuál es el propósito de {{{1y 1}}}?
beppe9000