Mysql Експорт поточної конфігурації у файл


11

Ми втратили файл my.cnf і цікавились, чи є спосіб експорту копії з запущеного екземпляра mysql.

Спасибі!

Відповіді:


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 або дефолтом до.


-1 Вибачте, але це не має сенсу. Чому ви скидаєте SHOW VARIABLES у текстовий файл, потім вітаєте список процесів і нічого не робите з його результатами, а потім говорите прочитати прапор довідки до mysqld?
Купс

@Coops - це три окремі речі. Перший фіксує ПОКАЗУВАННЯ ВАРІАБЛІЙ у текстовому файлі. Другий дозволяє вам побачити, які параметри вказані /etc/init.d/mysql при запуску mysql. Третя дозволяє побачити в нижній половині дисплея, з чим зараз працює mysqld. Самспот повинен виконати роботу над встановленням цих параметрів у /etc/my.cnf з цих дисплеїв. Чи повинен я щось написати для автоматизації та відновлення /etc/my.cnf?
RolandoMySQLDBA

Ваш початковий рядок - "виконайте все наступне", пропонуючи надати покрокове керівництво для досягнення відповіді на питання. Ви також не пояснюєте, що робить кожен крок, або як він відповідає на питання, додаючи плутанину! :-)
Купи

Вибачте за замішання, викликані тим, як я написав свою відповідь спочатку.
RolandoMySQLDBA

Навіть незважаючи на те, що відновлення my.cnf було б найкращим випадком (я сподівався, що mysql це може зробити), це дійсно чудова інформація для відновлення. Я спробував googling для цієї інформації, але все, що я міг знайти, це статті про резервну копію бази даних. Спасибі!
samspot

3

Ці вказівки стосуються запасів маріадби на центос 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

ця команда не показує, fe, bind-address, навіть якщо ми змінимо її в /etc/my.cnf і перезапустимо mysql.

Також наступна команда показує безліч параметрів, але не "прив'язує адресу":

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.