Będziesz uważał to za szokujące, ale potrzebujesz tylko jednej głównej opcji: --opt
Co to jest --opt ?
Ta opcja, domyślnie włączona, jest skrótem dla kombinacji --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables - quick - set-charset . Daje szybką operację zrzutu i tworzy plik zrzutu, który można szybko ponownie załadować na serwer MySQL.
Ponieważ opcja - -opt jest domyślnie włączona , określasz tylko jej odwrotność, --skip-opt wyłącza kilka domyślnych ustawień. Zobacz omówienie grup opcji mysqldump, aby uzyskać informacje na temat selektywnego włączania lub wyłączania podzbioru opcji, na które wpływa opcja --opt.
Ponieważ opcja --opt jest już włączona, nie trzeba określać opcji --opt . Niezależnie od tego możesz potrzebować kilku niezbędnych opcji, które nie zostały uwzględnione.
Uruchom to zapytanie w bazie danych
SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
Jeśli masz wszystkie tabele InnoDB, musisz podać opcję --single-transaction . Spowoduje to automatyczną dezaktywację opcji --lock-tables i pozwoli na zrzucenie wszystkich tabel w tym samym momencie i pozwoli na nadejście nowych zapisów w tym samym czasie.
Jeśli masz jedną lub więcej tabel MyISAM, musisz określić --lock-all-tables . Spowoduje to automatyczną dezaktywację --lock-tables , dezaktywację --single-transaction , zablokowanie wszystkich tabel we wszystkich bazach danych, a następnie utworzenie zrzutu. Zapisy do tabel InnoDB mogą nadal występować, ale będą one po prostu kolejkowane do momentu zwolnienia blokad. Każde połączenie DB, które próbuje zapisać do dowolnej tabeli MyISAM, zostanie zawieszone do momentu zwolnienia wszystkich blokad.
Uruchom to zapytanie: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Jeśli Number_Of_Stored_Procedures
jest większa od zera, użyj --routines .
Uruchom to zapytanie: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Jeśli Number_Of_Triggers
jest większa od zera, użyj --triggers .
PRZESTROGA : Nie używaj opcji - uporządkuj według podstawowej do zrzucania wszystkich baz danych, ponieważ może to spowodować, że indeksy BTREE będą raczej krzywe przy ładowaniu. --porządkuj według podstawowego należy używać tylko podczas zrzutu indywidualnej tabeli, o której wiesz, że ma klucz główny liczby całkowitej i będzie zawierał wiele skanów zakresu z twojej aplikacji.
Jeśli potrzebujesz bardziej kreatywnych typów kopii zapasowych mysqldump, zobacz mój stary post Jak mogę zoptymalizować mysqldump dużej bazy danych? .
Proszę przeczytać wszystkie opcje mysqldump .
AKTUALIZACJA 29.12.2014 09:44 EST
Zaktualizowałem moje polecenie mysqldump (zobacz moją edycję). Mam jednak ostatnie pytanie. Czy uważasz, że warto również zastosować wszystkie poniższe argumenty? --add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc
Patrząc na Twój komentarz i najnowszą edycję, spójrzmy na każdą z tych opcji i sprawdź, czy potrzebujesz którejkolwiek z nich
- --opt : Powiedziałem już, że nie trzeba go określać, ponieważ jest domyślnie włączony.
- --delayed-insert : zdecydowanie trzymam się od tego z dala z bazą danych InnoDB. W rzeczywistości zdecydowanie trzymam się z dala od tego OKRESU !!! . Ponieważ 1) możliwe jest, że INSERT DELAYED może utracić dane, 2) jest konwertowany na INSERT dla MySQL Replication slave, 3) jest otwarty raport o błędzie dotyczący użycia go z wyzwalaczami z powrotem w MySQL 5.6 i nie jest uważany za błąd , 4 ) jest przestarzała w MySQL 5.6 i 5) Morgan Tocker (znany MySQL Guru) przewidział swoje wycofanie w 2012 r. , należy pamiętać, że ta opcja kiedykolwiek istniała. Nigdy, nigdy (nieskończoność) używaj go !!!
- --complete-insert : Użyje
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
zamiast INSERT INTO tblname VALUES ...
. Może to nadmuchać mysqldump, jeśli w definicji tabeli jest wiele kolumn i wiele wierszy w tabeli. Nie używaj tego.
- --add-drop-table : Ponieważ --opt umożliwia ci to, nie musisz go określać.
- --add-drop-database : Jeśli upuścisz --add-drop-database , to po prostu przyspieszy
DROP TABLE IF EXISTS
(dodany przez --add-drop-table ). Nieużywanie go pozwala po prostu DROP TABLE IF EXISTS
wystąpić dla każdej tabeli. Zatem użycie --add-drop-database jest kwestią osobistego wyboru.
- --tz-utc : Jeśli planujesz przywrócić dane na tym samym serwerze, z którego tworzona jest kopia zapasowa, nie potrzebujesz --tz-utc . Jeśli przywrócisz dane do innego centrum danych w innej strefie czasowej i ...
- jeśli chcesz zachować tę samą strefę czasową, z której tworzona jest kopia zapasowa, nie potrzebujesz --tz-utc .
- jeśli chcesz, aby dane korzystały ze strefy czasowej nowego centrum danych, potrzebujesz --tz-utc .
- PRZYKŁAD: Powiedzmy, że wykonałeś kopię zapasową bazy danych w Nowym Jorku. To EST. Jeśli masz inne centrum danych w Seattle, będzie to PST. Jeśli chcesz przywrócić kopię zapasową w Nowym Jorku w Seattle i chcesz, aby znaczniki czasu w bazie danych nadal reprezentowały Nowy Jork, nie chcesz używać opcji --tz-utc .
- - zestaw znaków domyślnych
Dostosowując najnowszą edycję, jest to szczególnie potrzebne
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Ponownie mówię, proszę, przeczytaj wszystkie opcje mysqldump .