Po niektórych poszukiwaniach uzyskałem następujące ustawienia:
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
Jak dotąd tak dobrze, ale mam kilka pytań dotyczących parametrów, a także wykonania.
Jeśli chodzi o moją pierwszą troskę, chcę się upewnić, że wszystkie są wymagane i nie powodują żadnych konfliktów, gdy są używane razem. Ostatecznie chciałbym stworzyć bardzo solidny i spójny plik zrzutu, zawierający miliony rekordów, który tworzy tabele, bazy danych i wstawia dane. Dobrą rzeczą jest to, że brak dostępu do bazy danych przez jakiś czas nie stanowi dla mnie problemu. Moim jedynym celem jest stworzenie solidnego i spójnego pliku zrzutu.
Jeśli chodzi o mój drugi koncert, chciałbym wiedzieć, jak uzyskać informacje, kiedy polecenie się nie powiedzie, a jeśli tak, to rzuć wyjątek.
Jakieś pomysły?
EDYTOWAĆ
To jest moja zaktualizowana komenda mysqldump na podstawie opinii RolandoMySQLDBA.
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
źródło
Odpowiedzi:
Będziesz uważał to za szokujące, ale potrzebujesz tylko jednej głównej opcji: --opt
Co to jest --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
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
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
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
zamiastINSERT 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.DROP TABLE IF EXISTS
(dodany przez --add-drop-table ). Nieużywanie go pozwala po prostuDROP TABLE IF EXISTS
wystąpić dla każdej tabeli. Zatem użycie --add-drop-database jest kwestią osobistego wyboru.Dostosowując najnowszą edycję, jest to szczególnie potrzebne
Ponownie mówię, proszę, przeczytaj wszystkie opcje mysqldump .
źródło
--add-drop-trigger
?