כיצד לתקן טבלאות מסד נתונים MySQL פגומות צעד-אחר-צעד

בעולם המודרני, חברות לא תלויות בלבד במערכת מאגר מסויימת. יש מספר מערכות מאגרים אחרות שמתאימות למטלות עסקיות מתוך רמה בינונית ולדרישות להקיבולת גבוהה, הזמניות ושיקום אסון. MySQL הוא אחד מהמערכות הללו שמספקות המון תכונות וביצועים גבוהים.

בדומה למערכות RDBMS אחרות, MySQL גם נוטה להיות פגום בשיתוף המאגרים וברעיונות הטבלות. הפסיכת הקלט האחרונה שנגרמה על ידי מיקרוסופט ו-CrowdStrike השפיעה גם על שרתי המאגרים MySQL. בגלל כשלון מערכת ההפעלה, טבלות במאגר או מאגרים שלמים עלולים להיות פגומות.

במאמר זה, אני הולך להראות איך אנחנו יכולים להפריע ול修正 טבלה במאגר MySQL. המאמר יעזר לDBAs לדמות כשלונות ולקבע את הדרכים הטובות ביותר לשחזור או לשםוש טבלת MySQL הפגומה.

הבנה של רעיון פגיעה במאגר MySQL

פגיעה במאגר MySQL יכולה להתרחש בדרכים מסויימות, כוללות:

טבלות בלתי נגישות

כל טבלה או רכיב ספציפי של הטבלה יוכל להיות בלתי נגיש. בזמן שאתה מנסה לגשת לטבלה הפגומה, תווים של פגיעה בקבצי המפתח או בקבצי הנתונים של הטבלה.

שגיאות חוסר התאמה בנתונים

אם הטבלה מושחתת, במקום נתונים משמעותיים, השאלה שלך עשויה לחזור על מספר ערכים שחוץ מהרעיון או תוצאות חריגות או תוצאות חסרות משמעות.

הפסקות בלתי צפויות

במקרים מסוימים, MySQL עשויה להתרסק בזמן שהיא מגיעה לטבלה או מנהלת הגיבויים בעזרת mysqldump. פעם נתקלתי בשגיאה זו בזמן שהדמייתי את התסמין להשחיתות הטבלה. שיתקלתי בטבלה ואחר כך היא התחילה את השירות. בעודני ניסיתי לגשת לטבלה בעזרת הצעדה SELECT, השירותים של MySQL התרסקו באופן אוטומטי.

מסרים שגיאה במהלך העיבודים בבסיס הנתונים

בזמן שמגיעה לטבלה המושחתת, עשויה להתמודד עם שגיאות כמו:

Plain Text

 

השגיאות אלה מרמזות שקובעי הנתונים או הישומים הקשורים אחריהם מושחתים.

חשוב להבין הגיון העיקרי של ההשחיתותכדי למנוע התרחשויות עתידיות ולוודא את האחריות על האובייקטים.

דרישות הקדם לשיקום הטבלות בMySQL

לפני שיניעה בשיקום הם עליכה לוודא שיש:

  • גיבוי שלם של בסיס הנתונים שלך בMySQL
  • מקום מספיק על הדיסק
  • הגישה הנציגית לשרת MySQL

עכשיו, בואו נדמיין את ההשחיתות בטבלה.

טבלה מושחתת בMySQL

לפני שנלמד על תהליך תיקון מסד הנתונים, נבין תחילה איך לפגוע במסד הנתונים. לצורך הדגמה, יצרתי מסד נתונים בשם "CorruptDB" על שרת מסד נתונים של MySQL. יצרתי גם טבלה בשם corrupt_table במסד הנתונים CorruptDB.

כאן קוד ליצירת מסד נתונים וטבלה.

MySQL

 

הוספתי מיליון רשומות לטבלה על ידי הרצת השאילתה הבאה.

MySQL

 

שימו לב כי הדמית הפגיעה בטבלה נעשית על המחשב הנייד שלי. אל תנסו זאת על הסביבה הייצורית, הפיתוחית או כל סביבה אחרת. הטבלה שאני משתמש בה בהדגמה זו נוצרה עם מנוע מסד הנתונים MyISAM. ניתן לקרוא על מנועי אחסון חלופיים כדי ללמוד עוד על מנועי מסד הנתונים של שרת MySQL.

ביצעתי את השלבים הבאים כדי לפגוע בטבלה.

שלב 1: עצירת שירותי שרת MySQL

