זוהי הפקודה pt-archiverp שניתן להריץ בספק האירוח החינמי של OnWorks באמצעות אחת מתחנות העבודה המקוונות המרובות שלנו, כגון Ubuntu Online, Fedora Online, אמולטור מקוון של Windows או אמולטור מקוון של MAC OS
תָכְנִית:
שֵׁם
pt-archiver - ארכיון שורות מטבלת MySQL לטבלה או קובץ אחר.
תַקצִיר
שימוש: pt-archiver [OPTIONS] --מקור 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" --limit 1000 --commit-each
ניקוי (מחק) שורות יתומות מטבלת צאצא:
pt-archiver --source h=host,D=db,t=child --purge
--כאשר 'NOT EXISTS(SELECT * FROM parent WHERE col=child.col)'
סיכונים
Percona Toolkit בוגר, מוכח בעולם האמיתי, ונבדק היטב, אבל כולו מסד נתונים
כלים יכולים להוות סיכון למערכת ולשרת מסד הנתונים. לפני השימוש בכלי זה,
אנא:
· קרא את התיעוד של הכלי
· עיין ב-"BUGS" הידוע של הכלי
· בדוק את הכלי בשרת שאינו ייצור
· גבה את שרת הייצור שלך ואמת את הגיבויים
תיאור
pt-archiver הוא הכלי שבו אני משתמש לארכיון טבלאות כמתואר ב
<http://tinyurl.com/mysql-archiving>. המטרה היא עבודה עם השפעה נמוכה, קדימה בלבד
לנשנש נתונים ישנים מהטבלה מבלי להשפיע הרבה על שאילתות OLTP. אתה יכול להכניס את
נתונים לטבלה אחרת, שאינה חייבת להיות באותו שרת. אתה יכול גם לכתוב את זה לא
קובץ בפורמט המתאים ל-LOAD DATA INFILE. או שאתה לא יכול לעשות את שניהם, ובמקרה זה
רק מחיקה מצטברת.
pt-archiver ניתן להרחבה באמצעות מנגנון תוסף. אתה יכול להזריק קוד משלך כדי להוסיף
לוגיקה ארכיון מתקדמת שיכולה להיות שימושית לאחסון נתונים תלויים בארכיון, יישום
כללים עסקיים מורכבים, או בניית מחסן נתונים במהלך תהליך הארכיון.
אתה צריך לבחור ערכים בקפידה עבור כמה אפשרויות. החשובים ביותר הם "--limit",
"--retries", ו-"--txn-size".
האסטרטגיה היא למצוא את השורות הראשונות, ואז לסרוק כמה אינדקס קדימה בלבד כדי למצוא עוד
שורות ביעילות. כל שאילתה עוקבת לא אמורה לסרוק את כל הטבלה; זה צריך לחפש
לתוך האינדקס, ולאחר מכן סרוק עד שימצא שורות נוספות הניתנות לארכיון. ציון האינדקס עם
החלק ה-'i' של הטיעון "--source" יכול להיות קריטי לכך; השתמש ב---dry-run כדי
בדוק את השאילתות שנוצרו והקפד להסביר אותן כדי לראות אם הן יעילות
(ברוב הפעמים אתה כנראה רוצה לסרוק את המפתח PRIMARY, שהוא ברירת המחדל). אֲפִילוּ
טוב יותר, בדוק את ההבדל במוני סטטוס המטפל לפני ואחרי הפעלת
שאילתה, וודא שהיא לא סורקת את כל הטבלה בכל שאילתה.
אתה יכול להשבית את האופטימיזציות של חיפוש-אז-סריקה באופן חלקי או מלא עם "--no-ascend"
ו"--לעלות-ראשון". לפעמים זה עשוי להיות יעיל יותר עבור מפתחות מרובי עמודות. לִהיוֹת
מודע לכך ש-pt-archiver בנוי להתחיל בתחילת האינדקס שהוא בוחר ולסרוק
זה קדימה בלבד. זה עלול לגרום לסריקות שולחן ארוכות אם אתה מנסה לנשנש מהן
סוף הטבלה לפי אינדקס אחר מזה שהוא מעדיף. ראה "--מקור" וקרא
התיעוד על החלק "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
עבד, אז "--check-slave-lag" לא עובד. ומאז טבלאות PXC הן בדרך כלל
InnoDB, אבל InnoDB לא תומך ב-"INSERT DELAYED", ואז "--delayed-insert" אינו תומך
עֲבוֹדָה. ייתכן שגם אפשרויות אחרות לא יעבדו, אבל הכלי לא בודק אותן, לכן
עליך לבדוק ארכיון באשכול בדיקה לפני ארכיון באשכול האמיתי שלך.
תפוקה
אם תציין "--progress", הפלט הוא שורת כותרת, בתוספת פלט סטטוס במרווחים.
כל שורה בפלט הסטטוס מפרטת את התאריך והשעה הנוכחיים, כמה שניות pt-
הארכיון פעל, וכמה שורות הוא החזיק בארכיון.
אם אתה מציין "--statistics", "pt-archiver" מוציא תזמון ומידע אחר כדי לעזור
אתה מזהה איזה חלק בתהליך הארכיון שלך לוקח הכי הרבה זמן.
טיפול בשגיאות
pt-archiver מנסה לתפוס אותות ולצאת בחן; למשל, אם אתה שולח אותו
SIGTERM (Ctrl-C במערכות UNIX-ish), זה יתפוס את האות, ידפיס הודעה על
לאותת, ולצאת די רגיל. זה לא יבצע "--analyze" או "--optimize",
כי אלה עשויים להימשך זמן רב לסיום. זה יריץ את כל הקוד האחר כרגיל,
כולל התקשרות after_finish() בכל תוספים (ראה "הרחבה").
במילים אחרות, אות, אם ייתפס, יפרוץ מלולאת הארכיון הראשית וידלג
לייעל/לנתח.
אפשרויות
ציין לפחות אחד מ-"--dest", "--file" או "--purge".
"--התעלם" ו-"--החלף" סותרים זה את זה.
"--txn-size" ו-"--commit-each" סותרים זה את זה.
"--עדיפות-נמוכה-הוספה" ו-"--הוספה מושהית" סותרים זה את זה.
"--share-lock" ו-"--for-update" סותרים זה את זה.
"--analyze" ו-"--optimize" סותרים זה את זה.
"--לא-לעלות" ו-"--לא-מחיקה" סותרים זה את זה.
ערכי DSN ב-"--dest" ברירת המחדל לערכים מ-"--source" אם COPY הוא כן.
--לְנַתֵחַ
סוג: מחרוזת
הפעל את ANALYZE TABLE לאחר מכן על "--source" ו/או "--dest".
מפעיל את ANALYZE TABLE לאחר סיום. הטיעון הוא מחרוזת שרירותית. אם זה
מכיל את האות 's', המקור ינותח. אם הוא מכיל 'd', ה-
היעד ינותח. אתה יכול לציין אחד או שניהם. לדוגמה, ה
הבא ינתח את שניהם:
--analyze=ds
לִרְאוֹתhttp://dev.mysql.com/doc/en/analyze-table.html> לפרטים על ניתוח טבלה.
--לעלות-ראשון
עלייה רק בעמודה הראשונה של האינדקס.
אם אתה כן רוצה להשתמש באופטימיזציה של האינדקס העולה (ראה "--לא-לעלות"), אך אל תעשה זאת
רוצה להעלות את התקורה של עלייה באינדקס רב-עמודות גדול, אתה יכול להשתמש בזה
אפשרות לומר ל-pt-archiver לעלות רק בעמודה השמאלית ביותר של האינדקס. זה יכול
לספק שיפור משמעותי בביצועים על פני אי עלייה במדד בכלל, תוך כדי
הימנעות מהעלות של עליית המדד כולו.
ראה "הרחבה" לדיון על האופן שבו זה מתקשר עם תוספים.
--שאל-עבר
בקש סיסמה בעת התחברות ל-MySQL.
--בַּלָם
מאגר פלט ל-"--file" ושטוף ב-commit.
משבית את השטיפה האוטומטית ל-"--file" ושוטפת את "--file" לדיסק רק כאשר עסקה
מתחייב. זה בדרך כלל אומר שהקובץ מסולק על ידי מערכת ההפעלה, אז
ייתכן שיהיו כמה שטיפות מרומזות לדיסק בין commits. ברירת המחדל היא ל
שטף "--file" לדיסק אחרי כל שורה.
הסכנה היא שהתרסקות עלולה לגרום לאיבוד נתונים.
עליית הביצועים שראיתי משימוש ב----buffer היא בסביבות 5 עד 15 אחוזים.
הקילומטראז 'שלך עשוי להשתנות.
--מחיקה בכמות גדולה
מחק כל נתח עם הצהרה בודדת (מרמז על "--commit-each").
מחק כל גוש של שורות בכמות גדולה עם הצהרת "DELETE" אחת. ההצהרה
מוחק כל שורה בין השורה הראשונה והאחרונה של הנתח, כולל. זה מרמז
"--commit-each", מכיוון שזה יהיה רעיון גרוע "INSERT" שורות אחת בכל פעם ו
לבצע אותם לפני "מחק" בתפזורת.
השיטה הרגילה היא למחוק כל שורה על ידי המפתח הראשי שלה. מחיקה בכמות גדולה עשויה להיות א
הרבה יותר מהר. הֵם גם יכול לֹא be מהר יותר אם יש לך סעיף "WHERE" מורכב.
אפשרות זו דוחה לחלוטין את כל עיבוד "DELETE" עד לחלק השורות
גָמוּר. אם יש לך תוסף במקור, שיטת ה"before_delete" שלו לא תהיה
שקוראים לו. במקום זאת, שיטת "before_bulk_delete" שלו נקראת מאוחר יותר.
אזהרה: אם יש לך תוסף במקור שלפעמים לא חוזר ממנו true
"is_archivable()", עליך להשתמש באפשרות זו רק אם אתה מבין מה היא עושה. אם
התוסף מורה ל"pt-archiver" לא להעביר שורה לארכיון, היא עדיין תימחק על ידי
למחוק בכמות גדולה!
--[אין]מגבלת מחיקה בכמות גדולה
ברירת מחדל: כן
הוסף "--limit" להצהרה "--bulk-delete".
זוהי אפשרות מתקדמת ולא כדאי להשבית אותה אלא אם כן אתה יודע מה אתה
עושה ולמה! כברירת מחדל, "--bulk-delete" מוסיף סעיף "--limit" ל- Bulk
מחק משפט SQL. במקרים מסוימים, ניתן להשמיט סעיף זה על ידי ציון
"--אין הגבלה-מחיקה בכמות גדולה". עדיין יש לציין "--limit".
--הוספה בתפזורת
הכנס כל נתח עם LOAD DATA INFILE (מרמז על "--bulk-delete" "--commit-each").
הכנס כל גוש של שורות עם "LOAD DATA LOCAL INFILE". זה עשוי להיות הרבה יותר מהיר מאשר
הוספת שורה בכל פעם עם הצהרות "INSERT". זה מיושם על ידי יצירת א
קובץ זמני עבור כל נתח שורות, וכתיבת השורות לקובץ זה במקום
מכניס אותם. כאשר הנתח מסתיים, הוא מעלה את השורות.
כדי להגן על בטיחות הנתונים שלך, אפשרות זו מאלצת שימוש במחיקה בכמות גדולה. זה
לא בטוח למחוק כל שורה כפי שהיא נמצאת, לפני הכנסת השורות לתוך
יעד ראשון. כפיית מחיקה בכמות גדולה מבטיחה שהמחיקה ממתינה עד ל
ההכנסה הצליחה.
האפשרויות "--בעדיפות נמוכה-הוספה", "--החלף" ו-"--התעלם" פועלות עם זה
אפשרות, אבל "--delayed-insert" לא.
אם "LOAD DATA LOCAL INFILE" זורק שגיאה בשורות "הפקודה המשמשת אינה
מותרת בגרסת MySQL זו", עיין בתיעוד לאפשרות "L" DSN.
--charset
צורה קצרה: -A; סוג: מחרוזת
ערכת תווים ברירת מחדל. אם הערך הוא 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) שעלול לגרום לאובדן נתונים או ל-mojibake. השבתת בדיקה זו עשויה להיות
שימושי או הכרחי כאשר נועדו המרות של ערכות תווים.
--[אין] עמודות סימון
ברירת מחדל: כן
ודא של "--source" ו-"--dest" יש אותן עמודות.
מופעל כברירת מחדל; גורם ל-pt-archiver לבדוק שטבלאות המקור והיעד
יש את אותן עמודות. זה לא בודק סדר עמודות, סוג נתונים וכו' זה פשוט
בודק שכל העמודות במקור קיימות ביעד ולהיפך. אם
יש הבדלים כלשהם, pt-archiver ייצא עם שגיאה.
כדי להשבית את הסימון הזה, ציין --no-check-columns.
--מרווח בדיקה
סוג: זמן; ברירת מחדל: 1 שניות
אם ניתן "--check-slave-lag", זה מגדיר כמה זמן הכלי מפסיק כל אחד
פעם שהוא מגלה שעבד מפגר.
בדיקה זו מתבצעת כל 100 שורות.
--check-slave-lag
סוג: מחרוזת; ניתן לחזור: כן
השהה את הארכיון עד שפיגור העבד של ה-DSN שצוין יהיה קטן מ---max-lag. זֶה
ניתן לציין את האפשרות מספר פעמים לבדיקת יותר מעבד אחד.
--עמודות
צורה קצרה: -c; סוג: מערך
רשימה מופרדת בפסיקים של עמודות לארכיון.
ציין רשימה מופרדת בפסיקים של עמודות לשליפה, כתיבה לקובץ והוספה לתוך
טבלת היעד. אם צוין, pt-archiver מתעלם מעמודות אחרות אלא אם כן
צריך להוסיף אותם למשפט "SELECT" לעלייה באינדקס או למחיקת שורות.
הוא מביא ומשתמש בעמודות הנוספות הללו באופן פנימי, אך אינו כותב אותן ל-
קובץ או לטבלת היעד. זה עושה להעביר אותם לתוספים.
ראה גם "--מפתח ראשי בלבד".
--להתחייב-כל אחד
הגדר כל קבוצה של שורות שהובאו והועברו לארכיון (משבית את "--txn-size").
מבצע עסקאות ומסיר את "--file" לאחר שכל קבוצת שורות הועברה לארכיון,
לפני שליפת קבוצת השורות הבאה, ולפני שינה אם צוין "--sleep".
משבית את "--txn-size"; השתמש ב---limit כדי לשלוט בגודל העסקה באמצעותו
"--להתחייב-כל אחד".
אפשרות זו שימושית בתור קיצור דרך להפוך את "--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".
אזהרה: שימוש בקובץ אפשרויות ברירת מחדל (F) אפשרות DSN המגדירה שקע עבור
"--source" גורם ל-pt-archiver להתחבר ל-"--dest" באמצעות שקע זה אלא אם כן אחר
צוין שקע עבור "--dest". משמעות הדבר היא כי pt-archiver עשוי להתחבר בצורה שגויה
ל-"--source" כאשר הוא מתחבר ל-"--dest". לדוגמה:
--מקור 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.
לִרְאוֹתhttp://dev.mysql.com/doc/en/select.html> לפרטים.
--מנחה
צורה קצרה: -h; סוג: מחרוזת
התחבר למארח.
--להתעלם
השתמש ב- IGNORE עבור הצהרות INSERT.
גורם ל-INSERTs לתוך "--dest" להיות INSERT IGNORE.
--לְהַגבִּיל
סוג: int; ברירת מחדל: 1
מספר שורות לאחזור וארכיון לכל הצהרה.
מגביל את מספר השורות המוחזרות על ידי הצהרות SELECT המאחזרות שורות אל
ארכיון. ברירת המחדל היא שורה אחת. אולי יותר יעיל להגדיל את הגבול, אבל תהיה
זהירות אם אתה שומר בארכיון בדלילות, מדלג על שורות רבות; זה יכול בפוטנציה
לגרום ליותר מחלוקת עם שאילתות אחרות, בהתאם למנוע האחסון, העסקה
רמת בידוד, ואפשרויות כגון "--לעדכן".
--מְקוֹמִי
אל תכתוב שאילתות OPTIMIZE או ANALYZE ל-binlog.
מוסיף את השינוי NO_WRITE_TO_BINLOG לשאילתות ANALYZE ו-OPTIMIZE. ראה "--נתח"
לקבלת פרטים.
--מחיקה בעדיפות נמוכה
מוסיף את השינוי LOW_PRIORITY להצהרות DELETE.
לִרְאוֹתhttp://dev.mysql.com/doc/en/delete.html> לפרטים.
--הוספה בעדיפות נמוכה
מוסיף את השינוי LOW_PRIORITY להצהרות INSERT או REPLACE.
לִרְאוֹתhttp://dev.mysql.com/doc/en/insert.html> לפרטים.
--max-flow-ctl
סוג: צף
קצת דומה ל--max-lag אבל עבור אשכולות PXC. בדוק את אשכול הזמן הממוצע שהושקע
השהייה עבור בקרת זרימה והשהיית הכלי אם היא עוברת את האחוז המצוין
באופציה. ברירת המחדל היא ללא בדיקת בקרת זרימה. אפשרות זו זמינה עבור PXC
גרסאות 5.6 ומעלה.
--max-lag
סוג: זמן; ברירת מחדל: 1 שניות
השהה את הארכיון אם העבד שניתן על ידי "--check-slave-lag" משתהה.
אפשרות זו גורמת ל-pt-archiver להסתכל על העבד בכל פעם שהוא עומד לאחזר
שורה נוספת. אם הפיגור של העבד גדול מערך האופציה, או אם העבד
אינו פועל (לכן ההשהיה שלו היא NULL), pt-table-checksum ישן עבור "--check-interval"
שניות ואז מסתכל שוב על הפיגור. זה חוזר על עצמו עד שהעבד נתפס,
לאחר מכן ממשיך לאחזור והארכיון של השורה.
אפשרות זו עשויה לבטל את הצורך ב-"--sleep" או "--sleep-coef".
--לא לעלות
אל תשתמש באופטימיזציה של אינדקס עולה.
אופטימיזציית ברירת המחדל לאינדקס עולה גורמת ל-"pt-archiver" לבצע אופטימיזציה חוזרת
שאילתות "SELECT" כך שיחפשו את האינדקס שבו הסתיימה השאילתה הקודמת, ואז סורקות
לאורכו, במקום לסרוק מתחילת הטבלה בכל פעם. זה
מופעל כברירת מחדל מכיוון שזו בדרך כלל אסטרטגיה טובה לגישה חוזרת.
אינדקסים גדולים עם מספר עמודות עלולים לגרום לסעיף WHERE להיות מורכב מספיק
זה באמת יכול להיות פחות יעיל. קחו למשל מפתח ראשי בן ארבע עמודות
על (א, ב, ג, ד). פסקת WHERE להתחיל במקום בו הסתיימה השאילתה האחרונה היא כדלקמן:
איפה (א > ?)
OR (a = ? ו-b > ?)
OR (a = ? ו-b = ? ו-c > ?)
OR (a = ? ו-b = ? ו-c = ? ו-d >= ?)
אכלוס מצייני המיקום בערכים משתמש בזיכרון ובמעבד, מוסיף תעבורת רשת ו
ניתוח תקורה, ועלול להפוך את השאילתה לקשה יותר עבור MySQL לייעול. ארבע עמודות
מפתח זה לא עניין גדול, אבל מפתח בן עשר עמודות שבו כל עמודה מאפשרת "NULL" עשוי
לִהיוֹת.
ייתכן שלא תהיה צורך בעלייה באינדקס אם אתה יודע שאתה פשוט מסיר שורות
מתחילת הטבלה בחתיכות, אבל לא משאירים חורים, אז מתחילים ב
תחילת הטבלה היא למעשה הדבר היעיל ביותר לעשות.
ראה גם "--לעלות-ראשון". ראה "הרחבה" לדיון על האופן שבו זה מתקשר
עם תוספים.
--לא-מחיקה
אל תמחק שורות בארכיון.
גורם ל-"pt-archiver" לא למחוק שורות לאחר עיבודן. זה לא מאפשר
"--לא-לעלות", כי הפעלת שניהם תגרום ללולאה אינסופית.
אם יש תוסף ב-DSN של המקור, שיטת ה-"before_delete" שלו נקראת בכל מקרה,
למרות ש-"pt-archiver" לא יבצע את המחיקה. ראה "מאריך" למידע נוסף
תוספים.
-- לייעל
סוג: מחרוזת
הפעל את OPTIMIZE TABLE לאחר מכן על "--source" ו/או "--dest".
מפעיל את OPTIMIZE TABLE לאחר סיום. ראה "--analyze" עבור תחביר האפשרות ו
<http://dev.mysql.com/doc/en/optimize-table.html> לפרטים על OPTIMIZE TABLE.
--סיסמה
צורה קצרה: -p; סוג: מחרוזת
סיסמה לשימוש בעת החיבור. אם הסיסמה מכילה פסיקים יש לבצע אסקייפ
עם קו נטוי אחורי: "exam\,ple"
--pid
סוג: מחרוזת
צור את קובץ ה-PID הנתון. הכלי לא יופעל אם קובץ ה-PID כבר קיים ו
ה-PID שהוא מכיל שונה מה-PID הנוכחי. עם זאת, אם קובץ ה-PID
קיים וה-PID שהוא מכיל אינו פועל יותר, הכלי יחליף את ה-PID
קובץ עם ה-PID הנוכחי. קובץ ה-PID מוסר אוטומטית כאשר הכלי יוצא.
--חיבור
סוג: מחרוזת
שם מודול Perl לשימוש כפלאגין גנרי.
ציין את שם מודול Perl של תוסף לשימוש כללי. כרגע הוא בשימוש בלבד
עבור סטטיסטיקה (ראה "--statistics") וחייב להיות "new()" ושיטה "statistics()".
השיטה "new( src =" $src, dst => $dst, opts => $o )> מקבלת את המקור ואת
DSNs של יעד, וחיבורי מסד הנתונים שלהם, בדיוק כמו החיבור הספציפי
תוספים עושים זאת. זה גם מקבל אובייקט OptionParser ($o) לגישה לשורת הפקודה
אפשרויות (לדוגמה: "$o-"get('purge');>).
השיטה "statistics(\%stats, $time)" מקבלת hashref של הנתונים הסטטיסטיים שנאספו על ידי
עבודת הארכיון, והשעה שבה התחילה העבודה כולה.
--נמל
צורה קצרה: -P; סוג: int
מספר יציאה לשימוש לחיבור.
--מפתח ראשי בלבד
עמודות מפתח ראשיות בלבד.
קיצור דרך לציון "--עמודות" עם עמודות המפתח הראשי. זה
יעילות אם אתה רק רוצה לטהר שורות; הוא נמנע מהבאת כל השורה, מתי
רק עמודות המפתח הראשי נחוצות עבור הצהרות "DELETE". ראה גם "--טיהור".
--התקדמות
סוג: int
הדפס מידע התקדמות בכל X שורות.
מדפיס זמן נוכחי, זמן שחלף ושורות שנשמרו בארכיון בכל X שורות.
--לְטַהֵר
טיהור במקום לארכיון; מאפשר השמטת "--file" ו-"--dest".
מאפשר אחסון בארכיון ללא ארגומנט "--file" או "--dest", שהוא למעשה טיהור
מכיוון שהשורות פשוט נמחקו.
אם אתה רק רוצה לנקות שורות, שקול לציין את עמודות המפתח הראשי של הטבלה
עם "--primary-key-only". זה ימנע שליפת כל העמודות מהשרת עבור
בלי סיבה.
--מחיקה מהירה
מוסיף את השינוי QUICK להצהרות DELETE.
לִרְאוֹתhttp://dev.mysql.com/doc/en/delete.html> לפרטים. כפי שנאמר ב-
תיעוד, במקרים מסוימים עשוי להיות מהיר יותר להשתמש ב-DELETE QUICK ואחריו ב-OPTIMIZE
שולחן. אתה יכול להשתמש ב-"--optimize" בשביל זה.
--שֶׁקֶט
צורה קצרה: -q
אל תדפיס פלט כלשהו, כגון עבור "--סטטיסטיקות".
מדכא פלט רגיל, כולל הפלט של "--סטטיסטיקה", אך אינו מדכא
הפלט מ-"--why-quit".
--החלף
גורם ל-INSERTs לתוך "--dest" להיכתב כ-REPLACE.
--מנסה שוב
סוג: int; ברירת מחדל: 1
מספר ניסיונות חוזרים לכל פסק זמן או מבוי סתום.
מציין את מספר הפעמים ש-pt-archiver צריך לנסות שוב כאשר יש נעילת InnoDB
פסק זמן לחכות או מבוי סתום. כאשר ניסיונות חוזרים מוצו, pt-archiver ייצא עם an
שגיאה.
שקול היטב מה אתה רוצה שיקרה כשאתה בארכיון בין תערובת של
מנועי אחסון טרנזקציונליים ולא טרנסקציוניים. ה-INSERT ל-"--dest" ו
DELETE מ-"--source" נמצאים בחיבורים נפרדים, כך שהם לא ממש
להשתתף באותה עסקה גם אם הם באותו שרת. עם זאת, פט-
archiver מיישם טרנזקציות מבוזרות פשוטות בקוד, ולכן מתחייב והחזר
צריך לקרות כרצונך בשני החיבורים.
בשלב זה לא כתבתי שום קוד לטיפול בשגיאות באחסון עסקאות
מנועים שאינם InnoDB. בקש את התכונה הזו אם אתה צריך אותה.
--זמן ריצה
סוג: זמן
זמן לרוץ לפני היציאה.
סיומת אופציונלית s=שניות, m=דקות, h=שעות, d=ימים; אם אין סיומת, נעשה שימוש ב-s.
--[אין]הגדלה אוטומטית בטוחה
ברירת מחדל: כן
אל תעביר שורה לארכיון עם AUTO_INCREMENT מקסימום.
מוסיף סעיף WHERE נוסף כדי למנוע מ-pt-archiver להסיר את השורה החדשה ביותר כאשר
עולה מפתח AUTO_INCREMENT בעל עמודה אחת. זה שומר מפני שימוש חוזר
ערכי AUTO_INCREMENT אם השרת מופעל מחדש, והוא מופעל כברירת מחדל.
פסקת WHERE הנוספת מכילה את הערך המקסימלי של עמודת ההגדלה האוטומטית נכון ליום
תחילת עבודת הארכיון או הטיהור. אם שורות חדשות יוכנסו בזמן pt-archiver
פועל, הוא לא יראה אותם.
--זָקִיף
סוג: מחרוזת; ברירת מחדל: /tmp/pt-archiver-sentinel
צא אם קובץ זה קיים.
נוכחות הקובץ שצוין על ידי "--sentinel" תגרום ל-pt-archiver להפסיק
אחסון בארכיון ויציאה. ברירת המחדל היא /tmp/pt-archiver-sentinel. אולי תמצא את זה
שימושי לעצור עבודות cron בחן במידת הצורך. ראה גם "--עצור".
--set-vars
סוג: מערך
הגדר את משתני MySQL ברשימה מופרדת בפסיקים של זוגות "משתנה=ערך".
כברירת מחדל, הכלי מגדיר:
wait_timeout=10000
משתנים שצוינו בשורת הפקודה עוקפים ברירות מחדל אלה. לדוגמה,
ציון "--set-vars wait_timeout=500" עוקף את ערך ברירת המחדל של 10000.
הכלי מדפיס אזהרה וממשיך אם לא ניתן להגדיר משתנה.
--שיתוף-נעילת
מוסיף את השינוי LOCK IN SHARE MODE להצהרות SELECT.
לִרְאוֹתhttp://dev.mysql.com/doc/en/innodb-locking-reads.html>.
--דלג על בדיקות מפתח זר
משבית בדיקות מפתח זר עם SET FOREIGN_KEY_CHECKS=0.
--לִישׁוֹן
סוג: int
זמן שינה בין האחזורים.
מציין כמה זמן לישון בין הצהרות SELECT. ברירת המחדל היא לא לישון
את כל. עסקאות אינן מחויבות, וקובץ "--file" אינו נמחק, לפני כן
יָשֵׁן. ראה "--txn-size" כדי לשלוט בזה.
אם מצוין "--commit-each", ההתחייבות והשטיפה מתרחשות לפני השינה.
--שינה-קוף
סוג: צף
חשב את "--sleep" ככפולה של זמן ה-SELECT האחרון.
אם אפשרות זו צוינה, pt-archiver יישן למשך זמן השאילתה האחרון
SELECT מוכפל במקדם שצוין.
זוהי דרך קצת יותר מתוחכמת להחניק את ה-SELECTs: שינה משתנה
משך הזמן בין כל SELECT, תלוי כמה זמן לוקח ל-SELECTs.
--שֶׁקַע
טפסים קצרים; סוג: מחרוזת
קובץ Socket לשימוש לחיבור.
--מָקוֹר
סוג: DSN
DSN מציין את הטבלה שממנה יש להעביר לארכיון (חובה). טיעון זה הוא DSN. לִרְאוֹת
"DSN OPTIONS" עבור התחביר. רוב האפשרויות שולטות כיצד pt-archiver מתחבר ל-MySQL,
אבל יש כמה אפשרויות DSN מורחבות בתחביר של הכלי הזה. ה-D, t ו-i
אפשרויות בחר טבלה לארכיון:
--source h=my_server,D=my_database,t=my_tbl
האפשרות a מציינת את מסד הנתונים שיש להגדיר כברירת המחדל של החיבור עם USE. אם
האפשרות b היא נכונה, היא משביתה רישום בינארי עם SQL_LOG_BIN. אפשרות m
מציין פעולות הניתנות לחיבור, שמודול Perl חיצוני יכול לספק. היחיד
החלק הנדרש הוא השולחן; ניתן לקרוא חלקים אחרים ממקומות שונים ב
סביבה (כגון קבצי אפשרויות).
חלק ה-'i' ראוי לציון מיוחד. זה אומר ל-pt-archiver איזה אינדקס הוא צריך
סריקה לארכיון. זה מופיע ברמז FORCE INDEX או USE INDEX ב-SELECT
הצהרות המשמשות לאחזור שורות הניתנות לארכיון. אם אתה לא מציין כלום, pt-archiver
יגלה אוטומטית אינדקס טוב, מעדיף "מפתח ראשי" אם קיים כזה. ב שלי
ניסיון זה בדרך כלל עובד טוב, אז רוב הזמן אתה כנראה יכול פשוט להשמיט את
'אני' נפרד.
האינדקס משמש למיטוב גישה חוזרת לטבלה; pt-archiver זוכר
השורה האחרונה שהוא מאחזר מכל משפט SELECT, ומשתמש בו כדי לבנות WHERE
סעיף, באמצעות העמודות באינדקס שצוין, שאמור לאפשר ל-MySQL להפעיל את
הבא SELECT היכן האחרון הסתיים, במקום סריקה פוטנציאלית מה-
תחילת הטבלה עם כל SELECT עוקב. אם אתה משתמש חיצוני
תוספים, ראה "הרחבה" לדיון על האופן שבו הם מתקשרים עם עלייה
אינדקסים.
האפשרויות 'a' ו-'b' מאפשרות לך לשלוט באופן שבו הצהרות זורמות דרך הבינארי
עֵץ. אם תציין את האפשרות 'b', רישום בינארי יושבת על ההגדרה שצוינה
חיבור. אם תציין את האפשרות 'a', החיבור "ישתמש" באפשרות שצוין
מסד נתונים, שבו אתה יכול להשתמש כדי למנוע מעבדים לבצע את אירועי היומן הבינאריים
עם אפשרויות "--replicate-ignore-db". ניתן להשתמש בשתי האפשרויות הללו כשונות
שיטות להשגת אותה מטרה: ארכיון נתונים מהמאסטר, אך השאר אותם ב-
עֶבֶד. לדוגמה, אתה יכול להפעיל עבודת טיהור במאסטר ולמנוע אותה
קורה על העבד בשיטת הבחירה שלך.
אזהרה: שימוש בקובץ אפשרויות ברירת מחדל (F) אפשרות DSN המגדירה שקע עבור
"--source" גורם ל-pt-archiver להתחבר ל-"--dest" באמצעות שקע זה אלא אם כן אחר
צוין שקע עבור "--dest". משמעות הדבר היא כי pt-archiver עשוי להתחבר בצורה שגויה
ל-"--source" כאשר הוא נועד להתחבר ל-"--dest". לדוגמה:
--מקור F=host1.cnf,D=db,t=tbl --dest h=host2
כאשר pt-archiver מתחבר ל-"--dest", host2, הוא יתחבר דרך "--source",
host1, שקע מוגדר ב-host1.cnf.
--סטָטִיסטִיקָה
איסוף והדפיס סטטיסטיקות תזמון.
גורם ל-pt-archiver לאסוף סטטיסטיקות תזמון לגבי מה שהוא עושה. הסטטיסטיקה הזו
זמינים לפלאגין שצוין על ידי "--plugin"
אלא אם כן אתה מציין "--quiet", "pt-archiver" מדפיס את הנתונים הסטטיסטיים כשהוא יוצא. ה
הסטטיסטיקה נראית כך:
Started at 2008-07-18T07:18:53, ended at 2008-07-18T07:18:53
מקור: D=db,t=table
בחר 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
שתי השורות הראשונות (או שלוש) מציגות זמנים ואת טבלאות המקור והיעד. ה
שלוש השורות הבאות מראות כמה שורות הובאו, הוכנסו ונמחקו.
השורות הנותרות מציגות ספירות ותזמון. העמודות הן הפעולה, הסכום
מספר הפעמים שהפעולה תועדה, הזמן הכולל שלקח, ואחוז ה-
זמן הריצה הכולל של התוכנית. השורות ממוינות לפי סדר הזמן הכולל יורד. ה
השורה האחרונה היא שאר הזמן שלא מיוחס במפורש לשום דבר. פעולות יהיו
משתנים בהתאם לאפשרויות שורת הפקודה.
אם ניתן "--למה-להפסיק", ההתנהגות שלו משתנה מעט. אפשרות זו גורמת לכך
להדפיס את הסיבה ליציאה גם כשזה רק בגלל שאין יותר שורות.
אפשרות זו דורשת את מודול Time::HiRes הסטנדרטי, שהוא חלק מ-Perl on הליבה
מהדורות חדשות למדי של Perl.
--תפסיק
הפסק להפעיל מופעים על ידי יצירת קובץ הזקיף.
גורם ל-pt-archiver ליצור את קובץ הזקיף שצוין על ידי "--sentinel" ולצאת.
זה אמור להשפיע על הפסקת כל מופעי הריצה אשר צופים ב
אותו קובץ זקיף.
---txn-size
סוג: int; ברירת מחדל: 1
מספר שורות לכל עסקה.
מציין את הגודל, במספר שורות, של כל עסקה. אפס משבית עסקאות
לְגַמרֵי. לאחר ש-pt-archiver מעבד כל כך הרבה שורות, הוא מבצע את שניהם
"--source" וה-"--dest" אם ניתן, ומסיר את הקובץ שניתן על ידי "--file".
פרמטר זה קריטי לביצועים. אם אתה מעביר לארכיון משרת חי,
אשר למשל עושה עבודת OLTP כבדה, אתה צריך לבחור איזון טוב בין
גודל העסקה ותקורה של התחייבות. עסקאות גדולות יותר יוצרות את האפשרות של
יותר מחלוקת מנעולים ומבוי סתום, אבל עסקאות קטנות יותר גורמות לתכופים יותר
התחייבות לתקורה, שיכולה להיות משמעותית. כדי לתת רעיון, על סט מבחן קטן I
עבד עם בזמן כתיבת pt-archiver, ערך של 500 גרם לארכיון לקחת בערך 2
שניות לכל 1000 שורות במופע MySQL שקט אחרת במחשב השולחני שלי,
ארכיון לדיסק ולשולחן אחר. השבתת עסקאות עם ערך אפס,
שמפעיל את האוטומטית, הוריד את הביצועים ל-38 שניות לאלף שורות.
אם אינך מעביר לארכיון ממנוע אחסון עסקאות או ממנו, אולי תרצה לעשות זאת
השבת טרנזקציות כדי ש-pt-archiver לא ינסה לבצע commit.
--מִשׁתַמֵשׁ
צורה קצרה: -u; סוג: מחרוזת
משתמש לכניסה אם לא משתמש נוכחי.
--גִרְסָה
הצג גרסה וצא.
--[אין]בדיקת גרסה
ברירת מחדל: כן
בדוק את הגרסה העדכנית ביותר של Percona Toolkit, MySQL ותוכניות אחרות.
זוהי תכונה רגילה של "בדוק עדכונים אוטומטית", עם שניים נוספים
מאפיינים. ראשית, הכלי בודק את הגרסה של תוכניות אחרות במערכת המקומית
תוספת לגרסה משלו. לדוגמה, הוא בודק את הגרסה של כל שרת MySQL
הוא מתחבר ל- Perl ולמודול Perl DBD::mysql. שנית, הוא בודק ומזהיר
לגבי גרסאות עם בעיות ידועות. לדוגמה, ל-MySQL 5.5.25 היה באג קריטי ו
שוחרר מחדש כ-5.5.25א.
כל עדכונים או בעיות ידועות מודפסים ל-STDOUT לפני הפלט הרגיל של הכלי.
תכונה זו לא אמורה להפריע לפעולה הרגילה של הכלי.
למידע נוסף, בקר .
--איפה
סוג: מחרוזת
סעיף WHERE להגביל אילו שורות לאחסן (חובה).
מציין משפט WHERE כדי להגביל אילו שורות מאוחסנות בארכיון. אל תכלול את המילה
איפה. ייתכן שתצטרך לצטט את הטיעון כדי למנוע מהקליפה שלך לפרש אותו.
לדוגמה:
--כאשר 'ts < current_date - מרווח 90 יום'
למען הבטיחות, נדרש "--היכן". אם אינך דורש סעיף WHERE, השתמש
"--היכן" 1=1.
--למה-להפסיק
הדפס סיבת יציאה אלא אם השורות מוצו.
גורם ל-pt-archiver להדפיס הודעה אם היא יוצאת מכל סיבה שהיא מלבד הפעלה
מחוץ לשורות לארכיון. זה יכול להיות שימושי אם יש לך עבודת cron עם "--run-time"
שצוין, למשל, ואתה רוצה להיות בטוח ש-pt-archiver מסיים לפני
נגמר הזמן.
אם ניתנת "--סטטיסטיקה", ההתנהגות משתנה מעט. זה ידפיס את
סיבה ליציאה גם כשזה רק בגלל שאין יותר שורות.
פלט זה מודפס גם אם ניתן "--שקט". זה כדי שתוכל להכניס את "pt-archiver".
משרת "קרון" וקבל מייל אם יש יציאה חריגה.
dsn אפשרויות
אפשרויות DSN אלה משמשות ליצירת DSN. כל אפשרות ניתנת כמו "אופציה=ערך".
האפשרויות תלויות רישיות, ולכן P ו-p אינן אותה אפשרות. לא יכול להיות
רווח לבן לפני או אחרי הסימן "=" ואם הערך מכיל רווח לבן יש לצטט אותו.
אפשרויות DSN מופרדות בפסיקים. ראה את דף המנגנון של percona-toolkit לפרטים מלאים.
· א
עותק: לא
מסד נתונים לשימוש בעת ביצוע שאילתות.
א
dsn: charset; העתקה: כן
ערכת תווים ברירת מחדל.
· ב
עותק: לא
אם נכון, השבת את binlog עם SQL_LOG_BIN.
· ד
dsn: מסד נתונים; העתקה: כן
מסד נתונים המכיל את הטבלה.
· ו
dsn: mysql_read_default_file; העתקה: כן
קרא רק אפשרויות ברירת מחדל מהקובץ הנתון
· ח
dsn: מארח; העתקה: כן
התחבר למארח.
· אני
העתקה: כן
אינדקס לשימוש.
· ל
העתקה: כן
אפשר במפורש LOAD DATA LOCAL INFILE.
מסיבה כלשהי, חלק מהספקים מהדרים את libmysql ללא הקובץ --enable-local-infile
אפשרות, אשר משביתה את ההצהרה. זה יכול להוביל למצבים מוזרים, כמו
שרת מאפשר LOCAL INFILE, אך הלקוח זורק חריגים אם נעשה בו שימוש.
עם זאת, כל עוד השרת מאפשר LOAD DATA, לקוחות יכולים להפעיל אותו מחדש בקלות; לִרְאוֹת
ו
<http://search.cpan.org/~capttofu/DBD-mysql/lib/DBD/mysql.pm>. אפשרות זו כן
בדיוק את זה.
למרות שלא מצאנו מקרה שבו הפיכת אפשרות זו מובילה לשגיאות או לשונות
התנהגות, ליתר בטחון, אפשרות זו אינה מופעלת כברירת מחדל.
· M
עותק: לא
שם מודול הפלאגין.
· עמ'
dsn: סיסמה; העתקה: כן
סיסמה לשימוש בעת החיבור. אם הסיסמה מכילה פסיקים יש לבצע אסקייפ
עם קו נטוי אחורי: "exam\,ple"
· עמ '
dsn: יציאה; העתקה: כן
מספר יציאה לשימוש לחיבור.
· ש
dsn: mysql_socket; העתקה: כן
קובץ Socket לשימוש לחיבור.
· ט
העתקה: כן
טבלה לארכיון מ/אל.
· u
dsn: משתמש; העתקה: כן
משתמש לכניסה אם לא משתמש נוכחי.
מַאֲרִיך
pt-archiver ניתן להרחבה על ידי חיבור מודולי Perl חיצוניים כדי לטפל בהיגיון מסוים ו/או
פעולות. אתה יכול לציין מודול גם עבור "--source" וגם עבור "--dest", עם ה-'m'
חלק מהמפרט. לדוגמה:
--מקור D=test,t=test1,m=My::Module1 --dest m=My::Module2,t=test2
זה יגרום ל-pt-archiver לטעון את החבילות My::Module1 ו-My::Module2, ליצור
מופעים שלהם, ולאחר מכן לבצע שיחות אליהם במהלך תהליך הארכיון.
אתה יכול גם לציין תוסף עם "--plugin".
המודול חייב לספק את הממשק הזה:
new(dbh => $dbh, db => $db_name, tbl => $tbl_name)
הבנאי של התוסף מועבר הפניה לטיפול בבסיס הנתונים, מסד הנתונים
שם, ושם טבלה. התוסף נוצר מיד לאחר ש-pt-archiver פותח את
קשר, ולפני שהוא בוחן את הטבלה שניתנה בטיעונים. זה נותן את
תוסף הזדמנות ליצור ולאכלס טבלאות זמניות, או לבצע עבודת הגדרה אחרת.
before_begin(cols => \@cols, allcols => \@allcols)
שיטה זו נקראת ממש לפני pt-archiver מתחיל לבצע איטרציה בין שורות ו
מאחסן אותם בארכיון, אבל אחרי שהוא עושה את כל עבודת ההתקנה האחרת (בדיקת מבני טבלה,
עיצוב שאילתות SQL וכן הלאה). זו הפעם היחידה ש-pt-archiver מספר לתוסף
שמות העמודות עבור השורות שהוא יעביר את התוסף בזמן הארכיון.
הארגומנט "cols" הוא שמות העמודות שהמשתמש ביקש לאחסן, או על ידי
ברירת מחדל או לפי האפשרות "--עמודות". הארגומנט "allcols" הוא רשימת העמודות
שמות עבור כל שורה pt-archiver יביא מטבלת המקור. זה עשוי להביא יותר
עמודות ממה שהמשתמש ביקש, מכיוון שהוא צריך כמה עמודות לשימוש משלו. מתי
פונקציות תוסף עוקבות מקבלות שורה, זו השורה המלאה המכילה את כל התוספת
עמודות, אם יש, נוספו לסוף.
is_archivable(row => \@row)
שיטה זו נקראת עבור כל שורה כדי לקבוע אם היא ניתנת לארכיון. זֶה
חל רק על "--מקור". הטיעון הוא השורה עצמה, בתור arrayref. אם ה
השיטה מחזירה true, השורה תועבר לארכיון; אחרת הוא ידלג.
דילוג על שורה מוסיף סיבוכים לאינדקסים שאינם ייחודיים. בדרך כלל pt-archiver משתמש ב-a
סעיף WHERE שנועד למקד את השורה המעובדת האחרונה כמקום להתחיל את הסריקה
להצהרת SELECT הבאה. אם דילגת על השורה על ידי החזרת false from
is_archivable(), pt-archiver יכול להיכנס ללולאה אינסופית בגלל שהשורה עדיין
קיים. לכן, כאשר אתה מציין תוסף עבור הארגומנט "--source", pt-archiver
ישנה מעט את סעיף ה-WHERE שלו. במקום להתחיל ב"גדול או שווה
אל" השורה שעברה עיבוד אחרונה, היא יתחיל "בכל מקרה גדול מ." זה יעבוד
בסדר באינדקסים ייחודיים כגון מפתחות ראשיים, אך הוא עשוי לדלג על שורות (להשאיר חורים).
אינדקסים לא ייחודיים או כשעולים רק בעמודה הראשונה של אינדקס.
"pt-archiver" ישנה את הסעיף באותו אופן אם תציין "--no-delete",
כי שוב לולאה אינסופית אפשרית.
אם תציין את האפשרות "--מחיקה בכמות גדולה" ותחזיר את false משיטה זו,
"pt-archiver" עשוי שלא לעשות מה שאתה רוצה. השורה לא תועבר לארכיון, אבל היא תהיה
נמחק, מכיוון שמחיקות בכמות גדולה פועלות על טווחי שורות ואינן יודעות אילו שורות
תוסף נבחר לשמירה.
אם תציין את האפשרות "--bulk-insert", ערך ההחזרה של שיטה זו ישפיע
האם השורה נכתבת לקובץ הזמני עבור הוספה בתפזורת, אז הוספת כמות גדולה
יעבוד כמצופה. עם זאת, תוספות בכמות גדולה דורשות מחיקה בכמות גדולה.
before_delete(row => \@row)
שיטה זו נקראת עבור כל שורה ממש לפני המחיקה. זה חל רק על
"--מָקוֹר". זהו מקום טוב עבורך לטפל בהתלות, כגון מחיקה
דברים בעלי מפתח זר לשורה שאתה עומד למחוק. אתה יכול גם להשתמש
זה כדי לאחסן באופן רקורסיבי את כל הטבלאות התלויות.
שיטת הפלאגין הזו נקראת גם אם ניתן "--no-delete", אבל לא אם
ניתן "--מחיקה בכמות גדולה".
before_bulk_delete(first_row => \@row, last_row => \@row)
שיטה זו נקראת ממש לפני ביצוע מחיקה בכמות גדולה. זה דומה ל
שיטת "before_delete", אלא שהארגומנטים שלה הם השורה הראשונה והאחרונה של הטווח
להימחק. זה נקרא גם אם ניתן "--לא-מחיקה".
before_insert(row => \@row)
שיטה זו נקראת עבור כל שורה ממש לפני הכנסתה. זה חל רק על
"--דסט". אתה יכול להשתמש בזה כדי להכניס את השורה למספר טבלאות, אולי עם
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", שיטה זו נקראת ממש לפני ה-bulk
הכנס, אבל אחרי "before_bulk_insert()", והטיעונים שונים.
ערך ההחזרה של שיטה זו וכו' דומה ל-"custom_sth()" שיטה.
after_finish()
שיטה זו נקראת לאחר ש-pt-archiver יוצא מלולאת הארכיון, מבצע את כל מסד הנתונים
מטפל, סוגר "--file", ומדפיס את הסטטיסטיקה הסופית, אבל לפני הפעלת pt-archiver
ניתוח או אופטימיזציה (ראה "--analyze" ו-"--optimize").
אם אתה מציין תוסף גם עבור "--source" וגם עבור "--dest", pt-archiver בונה, קורא
before_begin(), ושיחות after_finish() על שני התוספים בסדר "--source",
"--דסט".
pt-archiver מניח שהוא שולט בעסקאות, ושהפלאגין לא יתחייב או יתגלגל
הגב את ידית מסד הנתונים. הידית של מסד הנתונים המועברת לבנאי התוסף היא ה-
אותו ידית pt-archiver משתמש בעצמו. זכור כי "--source" ו-"--dest" נפרדים
ידיות.
מודול לדוגמה עשוי להיראות כך:
חבילה שלי::מודול;
משנה חדש {
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-archiver ... > קובץ 2>&1
היזהר: פלט ניפוי באגים הוא נפח גדול ויכול ליצור כמה מגה-בייט של פלט.
מערכת דרישות
אתה צריך Perl, DBI, DBD::mysql וכמה חבילות ליבה שצריכות להיות מותקנות בכל
גרסה חדשה למדי של Perl.
השתמש ב-pt-archiverp באינטרנט באמצעות שירותי onworks.net