Це команда pt-online-schema-changep, яку можна запустити в постачальнику безкоштовного хостингу OnWorks за допомогою однієї з наших численних безкоштовних робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS.
ПРОГРАМА:
ІМ'Я
pt-online-schema-change - ЗМІНИТИ таблиці без їх блокування.
СИНТАКСИС
Використання: pt-online-schema-change [ОПЦІЇ] DSN
pt-online-schema-change змінює структуру таблиці, не блокуючи читання або запис.
Вкажіть базу даних і таблицю в DSN. Не використовуйте цей інструмент, перш ніж прочитати його
документації та ретельно перевіряйте свої резервні копії.
Додайте стовпець до sakila.actor:
pt-online-schema-change --alter "ADD COLUMN c1 INT" D=sakila,t=actor
Змініть sakila.actor на InnoDB, ефективно виконуючи OPTIMIZE TABLE в неблокуючому режимі
мода, тому що це вже таблиця InnoDB:
pt-online-schema-change --alter "ENGINE=InnoDB" D=sakila,t=actor
РИЗИКИ
Percona Toolkit є зрілим, перевіреним у реальному світі та добре перевіреним, але вся база даних
інструменти можуть становити ризик для системи та сервера баз даних. Перш ніж використовувати цей інструмент,
будь ласка:
· Прочитайте документацію до інструменту
· Перегляньте відомі "ПОМИЛКИ" інструмента
· Перевірте інструмент на невиробничому сервері
· Створіть резервну копію робочого сервера та перевірте резервні копії
ОПИС
pt-online-schema-change емулює спосіб внутрішньої зміни таблиць MySQL, але працює
на копії таблиці, яку потрібно змінити. Це означає, що оригінальної таблиці немає
заблоковано, і клієнти можуть продовжувати читати та змінювати дані в ньому.
pt-online-schema-change працює, створюючи порожню копію таблиці для зміни, модифікації
за бажанням, а потім скопіювати рядки з вихідної таблиці в нову таблицю. Коли
копіювання завершено, він переміщує вихідну таблицю та замінює її новою. За
за замовчуванням, він також видаляє вихідну таблицю.
Процес копіювання даних виконується невеликими порціями даних, які можна змінювати
змусити їх виконуватися за певний проміжок часу (див. "--chunk-time"). Цей процес дуже
подібно до того, як працюють інші інструменти, такі як pt-table-checksum. Будь-які зміни в даних
вихідні таблиці під час копіювання будуть відображені в новій таблиці, оскільки інструмент
створює тригери в оригінальній таблиці для оновлення відповідних рядків у новій таблиці.
Використання тригерів означає, що інструмент не працюватиме, якщо тригери вже визначені
на столі.
Коли інструмент завершує копіювання даних у нову таблицю, він використовує атомарний "RENAME TABLE"
операція одночасного перейменування вихідної та нової таблиць. Після того, як це буде завершено,
інструмент скидає вихідну таблицю.
Зовнішні ключі ускладнюють роботу інструмента та вносять додатковий ризик. Техніка
атомарне перейменування вихідної та нової таблиць не працює, коли посилаються зовнішні ключі
до столу. Інструмент повинен оновити зовнішні ключі, щоб вони посилалися на нову таблицю після схеми
зміна завершена. Інструмент підтримує два способи для досягнення цієї мети. Ви можете читати
докладніше про це в документації для "--alter-foreign-keys-method".
Зовнішні ключі також викликають деякі побічні ефекти. Фінальна таблиця матиме ті самі зовнішні ключі
та індекси як вихідна таблиця (якщо ви не вкажете інше у своєму ALTER
оператор), але назви об’єктів можна трохи змінити, щоб уникнути назви об’єктів
колізії в MySQL та InnoDB.
З міркувань безпеки інструмент не змінює таблицю, якщо ви не вкажете параметр «--execute»,
який не ввімкнено за замовчуванням. Інструмент підтримує ряд інших заходів для запобігання
небажане завантаження або інші проблеми, включаючи автоматичне виявлення реплік, підключення до
їх і використовуючи такі перевірки безпеки:
· У більшості випадків інструмент відмовляється працювати, якщо не буде ПЕРВИННИЙ КЛЮЧ або УНІКАЛЬНИЙ ІНДЕКС
присутні в таблиці. Додаткову інформацію див. у «--alter».
· Інструмент відмовляється працювати, якщо виявляє фільтри реплікації. Побачити
"--[no]check-replication-filters" для отримання детальної інформації.
· Інструмент призупиняє операцію копіювання даних, якщо помічає будь-які репліки, які затримуються
в реплікації. Додаткову інформацію див. у розділі «--max-lag».
· Інструмент призупиняє або перериває свою роботу, якщо виявить занадто велике навантаження на сервер. Побачити
"--max-load" і "--critical-load" для отримання детальної інформації.
· Інструмент встановлює "innodb_lock_wait_timeout=1" і (для MySQL 5.5 і новіших версій)
"lock_wait_timeout=60", щоб він, швидше за все, став жертвою будь-якого блокування
суперечки, і менше шансів порушити інші транзакції. Ці значення можуть бути
змінено, вказавши «--set-vars».
· Інструмент відмовляється змінювати таблицю, якщо обмеження зовнішнього ключа посилаються на неї
ви вказуєте "--alter-foreign-keys-method".
· Інструмент не може змінювати таблиці MyISAM на вузлах "Percona XtraDB Cluster".
Перкона XtraDB кластер
pt-online-schema-change працює з Percona XtraDB Cluster (PXC) 5.5.28-23.7 і новіших версій, але
є два обмеження: лише таблиці InnoDB можна змінювати, а "wsrep_OSU_method" повинен
встановити значення "TOI" (повна ізоляція порядку). Інструмент завершується з помилкою, якщо хост є a
вузол кластера, а таблиця є MyISAM або перетворюється на MyISAM ("ENGINE=MyISAM"), або
якщо "wsrep_OSU_method" не є "TOI". Вимкнути ці перевірки неможливо.
ВИХІД
Інструмент друкує інформацію про свою діяльність на STDOUT, щоб ви могли побачити, що це таке
робити. Під час фази копіювання даних він друкує звіти "--progress" у STDERR. Ви можете отримати
додаткову інформацію, вказавши «--print».
Якщо вказано «--statistics», звіт про кількість різних внутрішніх подій друкується за адресою
кінець, як:
# Кількість подій
# ====== =====
# ВСТАВКА 1
ВАРІАНТИ
«--dry-run» і «--execute» є взаємовиключними.
Цей інструмент приймає додаткові аргументи командного рядка. Зверніться до розділу «СІНОПСИС» та використання
інформацію для деталей.
--змінити
тип: рядок
Модифікація схеми без ключових слів ALTER TABLE. Можна виконувати кілька
вносити зміни до таблиці, вказуючи їх комами. Будь ласка, зверніться до MySQL
посібник із синтаксису ALTER TABLE.
Застосовуються наведені нижче обмеження, які, якщо їх спробувати, призведуть до збою інструмента
непередбачувані способи:
· Майже у всіх випадках ПЕРВИННИЙ КЛЮЧ або УНІКАЛЬНИЙ ІНДЕКС повинні бути присутніми в
стіл. Це необхідно, оскільки інструмент створює тригер DELETE для збереження
нова таблиця оновлена під час виконання процесу.
Помітний виняток – це коли створюється ПЕРВИННИЙ КЛЮЧ або УНІКАЛЬНИЙ ІНДЕКС
існуючий стовпців як частина пункту ALTER; в такому випадку він буде використовувати ці
стовпці для тригера DELETE.
· Речення "RENAME" не можна використовувати для перейменування таблиці.
· Стовпці не можуть бути перейменовані шляхом відкидання та повторного додавання з новою назвою. Інструмент
не копіюватиме дані вихідного стовпця в новий стовпець.
· Якщо ви додаєте стовпець без значення за замовчуванням і робите його НЕ NULL, інструмент буде
помилка, оскільки він не намагатиметься вгадати значення за замовчуванням для вас; Ви повинні вказати
за замовчуванням.
· "DROP FOREIGN KEY constraint_name" вимагає вказувати "_constraint_name", а
ніж справжнє "ім'я_обмеження". Через обмеження в MySQL, pt-online-schema-
зміна додає провідне підкреслення до імен обмежень зовнішнього ключа під час створення
новий стіл. Наприклад, щоб скасувати це обмеження:
ОБМЕЖЕННЯ `fk_foo` ЗАРЕЖНИЙ КЛЮЧ (`foo_id`) ПОСИЛАННЯ `bar` (`foo_id`)
Ви повинні вказати "--alter "DROP FOREIGN KEY _fk_foo"".
· Інструмент не використовує «ЗАБЛОКУВАННЯ У РЕЖИМІ СПІЛЬНОСТІ» з MySQL 5.0, оскільки це може спричинити
помилка підлеглого, яка порушує реплікацію:
Запит викликав різні помилки на головному та веденому. Помилка майстра:
'При спробі отримати блокування виявлено тупик; спробуйте перезапустити транзакцію" (1213),
Помилка підпорядкованого пристрою: "немає помилки" (0). База даних за замовчуванням: 'pt_osc'.
Запит: 'INSERT INTO pt_osc.t (id, c) VALUES ('730', 'new row')'
Помилка виникає під час перетворення таблиці MyISAM в InnoDB, оскільки MyISAM не є
транзакційний, але InnoDB є транзакційним. MySQL 5.1 і новіші обробляють цей випадок
правильно, але тестування відтворює помилку в 5% випадків з MySQL 5.0.
Це помилка MySQL, подібна доhttp://bugs.mysql.com/bug.php?id=45694>, але
у MySQL 5.0 немає виправлення чи обхідного шляху. Без «БЛОКУВАННЯ В РЕЖИМІ СПІЛЬНОСТІ», тести
проходить 100% часу, тому ризик втрати даних або порушення реплікації має бути
незначний.
Be Переконайтеся до перевірити new таблиця if використання MySQL 5.0 та перетворення від MyISAM до
InnoDB!
--alter-foreign-keys-method
тип: рядок
Як змінити зовнішні ключі, щоб вони посилалися на нову таблицю. Зовнішні ключі що
Посилання на таблицю, яку потрібно змінити, має бути оброблено спеціально, щоб переконатися, що вони
продовжуйте посилатися на правильну таблицю. Коли інструмент перейменує вихідну таблицю на
нехай новий займе його місце, зовнішні ключі «слідують» за перейменованою таблицею, і повинні
змінити, щоб посилатися на нову таблицю.
Інструмент підтримує дві методики для досягнення цієї мети. Він автоматично знаходить «дитина
таблиці», які посилаються на таблицю, яку потрібно змінити.
автоматичний
Автоматично визначте, який метод найкращий. Інструмент використовує "rebuild_constraints"
якщо можливо (детальніше дивіться опис цього методу), а якщо ні, то це
використовує "drop_swap".
rebuild_constraints
Цей метод використовує "ALTER TABLE", щоб скинути та повторно додати обмеження зовнішнього ключа, які
посилання на нову таблицю. Це найкраща техніка, за винятком випадків, коли один або кілька з них
"дочірні" таблиці настільки великі, що "ALTER" займе занадто багато часу. Інструмент
визначає, що шляхом порівняння кількості рядків у дочірній таблиці зі ставкою на
який інструмент може копіювати рядки зі старої таблиці в нову. Якщо
інструмент оцінює, що дочірню таблицю можна змінити за менший час, ніж таблицю
"--chunk-time", тоді він буде використовувати цю техніку. Для цілей оцінки
час, необхідний для зміни дочірньої таблиці, інструмент примножує швидкість копіювання рядків
за "--chunk-size-limit", тому що MySQL "ALTER TABLE" зазвичай набагато швидший
ніж зовнішній процес копіювання рядків.
Через обмеження в MySQL зовнішні ключі не будуть мати однакові імена після
ЗМІНИТИ те, що вони робили до цього. Інструмент повинен перейменувати зовнішній ключ, коли він
перевизначає його, що додає до назви провідне підкреслення. У деяких випадках MySQL
також автоматично перейменовує індекси, необхідні для зовнішнього ключа.
drop_swap
Вимкніть перевірку зовнішніх ключів (FOREIGN_KEY_CHECKS=0), а потім скиньте вихідну таблицю
перед перейменуванням нової таблиці на її місце. Це відрізняється від звичайного
метод заміни старої та нової таблиці, який використовує атомарне "RENAME", тобто
невидимі для клієнтських програм.
Цей метод швидший і не блокує, але ризикований з двох причин.
По-перше, на короткий проміжок часу між видаленням вихідної таблиці та перейменуванням
тимчасової таблиці, таблиці, яку потрібно змінити, просто не існує, і запити
проти цього призведе до помилки. По-друге, якщо є помилка і нове
таблицю не можна перейменувати на місце старої, тоді вже пізно
перервати, оскільки стара таблиця зникла назавжди.
Цей метод змушує «--no-swap-tables» і «--no-drop-old-table».
ніхто
Цей метод схожий на "drop_swap" без "swap". Будь-які зовнішні ключі, які
посилання на вихідну таблицю тепер посилатиметься на неіснуючу таблицю. Це буде
зазвичай спричиняють порушення зовнішнього ключа, які видно в "SHOW ENGINE INNODB
СТАТУС", подібний до наступного:
Спроба додати до індексу кортеж `idx_fk_staff_id`:
КОРТЕЖ ДАНИХ: 2 поля;
0: об'єктив 1; шістнадцятковий 05; asc ;;
1: об'єктив 4; шістнадцятковий 80000001; asc ;;
Але батьківська таблиця `sakila`.`staff_old`
або його файл .ibd наразі не існує!
Це тому, що вихідну таблицю (у цьому випадку sakila.staff) було перейменовано в
sakila.staff_old, а потім скинуто. Цей метод обробки обмежень зовнішнього ключа
надається, щоб адміністратор бази даних міг вимкнути вбудований інструмент
функціональність за бажанням.
--[no]analyze-before-swap
за замовчуванням: так
Виконайте ANALYZE TABLE на новій таблиці перед заміною на стару. За замовчуванням,
це відбувається лише під час запуску MySQL 5.6 і новіших версій, а "innodb_stats_persistent"
увімкнено. Явно вкажіть параметр, щоб увімкнути або вимкнути його незалежно від MySQL
версія та "innodb_stats_persistent".
Це дозволяє обійти потенційно серйозну проблему, пов’язану зі статистикою оптимізатора InnoDB.
Якщо таблиця, яка сповіщена, зайнята і інструмент швидко завершує роботу, нова таблиця буде
не мати статистики оптимізатора після заміни. Це може призвести до швидкого використання індексу
запити для повного сканування таблиці, доки не буде оновлено статистику оптимізатора (зазвичай після
10 секунд). Якщо таблиця велика, а сервер дуже зайнятий, це може призвести до збою.
--запитай-пройди
Запитувати пароль при підключенні до MySQL.
--набір символів
коротка форма: -А; тип: рядок
Набір символів за замовчуванням. Якщо значення - utf8, встановлює binmode Perl на STDOUT на utf8,
передає параметр mysql_enable_utf8 в DBD::mysql і запускає SET NAMES UTF8 після
підключення до MySQL. Будь-яке інше значення встановлює binmode на STDOUT без рівня utf8,
і запускає SET NAMES після підключення до MySQL.
--[ні]перевірити-змінити
за замовчуванням: так
Розбирає вказаний "--alter" і намагається попередити про можливу ненавмисну поведінку.
Наразі він перевіряє:
Перейменування стовпців
У попередніх версіях інструмента перейменування стовпця на "CHANGE COLUMN name
new_name" призведе до втрати даних цього стовпця. Тепер інструмент аналізує
оператор alter і намагається відловити ці випадки, тому перейменовані стовпці повинні мати
ті самі дані, що й оригінали. Однак код, який це робить, не є повним
перегорнутий синтаксичний аналізатор SQL, тому вам слід спочатку запустити інструмент за допомогою «--dry-run» і «--print»
і переконайтеся, що він правильно виявляє перейменовані стовпці.
ОТПУСТИТИ ПЕРВИННИЙ КЛЮЧ
Якщо "--alter" містить "DROP PRIMARY KEY" (не чутливий до регістру та пробілу), з'являється попередження
друкується, а інструмент завершується, якщо не вказано «--dry-run». Змінюючи
первинний ключ може бути небезпечним, але інструмент може впоратися з цим. Тригери інструменту,
особливо на тригер DELETE, найбільше впливає зміна первинного ключа
оскільки інструмент воліє використовувати первинний ключ для своїх тригерів. Ти повинен
спочатку запустіть інструмент за допомогою «--dry-run» і «--print» і переконайтеся, що тригери
виправити.
--інтервал перевірки
тип: час; за замовчуванням: 1
Час сну між перевірками "--max-lag".
--[ні]контрольний план
за замовчуванням: так
Перевірте плани виконання запитів на безпеку. За замовчуванням цей параметр запускає інструмент
ПОЯСНІТЬ перед запуском запитів, які призначені для доступу до невеликої кількості даних, але
який може отримати доступ до багатьох рядків, якщо MySQL вибере поганий план виконання. До них належать
запити для визначення меж фрагментів і самі запити на блоки. Якщо з'явиться
що MySQL використовуватиме поганий план виконання запиту, інструмент пропустить частину
таблиці.
Інструмент використовує кілька евристик, щоб визначити, чи є план виконання поганим. The
по-перше, чи повідомляє EXPLAIN, що MySQL має намір використовувати потрібний індекс для доступу
рядки. Якщо MySQL вибирає інший індекс, інструмент вважатиме запит небезпечним.
Інструмент також перевіряє, яку частину звітів індексу MySQL він використовуватиме для
запит. Вихід EXPLAIN показує це в стовпці key_len. Інструмент запам’ятовує
найбільший побачений key_len і пропускає фрагменти, де MySQL повідомляє, що використовуватиме менший
префікс індексу. Цю евристику можна розуміти як пропуск фрагментів, які мають a
гірший план виконання, ніж інші фрагменти.
Інструмент друкує попередження, коли вперше пропущено фрагмент через погане виконання
план у кожній таблиці. Подальші фрагменти пропускаються без звуку, хоча ви можете побачити
кількість пропущених фрагментів у стовпці SKIPPED у виводі інструмента.
Ця опція додає певну роботу з налаштування до кожної таблиці та фрагмента. Хоча роботи немає
нав'язливий для MySQL, це призводить до більшої кількості поїздок до сервера, який споживає
час. Якщо зробити шматки занадто малими, накладні витрати стануть відносно більшими. Це
Тому рекомендується не робити шматки занадто дрібними, оскільки інструмент може зайняти
дуже довго потрібно завершити, якщо ви це зробите.
--[no]check-replication-filters
за замовчуванням: так
Скасувати, якщо на будь-якому сервері встановлено будь-який фільтр реплікації. Інструмент шукає сервер
параметри, які фільтрують реплікацію, такі як binlog_ignore_db і replicate_do_db. Якщо це
знаходить будь-які такі фільтри, він переривається з помилкою.
Якщо репліки налаштовані з будь-якими параметрами фільтрації, вам слід бути обережними
щоб змінити будь-які бази даних або таблиці, які існують на головній, а не в репліках,
оскільки це може призвести до збою реплікації. Для отримання додаткової інформації про реплікацію
правила, дивhttp://dev.mysql.com/doc/en/replication-rules.html>.
--check-slave-lag
тип: рядок
Призупиніть копіювання даних, доки затримка цієї репліки не стане меншою за "--max-lag". Значення а
DSN, який успадковує властивості від параметрів підключення ("--port", "--user",
тощо). Цей параметр замінює звичайну поведінку пошуку та постійно
моніторинг затримки реплікації на ВСІХ підключених репліках. Якщо ви не хочете контролювати
УСІ репліки, але ви хочете, щоб відстежувалося більше ніж одна репліка, тоді використовуйте
Параметр DSN для параметра "--recursion-method" замість цього параметра.
-- індекс фрагмента
тип: рядок
Віддавайте перевагу цьому індексу для розділення таблиць. За замовчуванням інструмент вибирає найбільше
відповідний індекс для фрагментації. Цей параметр дозволяє вказати індекс, який ви використовуєте
віддати перевагу Якщо індекс не існує, інструмент повернеться до стандартного
поведінка при виборі індексу. Інструмент додає індекс до операторів SQL у a
Пункт «ІНДЕКС СИЛИ». Будьте обережні при використанні цієї опції; поганий вибір індексу міг
викликати погану продуктивність.
-- індекс-колони
тип: внутр
Використовуйте лише стільки крайніх лівих стовпців "--chunk-index". Це працює лише для
складених індексів і корисний у випадках, коли помилка в оптимізаторі запитів MySQL
(планувальник) змушує сканувати великий діапазон рядків замість використання індексу для пошуку
точні точки початку та кінця. Ця проблема іноді виникає на індексах з
багато стовпців, наприклад 4 або більше. Якщо це станеться, інструмент може надрукувати попередження
пов’язано з опцією «--[no]check-plan». Інструкція інструменту використовувати тільки перший
N стовпців індексу є обхідним шляхом для помилки в деяких випадках.
--розмір шматка
тип: розмір; за замовчуванням: 1000
Кількість рядків, які потрібно вибрати для кожного скопійованого фрагмента. Допустимі суфікси k, M, G.
Цей параметр може замінити поведінку за замовчуванням, яка полягає в налаштуванні розміру фрагмента
динамічно, щоб спробувати запустити фрагменти рівно за "--chunk-time" секунд. Коли це
параметр не встановлено явно, його значення за замовчуванням використовується як відправна точка, але після
що інструмент ігнорує значення цього параметра. Якщо ви встановите цю опцію явно,
однак тоді він вимикає поведінку динамічного коригування та намагається створити всі фрагменти
точно зазначена кількість рядків.
Є тонкість: якщо індекс фрагментів не є унікальним, то можливо, що фрагменти
буде більше, ніж бажано. Наприклад, якщо таблиця розбита на частини за індексом, що
містить 10,000 XNUMX заданого значення, немає способу написати речення WHERE, яке відповідає
лише 1,000 значень, і цей фрагмент матиме щонайменше 10,000 XNUMX рядків. Такий
chunk, ймовірно, буде пропущено через "--chunk-size-limit".
--обмеження розміру шматка
тип: поплавок; за замовчуванням: 4.0
Не копіюйте фрагменти, які значно перевищують бажаний розмір.
Якщо таблиця не має унікальних індексів, розміри фрагментів можуть бути неточними. Цей варіант
визначає максимальну допустиму межу неточності. Засіб використовує до
оцінити кількість рядків у фрагменті. Якщо ця оцінка перевищує бажаний фрагмент
розмір помножений на ліміт, тоді інструмент пропускає фрагмент.
Мінімальне значення для цієї опції — 1, що означає, що жоден фрагмент не може бути більшим
«--розмір шматка». Можливо, ви не хочете вказувати 1, оскільки рядки повідомляється
EXPLAIN — це оцінки, які можуть відрізнятися від реальної кількості рядків у
шматок. Ви можете вимкнути перевірку негабаритних фрагментів, вказавши значення 0.
Інструмент також використовує цю опцію, щоб визначити, як обробляти зовнішні ключі, які посилаються
таблицю, яку потрібно змінити. Додаткову інформацію див. у розділі «--alter-foreign-keys-method».
--частковий час
тип: поплавок; за замовчуванням: 0.5
Динамічно регулюйте розмір фрагмента, щоб кожен запит на копію даних виконував стільки часу.
Інструмент відстежує швидкість копіювання (рядків за секунду) і налаштовує розмір фрагмента після кожного
запит копіювання даних, щоб наступний запит займав цю кількість часу (у секундах).
виконувати. Він зберігає експоненціально спадну ковзну середню запитів за секунду, отже
що, якщо продуктивність сервера змінюється через зміну навантаження на сервер, інструмент
швидко адаптується.
Якщо цей параметр встановлено на нуль, розмір фрагмента не налаштовується автоматично, тому час запиту буде
змінюються, але розміри фрагментів запиту не змінюються. Інший спосіб зробити те ж саме - вказати a
значення для "--chunk-size" явно, замість того, щоб залишати його за замовчуванням.
--config
тип: масив
Прочитайте цей розділений комами список конфігураційних файлів; якщо вказано, це має бути першим
параметр у командному рядку.
--критичне навантаження
тип: масив; за замовчуванням: Threads_running=50
Перевіряйте ПОКАЗАТИ ГЛОБАЛЬНИЙ СТАТУС після кожного фрагмента та переривайте, якщо навантаження занадто велике. The
Опція приймає розділений комами список змінних стану та порогових значень MySQL. An
необов'язковий "=MAX_VALUE" (або ":MAX_VALUE") може слідувати за кожною змінною. Якщо не дано, то
інструмент визначає поріг, досліджуючи поточне значення під час запуску та подвоюючи його.
Додаткову інформацію див. у розділі «--max-load». Ці параметри працюють аналогічно, за винятком цього
Параметр припиняє роботу інструмента замість призупинення, а значення за замовчуванням таке
обчислюється інакше, якщо ви не вкажете поріг. Причина такого варіанту полягає в тому, що
перевірка безпеки на випадок, якщо тригери на оригінальній таблиці додають так багато навантаження на сервер
що це спричиняє простої. Можливо, немає єдиного значення Threads_running
неправильно для кожного сервера, але значення за замовчуванням 50 здається неприйнятно високим для
більшості серверів, що вказує на те, що операцію слід негайно скасувати.
--база даних
коротка форма: -D; тип: рядок
Підключіться до цієї бази даних.
-- двигун за замовчуванням
Видаліть "ENGINE" з нової таблиці.
За замовчуванням нова таблиця створюється з тими ж параметрами таблиці, що й вихідна таблиця,
тож якщо вихідна таблиця використовує InnoDB, то нова таблиця використовуватиме InnoDB. У певному
у випадках, пов’язаних із реплікацією, це може призвести до ненавмисних змін у репліках, які використовують a
різний двигун для одного столу. Зазначення цієї опції спричиняє створення нової таблиці
створюватися за допомогою двигуна системи за замовчуванням.
--defaults-файл
коротка форма: -F; тип: рядок
Читайте лише параметри mysql із зазначеного файлу. Ви повинні вказати абсолютний шлях.
--[no]drop-new-table
за замовчуванням: так
Відкиньте нову таблицю, якщо копіювати вихідну таблицю не вдалося.
Якщо вказати "--no-drop-new-table" і "--no-swap-tables", залишиться нова змінена копія
таблиці, не змінюючи вихідну таблицю. Дивіться «--new-table-name».
--no-drop-new-table не працює з "alter-foreign-keys-method drop_swap".
--[no]drop-old-table
за замовчуванням: так
Відкиньте вихідну таблицю після її перейменування. Після того, як оригінальна таблиця була
успішно перейменовано, щоб дозволити новій таблиці зайняти її місце, і якщо немає помилок,
інструмент видаляє вихідну таблицю за замовчуванням. Якщо є якісь помилки, інструмент виходить
оригінальний стіл на місці.
Якщо вказано «--no-swap-tables», то немає старої таблиці для видалення.
--[ні]тригерів скидання
за замовчуванням: так
Покинь тригери на старий стіл. "--no-drop-triggers" змушує "--no-drop-old-table".
--сушить
Створюйте та змінюйте нову таблицю, але не створюйте тригери, не копіюйте дані та не замінюйте
оригінальний стіл.
--виконати
Вкажіть, що ви прочитали документацію та хочете змінити таблицю. Ти повинен
вкажіть цей параметр, щоб змінити таблицю. Якщо цього не зробити, то інструмент буде тільки діяти
деякі перевірки безпеки та вихід. Це допоможе переконатися, що ви прочитали документацію
і зрозуміти, як користуватися цим інструментом. Якщо ви не читали документацію, то зробіть це
не вказувати цю опцію.
--сила
Цей параметр обходить підтвердження у разі використання alter-foreign-keys-method = none ,
що може порушити обмеження зовнішнього ключа.
--допомога
Показати довідку та вийти.
--господар
коротка форма: -h; тип: рядок
Підключитися до хоста.
--max-flow-ctl
тип: плаваючий
Дещо схожий на --max-lag, але для кластерів PXC. Перевірте середній час, проведений кластером
призупинити для керування потоком і зробити паузу інструмента, якщо він перевищує вказаний відсоток
у варіанті. Значення 0 змусить інструмент зупинитися під час *будь-якого* керування потоком
виявлена активність. За замовчуванням не перевіряється керування потоком. Ця опція доступна
для PXC версії 5.6 або вище.
--max-лаг
тип: час; за замовчуванням: 1с
Призупиніть копіювання даних, доки затримка всіх реплік не стане меншою за це значення. Після кожних даних-
копіювати запит (кожен фрагмент), інструмент переглядає затримку реплікації всіх реплік до
який він підключає, використовуючи Seconds_Behind_Master. Якщо будь-яка репліка відстає більше ніж
значення цього параметра, то інструмент буде спати протягом "--check-interval" секунд,
потім знову перевірте всі репліки. Якщо ви вкажете «--check-slave-lag», то лише інструмент
перевіряє цей сервер на затримку, а не всі сервери. Якщо ви хочете контролювати, який саме
серверів, які відстежує інструмент, використовуйте значення DSN для "--recursion-method".
Інструмент вічно чекає, поки репліки перестануть відставати. Якщо будь-яка репліка зупинена, файл
інструмент вічно чекає, поки не буде запущено репліку. Копіювання даних продовжується, коли все
репліки працюють і не надто відстають.
Інструмент друкує звіти про прогрес під час очікування. Якщо репліку зупинено, вона друкує a
звіт про прогрес негайно, потім знову через кожен інтервал звіту про прогрес.
--максимальне навантаження
тип: масив; за замовчуванням: Threads_running=25
Перевірте ПОКАЗАТИ ГЛОБАЛЬНИЙ СТАТУС після кожного фрагмента та призупиніть, якщо якісь змінні стану
вище їхніх порогів. Опція приймає список MySQL, розділений комами
змінні стану. Після кожного може бути необов'язковий "=MAX_VALUE" (або ":MAX_VALUE").
змінний. Якщо не вказано, інструмент визначає поріг, досліджуючи струм
значення і збільшивши його на 20%.
Наприклад, якщо ви хочете, щоб інструмент призупинявся, коли Threads_connected стає занадто високим, ви
можна вказати "Threads_connected", і інструмент перевірить поточне значення, коли воно
почне працювати і додайте до цього значення 20%. Якщо поточне значення дорівнює 100, то інструмент
буде призупинено, коли значення Threads_connected перевищує 120, і відновить роботу, коли воно стане нижче 120
знову. Якщо ви хочете вказати явний поріг, наприклад 110, ви можете використовувати будь-який
"Threads_connected:110" або "Threads_connected=110".
Мета цієї опції – запобігти доданню інструменту занадто великого навантаження на
сервер. Якщо запити на копіювання даних є нав’язливими, або якщо вони викликають очікування блокування, то
інші запити на сервері, як правило, блокуються та ставлять у чергу. Зазвичай це спричиняє
Threads_running для збільшення, і інструмент може виявити це, запустивши SHOW GLOBAL
STATUS відразу після завершення кожного запиту. Якщо ви вкажете для цього поріг
змінної, то ви можете вказати інструменту зачекати, поки запити будуть виконуватися нормально
знову. Однак це не запобіжить черги; це лише дасть серверу шанс
щоб вийти з черги. Якщо ви помітили черги, краще зменшити їх
час шматка.
--нова-назва-таблиці
тип: рядок; за замовчуванням: %T_new
Нова назва таблиці перед її заміною. %T замінено оригінальною назвою таблиці.
Якщо використовується за замовчуванням, інструмент додає до імені до 10 "_" (нижнє підкреслення)
знайти унікальну назву таблиці. Якщо вказано ім’я таблиці, інструмент не додає до нього префікс
з "_", тому таблиця не повинна існувати.
--пароль
коротка форма: -p; тип: рядок
Пароль для використання під час підключення. Якщо пароль містить коми, їх потрібно екранувати
із зворотною косою рискою: "іспит\,ple"
--під
тип: рядок
Створіть заданий файл PID. Інструмент не запуститься, якщо файл PID вже існує і
PID, який він містить, відрізняється від поточного PID. Однак, якщо файл PID
існує, а PID, який він містить, більше не працює, інструмент перезапише PID
файл із поточним PID. Файл PID видаляється автоматично, коли інструмент виходить.
--підключати
тип: рядок
Файл модуля Perl, який визначає клас "pt_online_schema_change_plugin". Плагін
дозволяє написати модуль Perl, який може підключатися до багатьох частин pt-online-schema-
змінити. Для цього потрібно добре знання умов Perl і Percona Toolkit, які
виходять за рамки цієї документації. Будь ласка, зв’яжіться з Percona, якщо у вас є
запитання чи потрібна допомога.
Дивіться "PLUGIN" для отримання додаткової інформації.
--порт
коротка форма: -П; тип: внутр
Номер порту для підключення.
--друк
Роздрукуйте оператори SQL на STDOUT. Вказавши цей параметр, ви зможете побачити більшість з них
оператори, які виконує інструмент. Ви можете використовувати цю опцію з "--dry-run", для
приклад.
-- прогрес
тип: масив; за замовчуванням: час,30
Друкуйте звіти про прогрес у STDERR під час копіювання рядків. Значення розділяється комами
список з двох частин. Перша частина може бути відсотком, часом або ітераціями; в
друга частина визначає, як часто оновлення має друкуватися, у відсотках, секундах,
або кількість ітерацій.
--спокійно
коротка форма: -q
Не друкуйте повідомлення на STDOUT (відключає «--progress»). Помилки та попередження є
все ще друкується в STDERR.
--рекурс
тип: внутр
Кількість рівнів для повторення в ієрархії під час виявлення реплік. За замовчуванням є
нескінченний. Дивіться також "--recursion-method".
--метод рекурсії
тип: масив; за замовчуванням: список процесів, хости
Бажаний метод рекурсії для виявлення реплік. Можливі методи:
ВИКОРИСТАННЯ МЕТОДУ
=========== ===================
список процесів ПОКАЗАТИ СПИСОК ПРОЦЕСІВ
ведучі ПОКАЗАТЬ ВЕРСІХ ХОСТІВ
dsn=DSN DSN з таблиці
none Не знайти рабів
Метод списку процесів є за замовчуванням, оскільки SHOW SLAVE HOSTS ненадійний.
Однак метод hosts може працювати краще, якщо сервер використовує нестандартний порт (ні
3306). Інструмент зазвичай робить правильні дії і знаходить всі репліки, але ви можете надати
бажаний метод, і він буде використаний першим.
Метод hosts вимагає, щоб репліки були налаштовані за допомогою report_host, report_port,
і т.п.
Метод dsn особливий: він визначає таблицю, з якої зчитуються інші рядки DSN.
Вказаний DSN має вказувати D і t або t, що відповідає базі даних. Таблиця DSN
повинна мати таку структуру:
СТВОРИТИ ТАБЛИЦЮ `dsns` (
`d` Int(11) НЕ NULL AUTO_INCREMENT,
`батьківський_ід` Int(11) ЗА УМОВЧАННЯМ NULL,
`dsn` varchar(255) НЕ НУЛЬ,
ПОЧАТКОВИЙ КЛЮЧ (`id`)
);
Щоб інструмент відстежував лише хости 10.10.1.16 і 10.10.1.17 на затримку реплікації,
вставте в таблицю значення «h=10.10.1.16» і «h=10.10.1.17». В даний час,
DSN впорядковуються за ідентифікатором, але id і parent_id в іншому випадку ігноруються.
--set-varis
тип: масив
Встановіть змінні MySQL у цьому списку пар "змінна=значення", розділених комами.
За замовчуванням інструмент встановлює:
час очікування=10000
innodb_lock_wait_timeout=1
lock_wait_timeout=60
Змінні, зазначені в командному рядку, замінюють ці значення за замовчуванням. Наприклад,
зазначення «--set-vars wait_timeout=500» замінює значення за замовчуванням 10000.
Інструмент друкує попередження та продовжує роботу, якщо не вдається встановити змінну.
-- спати
тип: поплавок; за замовчуванням: 0
Як довго спати (у секундах) після копіювання кожного фрагмента. Ця опція корисна, коли
регулювання за допомогою "--max-lag" і "--max-load" неможливе. Невеликий, підсекундний
слід використовувати значення, наприклад 0.1, інакше інструменту може знадобитися дуже багато часу для копіювання
великі столи.
--розетка
коротка форма: -S; тип: рядок
Файл сокета для підключення.
--статистика
Роздрукувати статистику про внутрішні лічильники. Це корисно, щоб побачити, скільки попереджень
були придушені порівняно з кількістю INSERT.
--[no]swap-tables
за замовчуванням: так
Поміняти місцями вихідну таблицю та нову, змінену таблицю. Цей крок завершує онлайн
процес зміни схеми, зробивши таблицю з новою схемою заміною
оригінальний стіл. Початкова таблиця стає "старою таблицею", а інструмент скидає її
якщо ви не вимкнете "--[no]drop-old-table".
-- намагається
тип: масив
Скільки разів пробувати критичні операції. Якщо деякі операції не вдаються через не
смертельні помилки, які можна виправити, інструмент чекає і повторює операцію. Це такі
операції, які повторюються, з кількістю спроб за замовчуванням і часом очікування
між спробами (у секундах):
ОПЕРАЦІЯ СПРАБУЄ ЗАЧЕКАТИ
==================== ===== ====
create_triggers 10 1
drop_triggers 10 1
copy_rows 10 0.25
swap_tables 10 1
update_foreign_keys 10 1
аналіз_таблиця 10 1
Щоб змінити значення за замовчуванням, вкажіть нові значення, наприклад:
--пробує create_triggers:5:0.5,drop_triggers:5:0.5
Це змушує інструмент спробувати "create_triggers" і "drop_triggers" 5 разів з 0.5
друге очікування між спробами. Отже, формат такий:
операція:пробує:чекати[,операція:пробує:чекати]
Необхідно вказати всі три значення.
Зауважте, що на більшість операцій впливає лише в MySQL 5.5 і новіших версіях
"lock_wait_timeout" (див. "--set-vars") через блокування метаданих. "copy_rows"
на роботу в будь-якій версії MySQL впливає "innodb_lock_wait_timeout".
Для створення та видалення тригерів кількість спроб застосовується до кожного «CREATE
TRIGGER" і "DROP TRIGGER" для кожного тригера. Для копіювання рядків число
кількість спроб застосовується до кожного фрагмента, а не до всієї таблиці. Для заміни таблиць число
спроб зазвичай застосовується один раз, оскільки зазвичай є лише одна "ПЕРЕЙМЕНУВАТИ ТАБЛИЦУ"
заяву. Для відновлення обмежень зовнішнього ключа застосовується кількість спроб
кожен оператор (операції "ALTER" для "rebuild_constraints"
"--alter-foreign-keys-method"; інші оператори для методу "drop_swap").
Інструмент повторює кожну операцію, якщо виникають такі помилки:
Час очікування блокування (innodb_lock_wait_timeout і lock_wait_timeout)
Тупик знайдено
Запит припинено (KILL QUERY )
З'єднання розірвано (KILL CONNECTION )
Втрачене з'єднання з MySQL
У разі втрачених та знищених з’єднань інструмент автоматично відновить з’єднання.
Помилки та повторні спроби записуються в «--статистику».
--користувач
коротка форма: -у; тип: рядок
Користувач для входу, якщо не поточний користувач.
-- версія
Показати версію та вийти.
--[ні]перевірка версії
за замовчуванням: так
Перевірте наявність останньої версії Percona Toolkit, MySQL та інших програм.
Це стандартна функція «автоматично перевіряти оновлення» з двома додатковими
особливості. Спочатку інструмент перевіряє версію інших програм у локальній системі
доповнення до власної версії. Наприклад, він перевіряє версію кожного сервера MySQL
він підключається до Perl і модуля Perl DBD::mysql. По-друге, він перевіряє та попереджає
про версії з відомими проблемами. Наприклад, у MySQL 5.5.25 була критична помилка та
було повторно випущено як 5.5.25a.
Будь-які оновлення або відомі проблеми друкуються на STDOUT перед звичайним виведенням інструмента.
Ця функція ніколи не повинна заважати нормальній роботі інструменту.
Для отримання додаткової інформації відвідайте .
ПІДКЛЮЧАТИ
Файл, зазначений у "--plugin", повинен визначати клас (тобто пакет), що викликається
"pt_online_schema_change_plugin" з підпрограмою "new()". Інструмент створить
екземпляра цього класу та викликати будь-які хуки, які він визначає. Гачки не потрібні, але a
плагін не дуже корисний без них.
Ці гачки в такому порядку викликаються, якщо вони визначені:
ініціалізації
before_create_new_table
after_create_new_table
before_alter_new_table
after_alter_new_table
before_create_triggers
after_create_triggers
перед_копіюванням рядків
after_copy_rows
before_swap_tables
after_swap_tables
before_update_foreign_keys
after_update_foreign_keys
before_drop_old_table
after_drop_old_table
before_drop_triggers
перед_виходом
get_slave_lag
Кожному хуку передаються різні аргументи. Щоб побачити, які аргументи передаються гачку,
знайдіть назву хука у вихідному коді інструмента, наприклад:
# -- хук плагіна
if ( $plugin && $plugin->can('init') ) {
$plugin->init(
orig_tbl => $orig_tbl,
child_tables => $child_tables,
renamed_cols => $renamed_cols,
раби => $раби,
slave_lag_cxns => $slave_lag_cxns,
);
}
Коментар "# --plugin hook" передує кожному виклику хука.
Будь ласка, зв’яжіться з Percona, якщо у вас виникли запитання чи потрібна допомога.
dsn ВАРІАНТИ
Ці параметри DSN використовуються для створення DSN. Кожна опція задається як "option=value".
Параметри чутливі до регістру, тому P і p не є однаковими параметрами. Не може бути
пробіл перед або після "=", і якщо значення містить пробіли, його потрібно взяти в лапки.
Параметри DSN розділяються комами. Для отримання повної інформації див.
· А
dsn: набір символів; копія: так
Набір символів за замовчуванням.
· Д
dsn: база даних; копія: так
База даних для старої та нової таблиці.
· Ф
dsn: mysql_read_default_file; копія: так
Читайте лише параметри за замовчуванням із заданого файлу
· Год
dsn: хост; копія: так
Підключитися до хоста.
· с
dsn: пароль; копія: так
Пароль для використання під час підключення. Якщо пароль містить коми, їх потрібно екранувати
із зворотною косою рискою: "іспит\,ple"
· П
dsn: порт; копія: так
Номер порту для підключення.
· С
dsn: mysql_socket; копія: так
Файл сокета для підключення.
· т
dsn: таблиця; копія: ні
Таблиця для зміни.
· у
dsn: користувач; копія: так
Користувач для входу, якщо не поточний користувач.
НАВКОЛИШНЄ СЕРЕДОВИЩЕ
Змінна середовища "PTDEBUG" дозволяє вивести детальний налагодження в STDERR. Для того, щоб
налагодження та захоплення всього результату у файл, запустіть інструмент, як:
PTDEBUG=1 pt-online-schema-change ... > ФАЙЛ 2>&1
Будьте обережні: результат налагодження об’ємний і може генерувати кілька мегабайт.
SYSTEM ВИМОГИ
Вам потрібен Perl, DBI, DBD::mysql і деякі основні пакети, які слід встановити в будь-якому
досить нова версія Perl.
Цей інструмент працює лише на MySQL 5.0.2 і новіших версіях, оскільки попередні версії цього не роблять
тригери підтримки.
Використовуйте pt-online-schema-changep онлайн за допомогою служб onworks.net