Mysql Exporter la configuration actuelle dans un fichier

11

Nous avons perdu notre fichier my.cnf et nous nous demandions s'il existe un moyen d'exporter une copie de l'instance mysql en cours d'exécution.

Merci!

samspot
la source

Réponses:

16

Trois (3) options

OPTION 1: Depuis le client mysql

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

Cela capturera toutes les options dans le fichier texte.

OPTION 2: à partir de la ligne de commande Linux

ps -ef | grep mysqld | grep -v grep

Cela affichera les options que mysqld a commencé avec comme défini dans mysqld_safe

OPTION 3: Demandez directement au serveur

mysqld --help --verbose

Au bas de l'affichage 'mysqld --help --verbose', vous verrez les paramètres actuels mysqld chargés depuis my.cnf ou par défaut.

RolandoMySQLDBA
la source
-1 Désolé, mais cela n'a aucun sens. Pourquoi videz-vous SHOW VARIABLES dans un fichier texte, puis greping la liste de processus et ne faites rien avec ses résultats, puis dites lire le drapeau d'aide à mysqld?
Coops
@Coops - Ce sont trois choses distinctes. Le premier capture les VARIABLES AFFICHÉES dans un fichier texte. La seconde vous permet de voir quelles options sont spécifiées par /etc/init.d/mysql au démarrage de mysql. Le troisième vous permet de voir dans la moitié inférieure de l'écran avec quoi mysqld fonctionne actuellement. Il appartient à samspot de faire le travail de jambe pour définir ces options dans /etc/my.cnf à partir de ces affichages. Dois-je avoir écrit quelque chose pour automatiser et régénérer /etc/my.cnf?
RolandoMySQLDBA
Votre première ligne est «faites tout ce qui suit», suggérant que vous fournissiez un guide étape par étape pour obtenir une réponse à la question. Vous n'expliquez pas non plus ce que fait chaque étape, ni comment elle répond à la question, ce qui ajoute à la confusion! :-)
Coops
Désolé pour toute confusion causée par la façon dont j'ai écrit ma réponse à l'origine.
RolandoMySQLDBA
Même si la régénération de my.cnf serait le meilleur cas (j'espérais que mysql pourrait le faire), c'est vraiment une excellente information pour nous de récupérer. J'avais essayé de googler pour cette information mais tout ce que j'ai pu trouver était des articles sur le support de la base de données. Merci!
samspot
3

Ces instructions concernent le stock de mariadb sur centos 7.1.

Voici comment sauvegarder ou répliquer les paramètres actuels d'une machine vers une nouvelle installation, présente ou future.

Sur la machine à partir de laquelle nous voulons copier les paramètres, nous pouvons exécuter:

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

Sur une autre machine, nous pouvons installer mariadb-server et exécuter:

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

Ensuite, nous mettons les deux fichiers dans un répertoire, qui dans cet exemple est "/ a /".

Ensuite, nous courons:

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

S'il n'y a pas de sortie, les deux fichiers sont identiques. Ce qui signifie que tous les paramètres, sur les deux machines, sont par défaut.

S'il y a une sortie, alors certaines lignes ne seront pas indentées, tandis que certaines lignes seront indentées.

Les lignes non indentées sont présentes uniquement dans le premier fichier, qui est ici /a/mysql_current_settings.txt.

Les lignes de retrait ne sont présentes que dans le deuxième fichier, qui est ici /a/mysql_default_settings.txt.

Maintenant, nous connaissons tous les paramètres, à l'exception de certains paramètres définis dans la ligne de commande qui a démarré mysqld. Ces paramètres peuvent provenir de fichiers /etc/my.cnf, /etc/my.cnf.d/*, ou d'un script personnalisé, ou d'un alias, etc. Dans tous les cas, nous pouvons les voir avec la commande suivante:

ps -ef | grep mysqld

Maintenant, nous connaissons les quelques paramètres que nous devons modifier sur une nouvelle installation pour la configurer comme l'ancienne.


Voici quelques autres détails.

Sur centos 7.1, la commande suivante affiche tous les paramètres actuels, à l'exception de certains paramètres définis dans la ligne de commande qui a démarré mysqld:

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

Au total, cela montre:

dans la première partie, les réglages que nous pouvons utiliser comme premier paramètre après "mysqld" au démarrage;

dans la deuxième partie, les paramètres définis lors de la compilation;

dans la troisième partie, les paramètres actuels.

Même si la dernière ligne de sa sortie indique: pour voir quelles valeurs utilise un serveur MySQL en cours d'exécution, tapez:

    mysqladmin variables -uroot -p

cette commande n'affiche pas, fe, bind-address, même si nous la modifions dans /etc/my.cnf et redémarrons mysql.

La commande suivante affiche également de nombreux paramètres, mais pas "bind-address":

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

Notez que, sur centos 7.1, mysqld n'est pas dans $ PATH.

Salvador
la source
2

Voici ma façon préférée de générer un my.cnf actuel:

{ 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

Cependant, cela ne fonctionne pas de manière fiable pour Mac OS X.

Cela produira un journal de variables propre, commenté, prêt à être importé dans votre my.cnf.

Source d'origine: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Ryan
la source
Quelques notes: 1. bsdmainutils doit être installé 2. Attention: il écrit la version du client mysql, pas le serveur
gadelat
Pour la version serveur, la commande est mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Je ne suis pas sûr que cela soit important car je pense que le client et le serveur sont installés ensemble. Quel est le but de {{{1et 1}}}?
beppe9000