Ви знайдете це шокуюче, але вам потрібен лише один головний варіант: --opt
Що таке --опт ?
Цей параметр, включений за замовчуванням, - це скорочення для комбінації --add-drop table --add-locks --create-options --disable-keys - Extended-insert --lock- table --quick - комплект-шафа . Це дає операцію швидкого скидання та створює дамп-файл, який можна швидко перезавантажити на сервер MySQL.
Оскільки опція - -opt включена за замовчуванням , ви вказуєте лише її зворотну сторону, - -p -opt, щоб вимкнути кілька параметрів за замовчуванням. Див. Обговорення груп опцій mysqldump для отримання інформації про вибіркове включення або відключення підмножини параметрів, на які впливає --opt.
Оскільки --opt вже увімкнено, вам не потрібно вказувати --opt . Незважаючи на це, вам можуть знадобитися деякі необхідні варіанти, які не включені.
Запустіть цей запит у вашій базі даних
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;
Якщо у вас є всі таблиці InnoDB, то вам потрібно вказати --single-транзакцію . Це автоматично деактивує - блоки-таблиці та дозволить скинути всю таблицю в один і той же час та дозволить одночасно надходити нові записи.
Якщо у вас є одна або кілька таблиць MyISAM, вам потрібно вказати --lock-all-table . Це автоматично деактивує - блоки столів , деактивує --sele-транзакцію , заблокує всі таблиці у всіх базах даних, а потім створить дамп. Записи до таблиць InnoDB все ще можуть відбуватися, але вони просто стануть у черзі до тих пір, поки блокування не будуть звільнені. Будь-яке з'єднання БД, що намагається записати в будь-які таблиці MyISAM, буде фактично призупинено, поки не будуть звільнені всі блоки.
Запустіть цей запит: SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
Якщо Number_Of_Stored_Procedures
більше нуля, використовуйте --програми .
Запустіть цей запит: SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
Якщо Number_Of_Triggers
більше нуля, використовуйте --тригери .
CAVEAT : Будь ласка, не використовуйте - порядок за основним для демпінгу всіх баз даних, оскільки це може потенційно зробити індекси BTREE досить односторонніми при перезавантаженні. - Порядок за основним слід використовувати лише під час завантаження окремої таблиці, яка, на вашу думку, має цілий первинний ключ і буде мати багато сканувань діапазону у вашій програмі.
Якщо вам потрібні більше креативних типів резервних копій mysqldump, перегляньте стару публікацію Як я можу оптимізувати mysqldump великої бази даних? .
Будь ласка , прочитайте всі варіанти туздИшпра .
ОНОВЛЕННЯ 2014-12-29 09:44 EST
Я оновив свою команду mysqldump (будь ласка, дивіться мою редагування). Однак у мене є останнє питання. Як ви вважаєте, чи варто також використовувати всі наведені нижче аргументи? --add-drop-база даних \ --add-drop-таблиця \ - завершення-вставка \ - відкладена вставка \ - tz-utc
Переглядаючи ваш коментар та останню редакцію, давайте розглянемо кожен із цих варіантів і побачимо, чи потрібен вам який-небудь з них
- --opt : Я вже сказав, що вам не потрібно вказувати це, оскільки воно включено за замовчуванням.
- --delayed-insert : я твердо тримаюсь подалі від цього з усією базою даних InnoDB. Насправді я твердо тримаюсь подалі від цього ПЕРІОДУ !!! . Оскільки 1) можливо, що INSERT DELAYED може втратити дані, 2) він перетворений на INSERT для рабів реплікації MySQL, 3) є відкритий звіт про помилку щодо його використання з тригерами ще в MySQL 5.6 і не вважається помилкою , 4 ) вона застаріла в MySQL 5.6 і 5) Морган Токер (відомий гуру MySQL) передбачив її депрекацію ще в 2012 році , ви повинні забути, що цей варіант коли-небудь існував. Ніколи, ніколи (нескінченність) не використовуйте його !!!
- --complete-insert : Це використовуватиме
INSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
замість INSERT INTO tblname VALUES ...
. Це може роздути mysqldump, якщо в визначенні таблиці буде багато стовпців і багато рядків у таблиці. Не використовуйте його.
- --add-drop-table : Оскільки --opt дозволяє це вам, вам не потрібно вказувати.
- --add-drop-база даних : Якщо ви скидаєте --add-drop-database , це просто змушує
DROP TABLE IF EXISTS
(що додав --adad-drop-таблицю ) швидше. Якщо не використовувати його, то, можливо, DROP TABLE IF EXISTS
виникає для кожної таблиці. Таким чином, використання --add-drop-database - це питання особистого вибору.
- --tz-utc : Якщо ви плануєте відновити дані на тому самому сервері, з якого ви створюєте резервну копію, вам не потрібно --tz-utc . Якщо ви відновите дані в інший центр обробки даних в іншому часовому поясі та ...
- якщо ви хочете зберегти той самий часовий пояс, з якого ви створюєте резервну копію, вам не знадобиться --tz-utc .
- якщо ви хочете, щоб дані використовували часовий пояс нового центру обробки даних, вам потрібно --tz-utc .
- ПРИКЛАД: Скажімо, ви створюєте резервну копію бази даних у Нью-Йорку. Це EST. Якщо у вас є інший центр обробки даних в Сіетлі, це буде PST. Якщо ви хочете відновити резервну копію в Нью-Йорку в Сіетлі, і ви хочете, щоб часові позначки в базі даних все ще представляли Нью-Йорк, ви не хочете використовувати --tz-utc .
- - набір символів за замовчуванням
Коригуючи останню редакцію, це саме те, що вам особливо потрібно
mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
Знову кажу, будь ласка, прочитайте всі варіанти для mysqldump .