עליכם לעצור את שרת MySQL. כדי לעשות זאת, הריצו PowerShell כמנהל ובצעו את הפקודה הבאה.

Plain Text

 

בנוסף, ניתן גם לעצור אותו משירותים.

שלב 2: לפגוע בקובץ האינדקס של הטבלה

עכשיו, עלינו לפגוע בקובץ האינדקס של הטבלה. כאשר אתם יוצרים טבלה כלשהי במנוע מסד הנתונים MyISAM, נוצרים שלושה קבצים כאשר אתם יוצרים טבלה באמצעות מנוע מסד הנתונים MyISAM.

  • קבצי MYD: קובץ זה מכיל נתונים אמיתיים.
  • קבצי MYI: זהו קובץ אינדקס.
  • קבצי Frm: הקובץ מכיל מבנה שולחן.

נפגע בקובץ המפתח. קבצי המידע נמצאים במיקום ברירת המחדל "C:\ProgramData\MySQL\MySQL Server 8.0\Data\corruptdb." עבור הפגיעה, אנו משתמשים בעורך הקסטות.

הורדו והתקינו את מנוע העריכה הקסטות. הפעלו את קבצי MYI בעזרתו. הקובץ נראה כמו התמונה הבאה:

החלפו את 5 הבתים הראשונים עם ערכים אקראיים. שמרו את הקובץ וסגרו את העורך.

כעת, בואו נתחיל את השירות וננסה לגשת לשולחן.

שלב 3: הפעלו את שירותי MySQL ונגישו לשולחן

ראשית, הפעלו את שירותי MySQL על-ידי הרצת הפקודה הבאה ב-PowerShell.

Plain Text

 

לאחר שהשירותים הופעלו, הרצו את השאילתה הבאה בשורת הפקודה של MySQL.

MySQL

 

השאילתה החזירה את השגיאה הבאה:

השגיאה מצביעת על כך שמפתח הcorrupt_table נפגע וצריך להיות מתוקן.

שיטות ידניות לתיקון שולחנות MySQL

ישנן שיטות מסוימות שניתן להשתמש בהן כדי לתקן את השולחן המפוגע. השיטה הראשונה היא השימוש בפקודות בדיקת שולחן ותיקון שולחן.

פקודות בדיקת שולחן ותיקון שולחן

ניתן לשחזר את השולחן באמצעות הפקודות המובנות CHECK TABLE ו- REPAIR TABLE של MySQL. הפקודות האלה משמשות לאבחנה ותיקון של כל שולחן MyISAM.

הפקודה לבדיקת הטבלה בודקת את תקינות הטבלה. היא בודקת את מבנה הטבלה, את האינדקסים, ואת הנתונים לאיתור כל סוג של פגיעה ומציגה את הפרטים. התחביר הוא כדלקמן:

Plain Text

 

ניתן לציין אפשרויות שונות.

  1. QUICK: אפשרות זו בודקת מהר ומזהה בעיות כמו אינדקסים פגומים.
  2. FAST: זו בודקת טבלאות שלא נסגרו כראוי.
  3. CHANGED: אפשרות זו בודקת רק את הטבלאות ששונו מאז ביצוע הפעם האחרונה של CHECK TABLE.
  4. MEDIUM: אפשרות זו בודקת את הרשומות ווודא שהקישורים בין הטבלה והנתונים הם נכונים.
  5. EXTENDED: אפשרות זו סורקת ווודא בצורה מעמיקה את מבנה הטבלה והתוכן שלה.

כאן בדמו, אנו נבצע סריקה מהירה. הנה הפקודה.

Plain Text

 

צילום מסך:

כפי שניתן לראות בצילום המסך לעיל, השגיאה מציינת כי האינדקס של הטבלה corrupt_table פגום וצריך להיתקן.

נשתמש בפקודת REPAIR TABLE כדי לתקן את הפגיעה בטבלה. פקודת REPAIR TABLE משמשת לשחזור מבנה הטבלה והנתונים מפגיעה, במיוחד בטבלה המשתמשת במנוע מסד נתונים MyISAM. במקרה בו האינדקס של הטבלה פגום, פקודת REPAIR TABLE בונה מחדש את האינדקסים.

התחביר של REPAIR TABLE הוא כדלקמן:

Plain Text

 

ניתן לציין את האפשרויות הבאות:

  • QUICK: מתקן רק את קובץ האינדקס של טבלה. אינו גורם לגישה לקובץ הנתונים של טבלה.
  • הרחבתי: כאשר אנו משתמשים באפשרות זו, הפקודה תבצע תיקון מעמיק. זה גם יתקן או ייצור מחדש את קובץ האינדקס על ידי סריקת כל הרשומות של הטבלה.

