דיבאגינג של MySQL

במאמר הקודם למדנו על אופטימיזציה של MySQL: יצירת טבלאות זמניות ואופטימיזציה של שאילתות UPDATE ו-INSERT. במאמר הזה אנו נלמד על הודעות השגיאה והאזהרות של MySQL וכיצד לבדוק אותן ולפענח אותן.

באופן עקרוני, ב-MySQL יש לנו Warnings שמצביעות על בעיות לא מהותיות ו-ERRORS המצביעות על בעיות מהותיות של ממש שמונעות את השלמת הפקודה.

מבנה הודעת אזהרה (warnings)

המבנה של האזהרות הוא פשוט ביותר, לאחר השלמת השאילתה אני מקבל דיווח על מספר השורות שהתעדכן ועל מספר האזהרות (אם יש כאלו). למשל, אם אני אריץ את השאילתה הזו על טבלת integers שה-Data Type שלה הוא INT UNSIGNED NOT NULL:


INSERT INTO integers VALUES ('abc'), (-5), (NULL);

אני אקבל את התוצאה הזו:


Query OK, 3 rows affected, 3 warnings (0.00 sec)
Records: 3  Duplicates: 0  Warnings: 3

השאילתה עצמה תקינה, אך יש שלוש אזהרות. על מנת לראות את האזהרות האלו, אני צריך להריץ את הפקודה SHOW WARNINGS. אם אני אריץ אותה אני אראה את התקלות הבאות:


*************************** 1. row ***************************
  Level: Warning
   Code: 1264
Message: Out of range value adjusted for column 'i' at row 1
*************************** 2. row ***************************
  Level: Warning
   Code: 1264
Message: Out of range value adjusted for column 'i' at row 2
*************************** 3. row ***************************
  Level: Warning
   Code: 1263
Message: Column set to default value; NULL supplied to NOT NULL
         column 'i' at row 3
3 rows in set (0.00 sec)

התקלות האלו מראות לי בדיוק מה היתה הבעיה ומה היה הפתרון של MySQL. הפתרון הוא לתת לערכים את הערך הדיפולטיבי במקום את הערך שניסינו להכניס – אי אפשר להכניס -5 לשדה שהוגדר כ-UNSIGNED, אי אפשר להכניס NULL לשדה שהוגדר כ-NOT NULL ואי אפשר להכניס טקסט לשדה שהוגדר כ-INT.

מבנה הודעת ה-SHOW WARNINGS מחולק לכמה חלקים, החלק הראשון הוא תיאור טקסטואלי של האזהרה. החלק השני הוא מספר הקוד של MySQL לבעיה ואילו החלק הנוסף הוא רמת החומרה של הבעיה כאשר warning זו כאמור אזהרה, note זה לידיעה בלבד ו-error זו בעיה שמונעת את השלמת השאילתה.

SHOW WARNINGS מראה לנו גם את הבעיות. אם נריץ את השאילתה הזו:


  SELECT * FROM no_such_table;

נקבל את השגיאה הבאה:


ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

SHOW WARNINGS יראה לנו את הטבלה הבאה:


+-------+------+------------------------------------------+
| Level | Code | Message                                  |
+-------+------+------------------------------------------+
| Error | 1146 | Table 'test.no_such_table' doesn't exist |
+-------+------+------------------------------------------+

מבנה הודעת השגיאה

אם נסתכל על הודעת השגיאה הזו:


ERROR 1146 (42S02): Table 'test.no_such_table' doesn't exist

נראה שהיא מורכבת מכמה חלקים – החלק הראשון הוא ERROR + מספר השגיאה ב-MySQL, החלק השני (בסוגריים) הוא מספר הקוד של ה-ODBC. והחלק השלישי הוא תיאור טקסטואלי של הבעיה.

אנו יכולים להשתמש ב-SHOW ERRORS על מנת לראות את כל השגיאות החמורות שיש לנו או להשתמש ב-SHOW WARNINGS ולראות גם את האזהרות.

תקלות low-level

חלק זה אינו רלוונטי למפתחים שמפתחים על wamp.

תקלות אלו מתקיימות כאשר יש בעיה במערכת שעליה ה-MySQL יושב. אולי הדיסק של המחשב מלא, או שיש בעיה עם הרשאות הקבצים (בלינוקס) או כל בעיה שקשורה ל-System. בעית low-level כזו מאופיינת בציון של Errcode בהודעת השגיאה. למשל:


ERROR 1 (HY000): Can't create/write to file './whatever.frm'
(Errcode: 13)

אפשר לראות שיש לנו Errcode ואפשר לראות שיש לנו מספר. אך אנו לא יודעים מדוע אי אפשר לכתוב לקובץ whatever.frm. בשביל זה יש לנו את תוכנת perror שבאה יחד עם ההפצה של MySQL. נכנס לקונסול החביב עלינו ונכתוב:


shell>  perror 13

ונקבל את הפלט הבא:


Error code  13:  Permission denied

כלומר הבעיה היא בגלל בעיית הרשאות. סביר להניח שמישהו שינה את הרשאות הקובץ ויש לתת ל-MySQL את היכולת לקרוא ולכתוב מהקובץ whatever.frm.

במאמר הבא אנו נדון בהתקנה ובעבודה על MySQL בסביבה הביתית שלו – מערכת לינוקס.

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

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (אין הצבעות)

תגיות: פורסם בקטגוריה: לימוד MySQL

אל תשארו מאחור! יש עוד מה ללמוד!

הצטרפו לעדכונים!

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

רן בר-זיק

רן בר-זיק כותב כל המאמרים באינטרנט ישראל, מפתח אינטרנט מנוסה במגוון שפות ופלטפורמות.
ניתן ליצור איתי קשר באמצעות:
כתובת המייל שלי: info@internet-israel.com.
פרופיל הלינקדאין שלי
הטוויטר שלי
פרופיל הפייסבוק שלי
אני תמיד שמח לייעץ ולעזור, אך בשל עומס הפניות הרב, אני לא תמיד מצליח לענות במהירות.