MySQL Eksportuj bieżącą konfigurację do pliku

11

Straciliśmy plik my.cnf i zastanawialiśmy się, czy istnieje sposób na wyeksportowanie kopii z aktualnie działającej instancji mysql.

Dzięki!

samspot
źródło

Odpowiedzi:

16

Trzy (3) opcje

OPCJA 1: Z poziomu klienta mysql

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

Spowoduje to przechwycenie wszystkich opcji do pliku tekstowego.

OPCJA 2: Z wiersza poleceń systemu Linux

ps -ef | grep mysqld | grep -v grep

Spowoduje to wyświetlenie opcji, które mysqld rozpoczęło od ustawionych w mysqld_safe

OPCJA 3: Zapytaj serwer bezpośrednio

mysqld --help --verbose

U dołu ekranu „mysqld --help --verbose” zobaczysz aktualne ustawienia mysqld załadowane z my.cnf lub domyślnie ustawione na.

RolandoMySQLDBA
źródło
-1 Przepraszam, ale to nie ma sensu. Dlaczego zrzucasz POKAŻ ZMIENNE do pliku tekstowego, następnie greping listę procesów i nie robiąc nic z jej wynikami, a następnie mówiąc czytając flagę pomocy mysqld?
Coops
@Coops - Są to trzy osobne rzeczy. Pierwszy przechwytuje zmienne POKAŻ w pliku tekstowym. Drugi pozwala zobaczyć, jakie opcje są określone przez /etc/init.d/mysql podczas uruchamiania mysql. Trzeci pozwala zobaczyć w dolnej połowie wyświetlacza, z czym aktualnie działa mysqld. Samspot musi wykonać legalną pracę nad ustawieniem tych opcji w /etc/my.cnf z tych ekranów. Czy powinienem napisać coś do zautomatyzowania i zregenerowania /etc/my.cnf?
RolandoMySQLDBA,
Linia początkowa brzmi „wykonaj wszystkie poniższe czynności”, sugerując udzielenie przewodnika krok po kroku, aby uzyskać odpowiedź na pytanie. Nie wyjaśniasz również, co robi każdy krok ani jak odpowiada na pytanie, co powoduje zamieszanie! :-)
Coops
Przepraszam za zamieszanie spowodowane przez sposób, w jaki pierwotnie napisałem swoją odpowiedź.
RolandoMySQLDBA
Nawet jeśli zregenerowanie pliku my.cnf byłoby najlepszym rozwiązaniem (miałem nadzieję, że mysql to zrobi), jest to naprawdę świetna informacja dla nas do odzyskania. Próbowałem googlować po te informacje, ale wszystko, co mogłem znaleźć, to artykuły na temat tworzenia kopii zapasowych bazy danych. Dzięki!
samspot
3

Te instrukcje dotyczą akcji mariadb na centos 7.1.

Poniżej przedstawiono sposób tworzenia kopii zapasowej lub replikacji bieżących ustawień komputera do nowej instalacji, obecnej lub przyszłej.

Na komputerze, z którego chcemy skopiować ustawienia, możemy uruchomić:

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

Na innym komputerze możemy zainstalować serwer mariadb i uruchomić:

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

Następnie umieszczamy oba pliki w jednym katalogu, którym w tym przykładzie jest „/ a /”.

Następnie uruchamiamy:

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

Jeśli nie ma danych wyjściowych, oba pliki są identyczne. Co oznacza, że ​​wszystkie ustawienia na obu komputerach są domyślne.

Jeśli jest jakiś wynik, to niektóre wiersze nie będą wcięte, a niektóre wiersze będą wcięte.

Linie bez wcięć są obecne tylko w pierwszym pliku, którym jest /a/mysql_current_settings.txt.

Linie wcięcia są obecne tylko w drugim pliku, którym jest /a/mysql_default_settings.txt.

Teraz znamy wszystkie ustawienia, z wyjątkiem niektórych ustawień, które są ustawione w wierszu poleceń, który uruchomił mysqld. Te ustawienia mogą pochodzić z plików /etc/my.cnf, /etc/my.cnf.d/*, niestandardowego skryptu lub aliasu itp. W każdym razie możemy je zobaczyć za pomocą następującego polecenia:

ps -ef | grep mysqld

Teraz znamy bardzo niewiele ustawień, które musimy zmienić w nowej instalacji, aby skonfigurować ją jako starą.


Oto kilka innych szczegółów.

Na centos 7.1 następujące polecenie pokazuje wszystkie bieżące ustawienia, z wyjątkiem niektórych ustawień, które są ustawione w linii poleceń, która uruchomiła mysqld:

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

W sumie pokazuje:

w pierwszej części ustawienia, których możemy użyć jako pierwszego parametru po „mysqld”, kiedy go uruchamiamy;

w drugiej części ustawienia ustawione w czasie kompilacji;

w trzeciej części aktualne ustawienia.

Nawet jeśli w ostatnim wierszu danych wyjściowych jest napisane: aby zobaczyć, jakich wartości używa uruchomiony serwer MySQL, wpisz:

    mysqladmin variables -uroot -p

to polecenie nie wyświetla, np., bind-address, nawet jeśli zmienimy go w /etc/my.cnf i zrestartujemy mysql.

Również następujące polecenie pokazuje wiele ustawień, ale nie „adres powiązania”:

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

Zauważ, że w centos 7.1 mysqld nie ma w $ PATH.

Salvador
źródło
2

Oto mój ulubiony sposób na wygenerowanie bieżącego 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

Nie działa to jednak niezawodnie w systemie Mac OS X.

Spowoduje to wygenerowanie czystego dziennika zmiennych, skomentowanego, gotowego do zaimportowania do pliku my.cnf.

Oryginalne źródło: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html

Ryan
źródło
Kilka uwag: 1. bsdmainutils muszą zostać zainstalowane 2. Ostrzeżenie: zapisuje wersję klienta mysql, a nie serwera
gadelat
W przypadku wersji serwerowej polecenie to mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'. Nie jestem pewien, czy to ma znaczenie, ponieważ myślę, że zarówno klient, jak i serwer są zainstalowane razem. Jaki jest cel {{{1i 1}}}?
beppe9000,