Це команда pt-archiverp, яку можна запустити у безкоштовного хостинг-провайдера OnWorks за допомогою однієї з наших безкоштовних онлайн-робочих станцій, таких як Ubuntu Online, Fedora Online, онлайн-емулятор Windows або онлайн-емулятор MAC OS
ПРОГРАМА:
ІМ'Я
pt-archiver - архівує рядки з таблиці MySQL в іншу таблицю або файл.
СИНТАКСИС
Використання: pt-archiver [ПАРАМЕТИ] --source DSN --where WHERE
pt-archiver вирізає записи з таблиці MySQL. Аргументи --source і --dest використовують DSN
синтаксис; якщо COPY має значення "так", --dest за замовчуванням має значення ключа з --source.
Приклади:
Архівуйте всі рядки з oltp_server на olap_server і у файл:
pt-archiver --source h=oltp_server,D=test,t=tbl --dest h=olap_server \
--file '/var/log/archive/%Y-%m-%d-%D.%t' \
--де "1=1" --ліміт 1000 --commit-each
Очистити (видалити) сірі рядки з дочірньої таблиці:
pt-archiver --source h=host,D=db,t=child --purge \
--where 'НЕ ІСНУЄ (SELECT * FROM parent WHERE col=child.col)'
РИЗИКИ
Percona Toolkit є зрілим, перевіреним у реальному світі та добре перевіреним, але вся база даних
інструменти можуть становити ризик для системи та сервера баз даних. Перш ніж використовувати цей інструмент,
будь ласка:
· Прочитайте документацію до інструменту
· Перегляньте відомі "ПОМИЛКИ" інструмента
· Перевірте інструмент на невиробничому сервері
· Створіть резервну копію робочого сервера та перевірте резервні копії
ОПИС
pt-archiver — це інструмент, який я використовую для архівування таблиць, як описано в
<http://tinyurl.com/mysql-archiving>. Метою є робота з низьким рівнем впливу, спрямована лише на перспективу
вирізати старі дані з таблиці, не сильно впливаючи на запити OLTP. Ви можете вставити
дані в іншу таблицю, яка необов’язково знаходиться на тому самому сервері. Ви також можете написати це на a
файл у форматі, придатному для LOAD DATA INFILE. Або ви не можете зробити ні те, ні інше, і в цьому випадку це так
лише поступове ВИДАЛЕННЯ.
pt-archiver розширюється за допомогою механізму плагінів. Ви можете додати свій власний код
розширена логіка архівування, яка може бути корисною для архівування залежних даних, застосування
складні бізнес-правила або створення сховища даних під час процесу архівування.
Вам потрібно ретельно вибирати значення для деяких параметрів. Найбільш важливими є "--limit",
"--retries" і "--txn-size".
Стратегія полягає в тому, щоб знайти перший(і) рядок(и), потім просканувати деякий індекс лише вперед, щоб знайти більше
рядки ефективно. Кожен наступний запит не повинен сканувати всю таблицю; це слід шукати
в індекс, а потім скануйте, поки не знайдете більше архівних рядків. Вказавши індекс с
частина «i» аргументу «--source» може бути вирішальною для цього; використовуйте "--dry-run", щоб
перевірте створені запити та обов’язково ПОЯСНІТЬ їх, щоб побачити, чи вони ефективні
(здебільшого ви, ймовірно, бажаєте сканувати ПЕРВИННИЙ ключ, який є типовим). Навіть
краще перевірте різницю в лічильниках стану обробника до і після запуску
запиту та переконайтеся, що він не сканує всю таблицю кожного запиту.
Ви можете частково або повністю вимкнути оптимізацію пошуку та сканування за допомогою "--no-ascend"
і "--ascend-first". Іноді це може бути ефективнішим для ключів із кількома стовпцями. бути
знати, що pt-архіватор створено для запуску на початку індексу, який він вибирає та сканує
це тільки вперед. Це може призвести до довгого сканування таблиці, якщо ви намагаєтеся перекусити її
кінець таблиці за індексом, відмінним від того, якому вона віддає перевагу. Дивіться "--джерело" і читайте
документацію в частині «i», якщо це стосується вас.
Перкона XtraDB кластер
pt-archiver працює з Percona XtraDB Cluster (PXC) 5.5.28-23.7 і новіше, але є
три обмеження, які слід враховувати перед архівуванням у кластері:
Помилка під час фіксації
pt-archiver не перевіряє наявність помилок під час фіксації транзакцій. Коміти на PXC можуть
помилка, але інструмент ще не перевіряє чи не повторює транзакцію, коли це відбувається.
Якщо це станеться, інструмент загине.
Таблиці MyISAM
Архівування таблиць MyISAM працює, але підтримка MyISAM у PXC все ще експериментальна
час цього випуску. Існує декілька відомих помилок із таблицями PXC, MyISAM та
Стовпці "AUTO_INCREMENT". Таким чином, ви повинні переконатися, що архівування не відбувається безпосередньо
або опосередковано призводять до використання значень "AUTO_INCREMENT" за замовчуванням для таблиці MyISAM.
Наприклад, це відбувається з "--dest", якщо використовується "--columns" і
Стовпець "AUTO_INCREMENT" не включено. Інструмент не перевіряє це!
Некластерні варіанти
Певні параметри можуть працювати, а можуть і не працювати. Наприклад, якщо вузол кластера також не є a
slave, тоді "--check-slave-lag" не працює. А оскільки таблиці PXC зазвичай
InnoDB, але InnoDB не підтримує "INSERT DELAYED", тоді "--delayed-insert" не підтримує
працювати. Інші параметри також можуть не працювати, але інструмент їх не перевіряє
вам слід перевірити архівування на тестовому кластері перед архівуванням на вашому реальному кластері.
ВИХІД
Якщо ви вкажете «--progress», виводом буде рядок заголовка, а також вихід статусу з інтервалами.
Кожен рядок у виведених даних про стан містить поточну дату та час, скільки секунд pt-
архіватор запущено та скільки рядків він заархівував.
Якщо ви вкажете «--statistics», «pt-archiver» виводить час та іншу інформацію для допомоги
Ви визначаєте, яка частина процесу архівування займає найбільше часу.
ОБРОБКА ПОМИЛОК
pt-архіватор намагається зловити сигнали та акуратно вийти; наприклад, якщо ви надішлете його
SIGTERM (Ctrl-C в системах UNIX), він зловить сигнал і надрукує повідомлення про
сигнал і вийти досить нормально. Він не виконає "--analyze" або "--optimize",
тому що для їх завершення може знадобитися багато часу. Він виконуватиме весь інший код нормально,
включаючи дзвінки after_finish() на будь-яких плагінах (див. «РОЗШИРЕННЯ»).
Іншими словами, якщо сигнал буде спійманий, він вирветься з основного циклу архівування та пропустить
оптимізувати/проаналізувати.
ВАРІАНТИ
Укажіть принаймні один із «--dest», «--file» або «--purge».
"--ignore" і "--replace" є взаємовиключними.
"--txn-size" і "--commit-each" є взаємовиключними.
"--low-priority-insert" і "--delayed-insert" є взаємовиключними.
"--share-lock" і "--for-update" є взаємовиключними.
"--analyze" і "--optimize" є взаємовиключними.
"--no-ascend" і "--no-delete" є взаємовиключними.
Значення DSN у "--dest" за замовчуванням до значень із "--source", якщо COPY має значення "так".
-- аналізувати
тип: рядок
Потім запустіть ANALYZE TABLE на «--source» та/або «--dest».
Запускає ANALYZE TABLE після завершення. Аргументом є довільний рядок. Якщо це
містить літеру 's', джерело буде проаналізовано. Якщо він містить «d», то
призначення буде проаналізовано. Ви можете вказати одне або обидва. Наприклад,
далі буде проаналізовано обидва:
--analyze=ds
Побачитиhttp://dev.mysql.com/doc/en/analyze-table.html> для отримання детальної інформації про ANALIZE TABLE.
--ascend-first
Підвищувати лише перший стовпець індексу.
Якщо ви хочете використовувати оптимізацію за зростанням індексу (див. "--no-ascend"), але не
Ви можете скористатися цим
опція, щоб сказати pt-archiver підніматися лише до крайнього лівого стовпця індексу. Це може
забезпечують значний приріст продуктивності порівняно з тим, що індекс взагалі не піднімається
уникнення витрат на підвищення всього індексу.
Перегляньте розділ «РОЗШИРЕННЯ», щоб дізнатися, як це взаємодіє з плагінами.
--запитай-пройди
Запитувати пароль при підключенні до MySQL.
--буфер
Буферизація виведення в "--file" і скидання під час фіксації.
Вимикає автоматичне очищення в "--file" і скидає "--file" на диск лише під час транзакції
зобов'язується. Зазвичай це означає, що файл блоковано операційною системою, отже
також можуть бути деякі неявні змивання на диск між комітами. Типовим значенням є
скидати "--file" на диск після кожного рядка.
Небезпека полягає в тому, що збій може призвести до втрати даних.
Збільшення продуктивності, яке я бачив від використання "--buffer", становить приблизно від 5 до 15 відсотків.
Ваш пробіг може варіюватися.
--bulk-delete
Видаліть кожну послідовність за допомогою одного оператора (має на увазі «--commit-each»).
Масово видаляйте кожну частину рядків за допомогою одного оператора "DELETE". Заява
видаляє кожен рядок між першим і останнім рядком послідовності включно. Це має на увазі
"--commit-each", оскільки було б поганою ідеєю "ВСТАВЛЯТИ" рядки по одному та
зафіксуйте їх перед групою "DELETE".
Нормальним методом є видалення кожного рядка за його первинним ключем. Масове видалення може бути a
набагато швидше. Вони Також може бути НЕ be швидше якщо у вас є складне речення "WHERE".
Ця опція повністю відкладає всю обробку "DELETE", доки не буде завершена частина рядків
закінчено. Якщо у вас є плагін на джерелі, його методу «before_delete» не буде
дзвонив. Натомість його метод «before_bulk_delete» викликається пізніше.
УВАГА: якщо у вас є плагін на джерелі, який іноді не повертає true
"is_archivable()", вам слід використовувати цей параметр, лише якщо ви розумієте, що він робить. Якщо
плагін наказує "pt-archiver" не архівувати рядок, його все одно буде видалено
масово видалити!
--[no]bulk-delete-limit
за замовчуванням: так
Додайте "--limit" до оператора "--bulk-delete".
Це розширений параметр, і вам не слід вимикати його, якщо ви не знаєте, що ви є
робить і чому! За замовчуванням "--bulk-delete" додає пункт "--limit" до масової інформації
видалити оператор SQL. У деяких випадках це положення можна опустити, вказавши
"--no-bulk-delete-limit". "--limit" все ще має бути вказано.
--bulk-insert
Вставте кожен фрагмент за допомогою LOAD DATA INFILE (передбачається "--bulk-delete" "--commit-each").
Вставте кожну частину рядків за допомогою «LOAD DATA LOCAL INFILE». Це може бути набагато швидше, ніж
вставляючи рядок за раз за допомогою операторів INSERT. Він реалізується шляхом створення a
тимчасовий файл для кожної частини рядків і запис рядків у цей файл замість цього
вставляючи їх. Коли фрагмент закінчено, він завантажує рядки.
Щоб захистити ваші дані, ця опція примусово використовує масове видалення. Це
було б небезпечно видаляти кожен знайдений рядок перед вставленням рядків у
призначення спочатку. Примусове масове видалення гарантує, що видалення очікує до
вставка успішна.
Параметри «--low-priority-insert», «--replace» і «--ignore» працюють із цим
параметр, але "--delayed-insert" ні.
Якщо «LOAD DATA LOCAL INFILE» видає помилку в рядках «The used command is not
дозволено з цією версією MySQL", зверніться до документації для опції DSN "L".
--набір символів
коротка форма: -А; тип: рядок
Набір символів за замовчуванням. Якщо значення - utf8, встановлює binmode Perl на STDOUT на utf8,
передає параметр mysql_enable_utf8 в DBD::mysql і запускає SET NAMES UTF8 після
підключення до MySQL. Будь-яке інше значення встановлює binmode на STDOUT без рівня utf8,
і запускає SET NAMES після підключення до MySQL.
Зверніть увагу, що розпізнаються лише набори символів, відомі MySQL; Так, наприклад, "UTF8" буде
працювати, але "UTF-8" не буде.
Дивіться також "--[no]check-charset".
--[no]check-charset
за замовчуванням: так
Переконайтеся, що набори символів підключення та таблиці однакові. Вимкнення цієї перевірки може
призводять до помилкового перетворення тексту з одного набору символів в інший (зазвичай з
utf8 на latin1), що може спричинити втрату даних або модибеку. Відключення цієї перевірки може бути
корисний або необхідний, коли передбачається перетворення набору символів.
--[no]check-columns
за замовчуванням: так
Переконайтеся, що «--source» і «--dest» мають однакові стовпці.
Увімкнено за замовчуванням; змушує pt-archiver перевіряти вихідну та кінцеву таблиці
мають однакові стовпці. Він не перевіряє порядок стовпців, тип даних тощо. Це просто
перевіряє, чи всі стовпці в джерелі існують у призначенні, і навпаки. Якщо
є будь-які відмінності, pt-архіватор завершить роботу з помилкою.
Щоб вимкнути цю перевірку, вкажіть --no-check-columns.
--інтервал перевірки
тип: час; за замовчуванням: 1с
Якщо вказано "--check-slave-lag", це визначає, як довго інструмент призупиняє кожну
коли він виявляє, що підлеглий відстає.
Ця перевірка виконується кожні 100 рядків.
--check-slave-lag
тип: рядок; повторюваність: так
Призупинити архівування, доки затримка підпорядкованого DSN не стане меншою за "--max-lag". Це
опцію можна вказати кілька разів для перевірки більш ніж одного підпорядкованого.
--стовпці
коротка форма: -с; тип: масив
Розділений комами список стовпців для архівування.
Укажіть розділений комами список стовпців для отримання, запису у файл і вставлення
таблицю призначення. Якщо вказано, pt-archiver ігнорує інші стовпці, якщо це не так
потрібно додати їх до оператора "SELECT" для підвищення індексу або видалення рядків.
Він отримує та використовує ці додаткові стовпці внутрішньо, але не записує їх у
файл або до таблиці призначення. Це робить передати їх плагінам.
Дивіться також "--primary-key-only".
--commit-кожний
Зафіксуйте кожен набір отриманих і заархівованих рядків (вимкне "--txn-size").
Фіксує транзакції та очищує "--file" після архівування кожного набору рядків,
перед отриманням наступного набору рядків і перед сном, якщо вказано "--sleep".
Вимикає "--txn-size"; використовуйте "--limit", щоб контролювати розмір транзакції
"--commit-each".
Цей параметр корисний як ярлик, щоб зробити «--limit» і «--txn-size» однаковими значеннями,
але, що більш важливо, це дозволяє уникнути утримання відкритих транзакцій під час пошуку додаткового
рядки. Наприклад, уявіть, що ви архівуєте старі рядки з початку дуже
велика таблиця з "--limit" 1000 і "--txn-size" 1000. Після деякого періоду пошуку
і архівуючи 1000 рядків за раз, pt-archiver знаходить останні 999 рядків і архівів
їх, а потім виконує наступний SELECT, щоб знайти більше рядків. Це сканує решту
таблиці, але більше не знаходить рядків. Він тримав угоду відкритою дуже довго
час, лише для того, щоб визначити, що все одно закінчено. Ви можете використовувати "--commit-each", щоб уникнути
це.
--config
тип: масив
Прочитайте цей розділений комами список конфігураційних файлів; якщо вказано, це має бути першим
параметр у командному рядку.
--база даних
коротка форма: -D; тип: рядок
Підключіться до цієї бази даних.
--відкладена-вставка
Додайте модифікатор DELAYED до операторів INSERT.
Додає модифікатор DELAYED до операторів INSERT або REPLACE. Побачити
<http://dev.mysql.com/doc/en/insert.html> для деталей.
--прим
тип: DSN
DSN із зазначенням таблиці для архівування.
Цей пункт визначає таблицю, в яку pt-archiver буде вставляти рядки, з яких заархівовано
"--джерело". Він використовує той самий формат аргументу key=val, що й "--source". Більшість відсутніх
значення за замовчуванням ті самі значення, що й "--source", тому вам не потрібно повторювати параметри
які однакові в "--source" і "--dest". Скористайтеся опцією «--help», щоб побачити, які
значення копіюються з "--source".
УВАГА: використання параметра DSN файлу параметрів за замовчуванням (F), який визначає сокет для
"--source" змушує pt-archiver підключатися до "--dest" за допомогою цього сокета, якщо інший
вказано сокет для "--dest". Це означає, що pt-архіватор може некоректно підключатися
до "--source", коли він підключається до "--dest". Наприклад:
--source F=host1.cnf,D=db,t=tbl --dest h=host2
Коли pt-archiver підключається до "--dest", host2, він підключатиметься через "--source",
host1, сокет, визначений у host1.cnf.
--сушить
Надрукуйте запити та вийдіть, не роблячи нічого.
Викликає вихід pt-archiver після друку імені файлу та операторів SQL, які він використовуватиме.
--файл
тип: рядок
Файл для архівування, з ФОРМАТ ДАТИ()-подібне форматування.
Ім'я файлу для запису заархівованих рядків. Підмножина MySQL ФОРМАТ ДАТИ() форматування
у назві файлу дозволені такі коди:
%d день місяця, цифри (01..31)
%H годин (00..23)
%i хвилин, цифри (00..59)
%m місяць, цифри (01..12)
%s секунд (00..59)
%Y Рік, число, чотири цифри
Ви також можете використовувати такі додаткові коди формату:
%D Назва бази даних
Ім'я таблиці %t
приклад:
--file '/var/log/archive/%Y-%m-%d-%D.%t'
Вміст файлу має той самий формат, що використовується SELECT INTO OUTFILE, як зазначено в документах
у посібнику MySQL: рядки, що закінчуються символом нового рядка, стовпці, що закінчуються символом табуляції, NULL
символи представлені \N, а спеціальні символи екрановані \. Це дозволяє
ви перезавантажуєте файл із параметрами за замовчуванням LOAD DATA INFILE.
Якщо вам потрібен заголовок стовпця у верхній частині файлу, див. "--header". Файл автоматично
змивається за замовчуванням; дивіться "--buffer".
--для оновлення
Додає модифікатор FOR UPDATE до операторів SELECT.
Детальніше дивhttp://dev.mysql.com/doc/en/innodb-locking-reads.html>.
--заголовок
Друкувати заголовок стовпця вгорі "--file".
Записує назви стовпців як перший рядок у файлі, заданому "--file". Якщо файл
існує, не записує заголовки; це забезпечує можливість завантаження файлу за допомогою LOAD DATA INFILE
якщо ви додаєте до нього більше виводу.
--допомога
Показати довідку та вийти.
--high-priority-select
Додає модифікатор HIGH_PRIORITY до операторів SELECT.
Побачитиhttp://dev.mysql.com/doc/en/select.html> для деталей.
--господар
коротка форма: -h; тип: рядок
Підключитися до хоста.
--ігнорувати
Використовуйте IGNORE для операторів INSERT.
Спричиняє INSERT у "--dest" як INSERT IGNORE.
--ліміт
тип: int; за замовчуванням: 1
Кількість рядків для вилучення та архівування на оператор.
Обмежує кількість рядків, що повертаються операторами SELECT, які повертають рядки
архів. За замовчуванням один рядок. Можливо, ефективніше збільшити ліміт, але будьте
будьте обережні, якщо ви архівуєте рідко, пропускаючи багато рядків; це потенційно може
викликають більше суперечок з іншими запитами, залежно від механізму зберігання, транзакції
рівень ізоляції та такі параметри, як "--for-update".
--місцевий
Не пишіть запити OPTIMIZE або ANALYZE до binlog.
Додає модифікатор NO_WRITE_TO_BINLOG до запитів ANALYZE та OPTIMIZE. Дивіться "--аналіз"
for details.
--low-priority-delete
Додає модифікатор LOW_PRIORITY до операторів DELETE.
Побачитиhttp://dev.mysql.com/doc/en/delete.html> для деталей.
--low-priority-insert
Додає модифікатор LOW_PRIORITY до операторів INSERT або REPLACE.
Побачитиhttp://dev.mysql.com/doc/en/insert.html> для деталей.
--max-flow-ctl
тип: плаваючий
Дещо схожий на --max-lag, але для кластерів PXC. Перевірте середній час, проведений кластером
призупинити для керування потоком і зробити паузу інструмента, якщо він перевищує вказаний відсоток
у варіанті. За умовчанням контроль потоку не перевіряється. Ця опція доступна для PXC
версії 5.6 або вище.
--max-лаг
тип: час; за замовчуванням: 1с
Призупинити архівування, якщо підлеглий, заданий "--check-slave-lag", затримується.
Цей параметр змушує pt-archiver переглядати підлеглий пристрій кожного разу, коли він збирається отримати
інший ряд. Якщо затримка підлеглого пристрою більша за значення опції, або якщо підлеглий
не працює (тому його затримка дорівнює NULL), pt-table-checksum перебуває в режимі сну протягом "--check-interval"
секунд, а потім знову дивиться на затримку. Це повторюється, поки раба не наздоженуть,
потім переходить до отримання та архівування рядка.
Цей параметр може усунути потребу в "--sleep" або "--sleep-coef".
--не-підйому
Не використовуйте оптимізацію за висхідним індексом.
Стандартна оптимізація за висхідним індексом змушує "pt-archiver" повторювати оптимізацію
Запити "SELECT" здійснюють пошук до індексу, де закінчився попередній запит, а потім сканують
уздовж неї, а не сканувати кожного разу з початку таблиці. Це
увімкнено за замовчуванням, оскільки це, як правило, хороша стратегія для повторних доступів.
Великі індекси з кількома стовпцями можуть призвести до того, що речення WHERE буде досить складним
насправді це може бути менш ефективним. Розглянемо, наприклад, ПЕРВИННИЙ КЛЮЧ із чотирьох стовпців
на (а, б, в, г). Речення WHERE, яке починається з того місця, де закінчився останній запит, виглядає наступним чином:
ДЕ (a > ?)
АБО (a = ? І b > ?)
АБО (a = ? І b = ? І c > ?)
АБО (a = ? AND b = ? AND c = ? AND d >= ?)
Заповнення заповнювачів значеннями використовує пам’ять і ЦП, додає мережевий трафік і
накладні витрати на розбір, і це може ускладнити оптимізацію запиту для MySQL. Чотириколонка
ключ не є великою проблемою, але ключ із десятьма стовпцями, у якому кожен стовпець допускає значення NULL, може
бути.
Підвищення індексу може не знадобитися, якщо ви знаєте, що просто видаляєте рядки
від початку таблиці шматками, але не залишаючи дірок, тому починаючи з
початок таблиці насправді є найефективнішим.
Дивіться також "--ascend-first". Перегляньте розділ «РОЗШИРЕННЯ», щоб дізнатися, як це взаємодіє
з плагінами.
--не видаляти
Не видаляйте заархівовані рядки.
Примушує «pt-archiver» не видаляти рядки після їх обробки. Це забороняє
"--no-ascend", тому що ввімкнення їх обох призведе до нескінченного циклу.
Якщо у вихідному DSN є плагін, його метод «before_delete» все одно викликається,
навіть якщо "pt-archiver" не виконає видалення. Додаткову інформацію див. у розділі "РОЗШИРЕННЯ".
плагіни
-- оптимізувати
тип: рядок
Потім запустіть OPTIMIZE TABLE на «--source» та/або «--dest».
Запускає OPTIMIZE TABLE після завершення. Перегляньте "--analyze" для синтаксису параметрів і
<http://dev.mysql.com/doc/en/optimize-table.html> для отримання детальної інформації про ОПТИМІЗАЦІЮ ТАБЛИЦІ.
--пароль
коротка форма: -p; тип: рядок
Пароль для використання під час підключення. Якщо пароль містить коми, їх потрібно екранувати
із зворотною косою рискою: "іспит\,ple"
--під
тип: рядок
Створіть заданий файл PID. Інструмент не запуститься, якщо файл PID вже існує і
PID, який він містить, відрізняється від поточного PID. Однак, якщо файл PID
існує, а PID, який він містить, більше не працює, інструмент перезапише PID
файл із поточним PID. Файл PID видаляється автоматично, коли інструмент виходить.
--підключати
тип: рядок
Назва модуля Perl для використання як загального плагіна.
Укажіть назву модуля Perl для плагіна загального призначення. Наразі використовується лише
для статистики (див. "--statistics") і повинен мати методи "new()" і "statistics()".
Метод "new( src =" $src, dst => $dst, opts => $o )> отримує джерело та
цільові DSN та їхні з’єднання з базами даних, як і для конкретних з’єднань
плагіни роблять. Він також отримує об’єкт OptionParser ($o) для доступу до командного рядка
параметри (приклад: "$o-"get('purge');>).
Метод «statistics(\%stats, $time)» отримує хешреф статистики, зібраної
завдання архівування та час початку всієї роботи.
--порт
коротка форма: -П; тип: внутр
Номер порту для підключення.
--лише первинний ключ
Лише стовпці первинного ключа.
Комбінація клавіш для визначення "--columns" зі стовпцями первинного ключа. Це ан
ефективність, якщо ви просто хочете очистити рядки; він уникає вилучення всього рядка, коли
лише стовпці первинного ключа потрібні для операторів "DELETE". Дивіться також "--purge".
-- прогрес
тип: внутр
Друк інформації про прогрес кожні X рядків.
Друкує поточний час, час, що минув, і рядки, архівовані кожні X рядків.
-- очищення
Очищення замість архівування; дозволяє опускати "--file" і "--dest".
Дозволяє архівувати без аргументів «--file» або «--dest», що фактично є видаленням
оскільки рядки просто видалено.
Якщо ви просто хочете очистити рядки, спробуйте вказати стовпці первинного ключа таблиці
з "--primary-key-only". Це запобіжить отримання всіх стовпців із сервера для
немає причин.
--швидке видалення
Додає модифікатор QUICK до операторів DELETE.
Побачитиhttp://dev.mysql.com/doc/en/delete.html> для деталей. Як зазначено в
документації, у деяких випадках може бути швидше використати DELETE QUICK, а потім OPTIMIZE
ТАБЛИЦЯ. Для цього можна використовувати "--optimize".
--спокійно
коротка форма: -q
Не друкуйте жодного виводу, наприклад для "--statistics".
Пригнічує звичайний вихід, включаючи вихід "--statistics", але не пригнічує
вихід із "--why-quit".
--замінити
Призводить до запису INSERT у "--dest" як REPLACE.
--повторна спроба
тип: int; за замовчуванням: 1
Кількість повторів за час очікування або блокування.
Визначає кількість разів, які pt-archiver має повторити, якщо є блокування InnoDB
час очікування або взаємоблокування. Коли повторних спроб буде вичерпано, pt-archiver вийде з
помилка
Ретельно подумайте, що ви хочете зробити, коли ви архівуєте між сумішшю
механізми транзакційного та нетранзакційного зберігання. INSERT до "--dest" і
DELETE з "--source" знаходяться в окремих з'єднаннях, тому насправді їх немає
брати участь в одній транзакції, навіть якщо вони знаходяться на одному сервері. Однак, pt-
архіватор реалізує прості розподілені транзакції в коді, тому фіксує та відкочує
має відбуватися за бажанням у двох з’єднаннях.
Наразі я не написав жодного коду для обробки помилок із зберіганням транзакцій
двигуни, відмінні від InnoDB. Запитуйте цю функцію, якщо вона вам потрібна.
-- час виконання
тип: час
Час бігти перед виходом.
Необов’язковий суфікс s=секунди, m=хвилини, h=години, d=дні; якщо немає суфікса, використовується s.
--[no]safe-auto-increment
за замовчуванням: так
Не архівувати рядок із максимальним значенням AUTO_INCREMENT.
Додає додаткову пропозицію WHERE, щоб запобігти видаленню pt-архіватором найновішого рядка
за зростанням ключа AUTO_INCREMENT з одним стовпцем. Це захищає від повторного використання
Значення AUTO_INCREMENT, якщо сервер перезавантажується, і ввімкнено за замовчуванням.
Додаткова пропозиція WHERE містить максимальне значення стовпця автоматичного збільшення станом на
початок завдання архівування або очищення. Якщо під час pt-архіватора вставляються нові рядки
працює, він їх не побачить.
-- дозорний
тип: рядок; за замовчуванням: /tmp/pt-archiver-sentinel
Вийдіть, якщо цей файл існує.
Наявність файлу, визначеного «--sentinel», призведе до зупинки pt-архіватора
архівування та вихід. Типовим є /tmp/pt-archiver-sentinel. Ви можете знайти це
зручно зупиняти завдання cron, якщо це необхідно. Дивіться також "--stop".
--set-varis
тип: масив
Встановіть змінні MySQL у цьому списку пар "змінна=значення", розділених комами.
За замовчуванням інструмент встановлює:
час очікування=10000
Змінні, зазначені в командному рядку, замінюють ці значення за замовчуванням. Наприклад,
зазначення «--set-vars wait_timeout=500» замінює значення за замовчуванням 10000.
Інструмент друкує попередження та продовжує роботу, якщо не вдається встановити змінну.
--share-lock
Додає модифікатор LOCK IN SHARE MODE до операторів SELECT.
Побачитиhttp://dev.mysql.com/doc/en/innodb-locking-reads.html>.
--skip-foreign-key-checks
Вимикає перевірку зовнішнього ключа за допомогою SET FOREIGN_KEY_CHECKS=0.
-- спати
тип: внутр
Час сну між вибірками.
Визначає тривалість сну між операторами SELECT. За замовчуванням не спати
все. Транзакції НЕ фіксуються, а файл "--file" НЕ скидається до
спить. Перегляньте "--txn-size", щоб контролювати це.
Якщо вказано "--commit-each", фіксація та очищення відбуваються перед сплячим режимом.
--сон-коеф
тип: плаваючий
Обчисліть "--sleep" як кратне останнього часу SELECT.
Якщо вказано цей параметр, pt-архіватор буде спати протягом часу запиту останнього
SELECT помножити на вказаний коефіцієнт.
Це трохи складніший спосіб придушення SELECT: sleep a varying
кількість часу між кожним SELECT, залежно від того, скільки часу займає SELECT.
--розетка
коротка форма: -S; тип: рядок
Файл сокета для підключення.
--джерело
тип: DSN
DSN із зазначенням таблиці для архівування (обов’язково). Цей аргумент є DSN. Побачити
"Параметри DSN" для синтаксису. Більшість параметрів контролюють, як pt-archiver підключається до MySQL,
але в синтаксисі цього інструменту є деякі розширені параметри DSN. D, t і i
параметри виберіть таблицю для архівації:
--source h=my_server,D=my_database,t=my_tbl
Параметр a визначає базу даних, яка буде встановлена як типова для підключення за допомогою USE. Якщо
параметр b має значення true, він вимикає двійкове журналювання за допомогою SQL_LOG_BIN. Варіант m
визначає дії, що підключаються, які може забезпечити зовнішній модуль Perl. Єдиний
обов’язкова частина – стіл; інші частини можна читати з різних місць у
середовище (наприклад, файли параметрів).
Частина «і» заслуговує окремої згадки. Це вказує pt-архіватору, який індекс він повинен індексувати
сканувати в архів. Це відображається в підказці FORCE INDEX або USE INDEX у SELECT
оператори, що використовуються для отримання архівованих рядків. Якщо нічого не вказано, pt-архіватор
автоматично виявить хороший індекс, віддаючи перевагу "ПЕРВИННОМУ КЛЮЧУ", якщо він існує. В моєму
зазвичай це добре працює, тому в більшості випадків ви можете просто опустити
частина «я».
Індекс використовується для оптимізації повторних звернень до таблиці; pt-архіватор пам'ятає
останній рядок, який він отримує з кожного оператора SELECT, і використовує його для створення WHERE
з використанням стовпців у вказаному індексі, що повинно дозволити MySQL запустити
наступний ВИБІР там, де закінчився останній, а не потенційне сканування з
початку таблиці з кожним наступним SELECT. Якщо ви використовуєте зовнішній
плагіни, перегляньте розділ «РОЗШИРЕННЯ», щоб дізнатися, як вони взаємодіють із зростанням
покажчики.
Параметри «a» і «b» дозволяють контролювати те, як оператори проходять через двійковий файл
журнал. Якщо ви вкажете параметр «b», двійкове журналювання буде вимкнено для вказаного
підключення. Якщо ви вкажете параметр «a», з’єднання «ВИКОРИСТАЄ» вказане
базу даних, яку можна використовувати, щоб запобігти підлеглим від виконання подій двійкового журналу
з параметрами "--replicate-ignore-db". Ці два варіанти можна використовувати як різні
методи досягнення тієї самої мети: архівувати дані з основного, але залишити їх на
раб. Наприклад, ви можете запустити завдання очищення на головному пристрої та запобігти цьому
що відбувається на підлеглому за допомогою обраного вами методу.
УВАГА: використання параметра DSN файлу параметрів за замовчуванням (F), який визначає сокет для
"--source" змушує pt-archiver підключатися до "--dest" за допомогою цього сокета, якщо інший
вказано сокет для "--dest". Це означає, що pt-архіватор може некоректно підключатися
до "--source", коли мається на увазі підключення до "--dest". Наприклад:
--source F=host1.cnf,D=db,t=tbl --dest h=host2
Коли pt-archiver підключається до "--dest", host2, він підключатиметься через "--source",
host1, сокет, визначений у host1.cnf.
--статистика
Збирайте та друкуйте статистику часу.
Змушує pt-archiver збирати статистику часу про те, що він робить. Ця статистика
доступні для плагіна, визначеного "--plugin"
Якщо ви не вказали "--quiet", "pt-archiver" друкує статистику після завершення роботи. The
статистика виглядає так:
Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
Джерело: D=db,t=таблиця
SELECT 4
ВСТАВКА 4
ВИДАЛИТИ 4
Дія Кількість часу Pct
здійснити 10 0.1079 88.27
вибрати 5 0.0047 3.87
видалення 4 0.0028 2.29
вставка 4 0.0028 2.28
інше 0 0.0040 3.29
Перші два (або три) рядки показують час і таблиці джерела та призначення. The
наступні три рядки показують, скільки рядків було отримано, вставлено та видалено.
Решта рядків показують кількість і час. Стовпці — дія, підсумок
кількість разів, коли ця дія була запланована, загальний час, який вона зайняла, і відсоток
загальний час виконання програми. Рядки відсортовані в порядку зменшення загального часу. The
останній рядок - це решта часу, явно ні до чого не приписана. Дії будуть
відрізняються залежно від параметрів командного рядка.
Якщо задано «--why-quit», його поведінка дещо змінюється. Цей параметр викликає це
вивести причину виходу, навіть якщо це просто тому, що більше немає рядків.
Для цього параметра потрібен стандартний модуль Time::HiRes, який є частиною ядра Perl
досить нові випуски Perl.
--Стоп
Припиніть запуск екземплярів, створивши файл сторожа.
Примушує pt-archiver створити файл sentinel, указаний у «--sentinel», і завершити роботу.
Це має призвести до зупинки всіх запущених екземплярів, які спостерігають за
той самий дозорний файл.
--txn-розмір
тип: int; за замовчуванням: 1
Кількість рядків на транзакцію.
Визначає розмір у кількості рядків кожної транзакції. Нуль вимикає транзакції
взагалі. Після того як pt-архіватор обробить цю кількість рядків, він фіксує обидва
«--source» і «--dest», якщо вказано, і очищає файл, заданий «--file».
Цей параметр має вирішальне значення для продуктивності. Якщо ви архівуєте з активного сервера,
який, наприклад, виконує важку роботу OLTP, вам потрібно вибрати хороший баланс між
розмір транзакції та накладні витрати. Великі операції створюють можливість
більше суперечок за блокування та взаємоблокувань, але менші транзакції спричиняють частіші
фіксувати накладні витрати, які можуть бути значними. Щоб дати уявлення, на невеликому тестовому наборі I
працював під час написання pt-архіватора, значення 500 викликало архівування приблизно 2
секунд на 1000 рядків на тихому екземплярі MySQL на моєму комп’ютері,
архівування на диск і на іншу таблицю. Відключення транзакцій із значенням нуль,
який вмикає автозакріплення, знизив продуктивність до 38 секунд на тисячу рядків.
Якщо ви не архівуєте з механізму зберігання транзакцій або до нього, ви можете це зробити
вимкнути транзакції, щоб pt-archiver не намагався зафіксувати.
--користувач
коротка форма: -у; тип: рядок
Користувач для входу, якщо не поточний користувач.
-- версія
Показати версію та вийти.
--[ні]перевірка версії
за замовчуванням: так
Перевірте наявність останньої версії Percona Toolkit, MySQL та інших програм.
Це стандартна функція «автоматично перевіряти оновлення» з двома додатковими
особливості. Спочатку інструмент перевіряє версію інших програм у локальній системі
доповнення до власної версії. Наприклад, він перевіряє версію кожного сервера MySQL
він підключається до Perl і модуля Perl DBD::mysql. По-друге, він перевіряє та попереджає
про версії з відомими проблемами. Наприклад, у MySQL 5.5.25 була критична помилка та
було повторно випущено як 5.5.25a.
Будь-які оновлення або відомі проблеми друкуються на STDOUT перед звичайним виведенням інструмента.
Ця функція ніколи не повинна заважати нормальній роботі інструменту.
Для отримання додаткової інформації відвідайте .
--де
тип: рядок
Речення WHERE, щоб обмежити, які рядки архівувати (обов’язково).
Визначає речення WHERE, щоб обмежити архівовані рядки. Не включайте це слово
ДЕ. Вам може знадобитися цитувати аргумент, щоб ваша оболонка не могла його інтерпретувати.
Наприклад:
--де 'ts < поточна_дата - інтервал 90 днів'
З міркувань безпеки необхідно вказати «--where». Якщо вам не потрібна пропозиція WHERE, використовуйте
"--де" 1=1.
--чому-кинути
Друкувати причину виходу, якщо рядки не вичерпано.
Змушує pt-archiver друкувати повідомлення, якщо він завершує роботу з будь-якої іншої причини
поза рядками для архіву. Це може бути корисним, якщо у вас є завдання cron із "--run-time"
зазначений, наприклад, і ви хочете бути впевнені, що pt-archiver завершує роботу раніше
закінчується час.
Якщо задано «--statistic», поведінка дещо змінюється. Він надрукує
причина для виходу, навіть якщо це просто тому, що більше немає рядків.
Цей вихід друкується, навіть якщо вказано "--quiet". Ось так ви можете встановити "pt-archiver".
завдання "cron" і отримати електронний лист, якщо є ненормальний вихід.
dsn ВАРІАНТИ
Ці параметри DSN використовуються для створення DSN. Кожна опція задається як "option=value".
Параметри чутливі до регістру, тому P і p не є однаковими параметрами. Не може бути
пробіл перед або після "=", і якщо значення містить пробіли, його потрібно взяти в лапки.
Параметри DSN розділяються комами. Для отримання повної інформації див.
· а
копія: ні
База даних для ВИКОРИСТАННЯ під час виконання запитів.
· А
dsn: набір символів; копія: так
Набір символів за замовчуванням.
· б
копія: ні
Якщо істина, вимкнути binlog за допомогою SQL_LOG_BIN.
· Д
dsn: база даних; копія: так
База даних, яка містить таблицю.
· Ф
dsn: mysql_read_default_file; копія: так
Читайте лише параметри за замовчуванням із заданого файлу
· Год
dsn: хост; копія: так
Підключитися до хоста.
· я
копія: так
Індекс для використання.
· Л
копія: так
Явно ввімкніть LOAD DATA LOCAL INFILE.
Чомусь деякі постачальники компілюють libmysql без --enable-local-infile
параметр, який вимикає оператор. Це може призвести до дивних ситуацій, як-от
сервер дозволяє LOCAL INFILE, але клієнт створює винятки, якщо він використовується.
Однак, доки сервер дозволяє ЗАВАНТАЖУВАТИ ДАНІ, клієнти можуть легко знову ввімкнути його; Побачити
і
<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>. Цей варіант робить
саме так.
Хоча ми не знайшли випадку, щоб увімкнення цієї опції призводило до помилок або розбіжностей
поведінка, щоб бути в безпеці, цей параметр не ввімкнено за замовчуванням.
· м
копія: ні
Назва модуля плагіна.
· с
dsn: пароль; копія: так
Пароль для використання під час підключення. Якщо пароль містить коми, їх потрібно екранувати
із зворотною косою рискою: "іспит\,ple"
· П
dsn: порт; копія: так
Номер порту для підключення.
· С
dsn: mysql_socket; копія: так
Файл сокета для підключення.
· т
копія: так
Стіл для архіву з/куди.
· у
dsn: користувач; копія: так
Користувач для входу, якщо не поточний користувач.
РОЗДОВЖЕННЯ
pt-archiver можна розширити шляхом підключення зовнішніх модулів Perl для обробки деякої логіки та/або
дії. Ви можете вказати модуль як для "--source", так і для "--dest", за допомогою "m"
частина специфікації. Наприклад:
--source D=test,t=test1,m=My::Module1 --dest m=My::Module2,t=test2
Це змусить pt-archiver завантажити пакунки My::Module1 і My::Module2, створити
їх екземпляри, а потім здійснювати виклики до них під час процесу архівування.
Ви також можете вказати плагін за допомогою "--plugin".
Модуль повинен надавати такий інтерфейс:
новий (dbh => $dbh, db => $db_name, tbl => $tbl_name)
Конструктору плагіна передається посилання на дескриптор бази даних, базу даних
ім'я та ім'я таблиці. Плагін створюється одразу після відкриття pt-архіватора
з’єднання, а перед цим перевіряє таблицю, наведену в аргументах. Це дає
плагін можливість створювати та заповнювати тимчасові таблиці або виконувати іншу роботу з налаштування.
before_begin(cols => \@cols, allcols => \@allcols)
Цей метод викликається безпосередньо перед тим, як pt-архіватор починає ітерацію по рядках і
архівуючи їх, але після того, як він виконує всю іншу роботу з налаштування (перевірку структур таблиці,
розробка запитів SQL тощо). Це єдиний раз, коли pt-archiver повідомляє плагіну
назви стовпців для рядків, які він передаватиме плагіну під час архівування.
Аргумент "cols" - це імена стовпців, які користувач запитав на архівування
за замовчуванням або за допомогою опції "--columns". Аргумент "allcols" - це список стовпців
імена для кожного рядка pt-архіватор буде отримувати з вихідної таблиці. Це може принести більше
стовпців, ніж запитував користувач, оскільки йому потрібні деякі стовпці для власного використання. Коли
наступні функції плагіна отримують рядок, це повний рядок, що містить усі додаткові
стовпці, якщо такі є, додані в кінець.
is_archivable(row => \@row)
Цей метод викликається для кожного рядка, щоб визначити, чи можна його архівувати. Це
застосовується лише до "--source". Аргументом є сам рядок, як arrayref. Якщо
метод повертає true, рядок буде заархівовано; інакше його буде пропущено.
Пропуск рядка додає ускладнень для неунікальних індексів. Зазвичай pt-архіватор використовує a
Речення WHERE призначене для призначення останнього обробленого рядка як місця для початку сканування
для наступного оператора SELECT. Якщо ви пропустили рядок, повернувши false з
is_archivable(), pt-архіватор може потрапити в нескінченний цикл, оскільки рядок все ще
існує. Тому, коли ви вказуєте плагін для аргументу "--source", pt-archiver
трохи змінить речення WHERE. Замість того, щоб починати з "більше або дорівнює".
до" останнього обробленого рядка, він почнеться "строго більше ніж". Це спрацює
добре для унікальних індексів, таких як первинні ключі, але він може пропускати рядки (залишати діри) на
неунікальні індекси або при зростанні лише першого стовпця індексу.
"pt-archiver" змінить пункт таким же чином, якщо ви вкажете "--no-delete",
тому що знову можливий нескінченний цикл.
Якщо ви вкажете параметр "--bulk-delete" і повернете false з цього методу,
"pt-archiver" може не робити те, що ви хочете. Рядок не буде заархівовано, але буде
видалено, оскільки масове видалення працює з діапазонами рядків і не знає, які саме рядки
плагін вибрано для збереження.
Якщо ви вкажете параметр "--bulk-insert", значення, яке повертає цей метод, впливатиме
чи записується рядок у тимчасовий файл для масової вставки, тому масові вставки
працюватиме, як очікувалося. Однак масові вставки вимагають масових видалень.
before_delete(рядок => \@рядок)
Цей метод викликається для кожного рядка безпосередньо перед його видаленням. Це стосується лише
"--джерело". Це гарне місце для обробки залежностей, наприклад видалення
речі, які мають зовнішній ключ до рядка, який ви збираєтеся видалити. Ви також можете використовувати
це для рекурсивного архівування всіх залежних таблиць.
Цей метод плагіна викликається, навіть якщо задано "--no-delete", але не якщо
Дано "--bulk-delete".
before_bulk_delete(first_row => \@row, last_row => \@row)
Цей метод викликається безпосередньо перед виконанням масового видалення. Це схоже на
метод "before_delete", за винятком того, що його аргументами є перший і останній рядок діапазону
бути видаленим. Він викликається, навіть якщо вказано "--no-delete".
before_insert(рядок => \@рядок)
Цей метод викликається для кожного рядка безпосередньо перед його вставкою. Це стосується лише
"--dest". Ви можете використовувати це, щоб вставити рядок у кілька таблиць, можливо, за допомогою
Речення ON DUPLICATE KEY UPDATE для створення зведених таблиць у сховищі даних.
Цей метод не викликається, якщо задано "--bulk-insert".
before_bulk_insert(first_row => \@row, last_row => \@row, filename =>
bulk_insert_filename)
Цей метод викликається безпосередньо перед виконанням масової вставки. Це схоже на
метод "before_insert", за винятком того, що його аргументами є перший і останній рядок діапазону
для видалення.
custom_sth(row => \@row, sql => $sql)
Цей метод викликається безпосередньо перед вставкою рядка, але після "before_insert()". Це
дозволяє плагіну вказувати інший оператор "INSERT", якщо потрібно. Повернення
значенням (якщо є) має бути дескриптор оператора DBI. Параметр "sql" - це текст SQL
використовується для підготовки оператора INSERT за замовчуванням. Цей метод не викликається, якщо ви
вкажіть "--bulk-insert".
Якщо значення не повертається, використовується дескриптор оператора "INSERT" за умовчанням.
Цей метод застосовується лише до плагіна, указаного для «--dest», тому якщо ваш плагін не є таким
роблячи те, що ви очікуєте, переконайтеся, що ви вказали це для призначення, а не для
джерело
custom_sth_bulk(first_row => \@row, last_row => \@row, sql => $sql, filename =>
$bulk_insert_filename)
Якщо ви вказали "--bulk-insert", цей метод викликається безпосередньо перед групою
вставити, але після "before_bulk_insert()», а аргументи різні.
Повернене значення цього методу тощо подібне до "custom_sth()" метод.
after_finish()
Цей метод викликається після того, як pt-archiver виходить із циклу архівування, фіксує всю базу даних
обробляє, закриває "--file" і друкує остаточну статистику, але до запуску pt-archiver
АНАЛІЗУВАТИ або ОПТИМІЗУВАТИ (див. «--analyze» і «--optimize»).
Якщо ви вказуєте плагін як для "--source", так і для "--dest", конструкції pt-archiver викликають
before_begin(), і дзвонить after_finish() на двох плагінах у порядку "--джерело",
"--dest".
pt-archiver припускає, що він контролює транзакції, і що плагін НЕ буде фіксувати або згортати
назад дескриптор бази даних. Дескриптор бази даних, який передається конструктору плагіна, є
той самий дескриптор pt-архіватор використовує сам. Пам'ятайте, що "--source" і "--dest" окремі
ручки.
Зразок модуля може виглядати так:
пакет My::Module;
під новий {
my ( $class, %args ) = @_;
return bless(\%args, $class);
}
sub before_begin {
my ( $self, %args ) = @_;
# Збережіть назви стовпців на потім
$self->{cols} = $args{cols};
}
sub is_archivable {
my ( $self, %args ) = @_;
# Виконайте розширену логіку за допомогою $args{row}
1 повернутися;
}
sub before_delete {} # Нічого не робити
sub before_insert {} # Не виконувати жодних дій
sub custom_sth {} # Не виконувати жодних дій
sub after_finish {} # Не виконувати жодних дій
1;
НАВКОЛИШНЄ СЕРЕДОВИЩЕ
Змінна середовища "PTDEBUG" дозволяє вивести детальний налагодження в STDERR. Для того, щоб
налагодження та захоплення всього результату у файл, запустіть інструмент, як:
PTDEBUG=1 pt-архіватор ... > ФАЙЛ 2>&1
Будьте обережні: результат налагодження об’ємний і може генерувати кілька мегабайт.
SYSTEM ВИМОГИ
Вам потрібен Perl, DBI, DBD::mysql і деякі основні пакети, які слід встановити в будь-якому
досить нова версія Perl.
Використовуйте pt-archiverp онлайн за допомогою сервісів onworks.net