בדוגמה זו, פגענו באינדקס של הטבלה; לכן, נשתמש באפשרות מהיר. בצע את הפקודה הבאה.

Plain Text

 

צילום מסך:

כפי שניתן לראות בצילום המסך לעיל, הטבלה corrupt_table תוקנה בהצלחה. כדי לוודא, הריץ את השאילתה הבאה ב-MySQL Workbench:  

MySQL

 

פלט השאילתה:

כפי שניתן לראות, הטבלה נגישה כעת.

שחזור טבלה באמצעות פקודת mysqldump

השיטה השנייה היא לשחזר את הטבלה כולה מגיבוי. ניתן להשתמש בשיטה זו כאשר הטבלה פגומה ביותר ולא ניתן לתקן אותה באמצעות פקודת REPAIR TABLE

כדי לשחזר טבלת MySQL מהגיבוי, ניתן להשתמש בפקודת mysqldump. ניתן לקרוא את המאמר "mysqldump — תוכנית גיבוי למסד נתונים" כדי ללמוד עוד על שימוש בפקודת mysqldump. התחביר לשחזור הטבלה כדלקמן.

MySQL

 

בתחביר:

  • שם_משתמש: הזן את שם המשתמש שאתה משתמש בו על מנת להתחבר למסד הנתונים של MySQL.
  • -p: ציין את הסיסמה. אם תשאיר את זה ריק, MySQL יבקש סיסמה.
  • [שם_מסד_הנתונים]: ציין את שם מסד הנתונים שבו אתה מנסה לשחזר את הטבלה.
  • טבלת_גיבוי.sql: ספק את שמת הקובץ הגיבוי המלאה.

עבור הדגמה, ניצלתי גיבוי של בסיס נתונים CorruptDB שממוקם בתוך התוכנית C:\MySQLData\Backup.

כדי לשחזר corrupt_table, אנחנו יכולים להשתמש בפקודה הבאה.

MySQL

 

אחרי שהפקודה תבצעтся בהצלחה, תוכלו להגיע לטבלה. ביצוע השאלה הבאה כדי לוודא.

MySQL

 

הוצאת התוצאות של השאלה:

כפי שתוכל לראות בצילום המסך העליון, הטבלה הושחזרה בהצלחה.

בשימוש ב phpMyAdmin

ניתן גם להשתמש בכלי phpMyAdmin על מנת לתקן בסיס נתונים MySQL פגום. phpMyAdmin הוא ממשק משתמש גרף לניהול ושמירת MySQL ו MariaDB. עבור הדגמה, התקנתי אותו על המחשב הנייד שלי.

  • כדי לתקן את הטבלה, תריצו phpMyAdmin וניווטו לבסיס נתונים בו קיים הטבלה הפגומה.
  • במרפיס הימני, תוכלו לראות את רשימת הטבלות שנוצרו בבסיס נתונים CorruptDB.
  • בחרו Corrupt_table מהרשימה ובחרו את אפשרות תיקן טבלה מתוך תפריט היפוך.

הנה צילום מסך להצלחה:

אחרי שהטבלה תיתקנה, תוכלו לראות את מצב ה corrupt_table הפך לבסיס נתונים. הנה הצילום:

הסיכוי

במאמר זה, למדנו על הסיבות האפשריות לפגיעה במסד הנתונים של MySQL וכיצד לתקן אותן. הסברתי על תהליך שלב אחר שלב לפגיעה בטבלאות MySQL באמצעות עורך הקודים המקביל. כן כיסיתי כיצד לתקן אותן באמצעות פקודות CHECK TABLE ו־REPAIR TABLE. למדנו גם כיצד לשחזר את הטבלה באמצעות כלי ה־mysqldump.

תיקון טבלת בסיס נתונים של MySQL שנפגעה עשוי להיות אתגר, אך עם הכלים והשיטות הנכונים, ניתן לנהל את המצב. השיטות הידניות מספקות פתרון בסיסי, בעוד ש־phpMyAdmin מציע אפשרות שחזור מקיפה ואמינה. תמיד וודאו גיבויים רציניים ושמרו על בריאות בסיס הנתונים שלכם כדי להפחית את סיכון הפגיעה.

Source:
https://dzone.com/articles/repair-corrupt-mysql-database-tables-step-by-step