2010-10-20 11 views
29

Próbuję zebrać wszystkie opcje potrzebne do mysqldump, aby utworzyć wszystko, co jest używane przez moją bazę danych aplikacji w jednym skrypcie. Dotyczy to samej bazy danych i wszystkich użytkowników/haseł/uprawnień do bazy danych.Używanie użytkowników mysqldump i bazy danych

Mam to wszystko zorientowali się, z wyjątkiem kawałka użytkownika ... oto co obecnie używam:

mysqldump -h host -u root -p \ 
    --add-drop-database --routines -B database_name > backup.sql 

Więc, co mi brakuje?

+0

MySQL nie będą przechowywane w 'database_name'. – ceejayoz

+0

Chciałbym połączyć z [to rozwiązanie w stos stosu DBA] (http://dba.stackexchange.com/questions/23265/mysql-show-grants-for-all-users/127529#127529). – knocte

Odpowiedz

36

Użytkownicy bazy danych/hasła/uprawnienia są przechowywane w bazie danych mysql i nie zostaną zrzuceni przy użyciu polecenia dump. Musisz dodać do bazy danych, a także do listy DB zrzucić:

mysqldump ... --routines --databases database_name mysql > backup.sql 

lub po prostu zrzucić wszystko:

mysqldump ... --routines --all-databases > backup.sql 
+0

Perfect - właśnie to właśnie odkryłem. Sugerowałbym, abyśmy ostrzegli ludzi, że wyrzucanie/przywracanie mysql db vs przy użyciu skryptu, z którym się łączyłem, może wywołać niezamierzone efekty, szczególnie. jeśli dwa serwery nie są swoimi lustrzanymi odbiciami (nie mają na nich tych samych baz danych). –

+0

Należy pamiętać, że baza danych mysql zawiera informacje o bazach danych, których nie wolno przesypywać. Nie wiem, co się stanie, gdy zaimportujesz te metadane do nowego serwera bazy danych. – Halfgaar

+0

Właściwie chciałem czegoś przeciwnego. Chciałem wszystkich "standardowych" baz danych porzuconych, ale NIE informacji o użytkowniku itp. Więc użyłem jawnej listy dbs, a nie wszystkich dbs, aby uniknąć zrzucania bazy danych "mysql". – BuvinJ

9

Tak, miałem fundamentalne nieporozumienie. Użytkownicy nie są specyficzni dla bazy danych, ale raczej są tworzeni na poziomie serwera.

Można zobaczyć wszystkich istniejących użytkowników z następującym zapytaniem:

SELECT * FROM mysql.user; 

Wiedząc o tym, że to dość oczywiste, że nie należy niczego mysqldump z użytkownikami zrobić. Jeśli jednak potrzebujesz odpowiedzi na temat eksportowania/importowania użytkowników i zezwoleń, proponuję sprawdzić poniższy artykuł - pomógł mi.

http://pento.net/2009/03/12/backing-up-permissions-for-individual-databases/

Przepraszam za hałas na płycie, ale pomyślałem, że opuszczenie stanowiska rozczarować ktoś ma ten sam nieporozumienia.

+4

Nie, to było właśnie to. Dodatkowo, jeśli ten post był rzeczywiście tym, co RZECZYWIŚCIE pozwoliło ci go rozwiązać, powinieneś oznaczyć TĄ odpowiedź jako "odpowiedź" zamiast drugiej. Po prostu myślałem, że się podzielę. – jcolebrand

+3

FYI odnośnik odsyłacza pokazuje instrukcję SQL, która podaje błąd z napisem "Niewłaściwe użycie UNION i INTO", rozwiązaniem jest przeniesienie INTO do ostatniej instrukcji SELECT – knocte

+0

Tak, to jest odpowiedź. Odpowiada ORAZ będziesz potrzebował użyć swojego mózgu, nie tylko skopiować kogoś po komendzie – Johny19

19

Podczas zrzucania bazy mysql, nie zapomnij: użytkownicy

--flush-privileges Emit a FLUSH PRIVILEGES statement after dumping the mysql 
        database. This option should be used any time the dump 
        contains the mysql database and any other database that 
        depends on the data in the mysql database for proper 
        restore. 
+0

To właśnie dla mnie wyszło. Dzięki –

Powiązane problemy