Mysql Экспорт текущей конфигурации в файл

11

Мы потеряли наш файл my.cnf и задались вопросом, есть ли способ экспортировать копию из запущенного в данный момент экземпляра mysql.

Благодарность!

samspot
источник

Ответы:

16

Три (3) варианта

ВАРИАНТ 1: Из клиента mysql

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

Это захватит все параметры в текстовом файле.

ВАРИАНТ 2: Из командной строки Linux

ps -ef | grep mysqld | grep -v grep

Это покажет параметры mysqld, начатые как установленные из mysqld_safe

ВАРИАНТ 3: Запросите сервер напрямую

mysqld --help --verbose

В нижней части экрана «mysqld --help --verbose» вы увидите текущие настройки mysqld, загруженные из my.cnf или по умолчанию.

RolandoMySQLDBA
источник
-1 Извините, но в этом нет смысла. Почему вы выгружаете SHOW VARIABLES в текстовый файл, затем извлекаете список процессов и ничего не делаете с его результатами, а затем говорите: прочитайте флаг помощи mysqld?
Coops
@Coops - это три разные вещи. Первый захватывает ШОУ-ПЕРЕМЕННЫЕ в текстовом файле. Второй позволяет вам увидеть, какие параметры указаны /etc/init.d/mysql при запуске mysql. Третий позволяет увидеть в нижней половине экрана, с чем работает mysqld. Задача samspot состоит в том, чтобы выполнить эти настройки в /etc/my.cnf. Должен ли я написать что-нибудь для автоматизации и восстановления /etc/my.cnf?
RolandoMySQLDBA
Ваша первая строка - «сделайте все из следующего», предлагая вам предоставить пошаговое руководство, чтобы получить ответ на вопрос. Вы также не объясняете, что делает каждый шаг или как он отвечает на вопрос, добавляя путаницу! :-)
Coops
Извините за путаницу, вызванную тем, как я изначально написал свой ответ.
RolandoMySQLDBA
Хотя восстановление my.cnf было бы лучшим вариантом (я надеялся, что MySQL сможет это сделать), это действительно отличная информация для восстановления. Я пытался найти эту информацию, но все, что я мог найти, это статьи о поддержке базы данных. Благодарность!
samspot
3

Эти инструкции предназначены для стоковой mariadb на centos 7.1.

Далее описывается, как сделать резервную копию или скопировать текущие настройки компьютера для новой установки, текущей или будущей.

На машине, с которой мы хотим скопировать настройки, мы можем запустить:

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

На другой машине мы можем установить mariadb-сервер и запустить:

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

Затем мы помещаем оба файла в один каталог, который в этом примере является "/ a /".

Затем мы запускаем:

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

Если нет вывода, то оба файла идентичны. Это означает, что все настройки на обеих машинах установлены по умолчанию.

Если есть какой-либо вывод, то некоторые строки не будут с отступом, тогда как некоторые строки будут с отступом.

Неотступающие строки присутствуют только в первом файле, который здесь /a/mysql_current_settings.txt.

Строки с отступом присутствуют только во втором файле, который здесь /a/mysql_default_settings.txt.

Теперь мы знаем все настройки, за исключением некоторых настроек, которые задаются в командной строке, которая запустила mysqld. Эти настройки могут исходить из файлов /etc/my.cnf или /etc/my.cnf.d/*, либо из собственного сценария, либо из псевдонима и т. Д. В любом случае мы можем увидеть их с помощью следующей команды:

ps -ef | grep mysqld

Теперь мы знаем очень мало параметров, которые мы должны изменить в новой установке, чтобы настроить ее как старую.


Здесь следуйте за некоторыми другими деталями.

В centos 7.1 следующая команда показывает все текущие настройки, за исключением некоторых настроек, которые установлены в командной строке, которая запустила mysqld:

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

В общей сложности это показывает:

в первой части настройки, которые мы можем использовать в качестве первого параметра после «mysqld» при запуске;

во второй части настройки устанавливаются во время компиляции;

в третьей части текущие настройки.

Даже если в последней строке его вывода написано: чтобы увидеть, какие значения использует работающий сервер MySQL, введите:

    mysqladmin variables -uroot -p

эта команда не показывает, например, bind-адрес, даже если мы изменим его в /etc/my.cnf и перезапустим mysql.

Также следующая команда показывает множество настроек, но не «bind-address»:

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

Обратите внимание, что в centos 7.1 mysqld отсутствует в $ PATH.

Сальвадор
источник
2

Вот мой любимый способ создания текущего my.cnf:

{ 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

Тем не менее, это не работает надежно для Mac OS X.

Это выведет чистый журнал переменных, закомментированный, готовый для импорта в ваш my.cnf.

Первоисточник: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Райан
источник
Некоторые примечания: 1. Необходимо установить bsdmainutils 2. Предупреждение: записывает версию клиента mysql, а не сервера
gadelat
Для версии сервера команда есть mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Не уверен, что это важно, так как я думаю, что и клиент, и сервер установлены вместе. Какова цель {{{1и 1}}}?
beppe9000