הכן את מסד הנתונים של MySQL או MariaDB

הכן את מסד הנתונים של MySQL או MariaDB

הכן את מסד הנתונים של MySQL או MariaDB

שרת אינטרנט IoTHTTP POST IoT Web Serverמסד נתונים של MySQL. שרת אינטרנט IoTשרת אינטרנט IoT בשפת PHP

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

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

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

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

לוח הניהול של MySQL Workbench

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

עורך שאילתות SQL של ​​MySQL Workbench

בכל מקרה, וכמובן כדי לפתור את התצורה הדרושה של מסד הנתונים של ה-IoT שנמצא בעיבוד, ניתן להשתמש בקונסולה.

הגדר את root, מנהל MySQL הראשי

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

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

כדי לבצע משימות אלה, אתה בדרך כלל עובד עם המסוף. MySQL כמנהל. כדי לגשת למצב זה, השתמש בפקודה mysql -u root -p o sudo mysql -u root אם נעשה בו שימוש בפעם הראשונה ובמהלך ההתקנה, המשתמש לא הוגדר root

הגדרת משתמש שורש MySQL מהמסוף

נכנסים למסדר mysql -u root -p מסומן עם האפשרות -u שם המשתמש (root) ועם האפשרות -p (סיסמה) שיש לבקש את המפתח בעת גישה לקונסולה MySQL. כדי לחזור למסוף המערכת ניתן להשתמש בפקודה quit לצאת

כפי שניתן לראות בצילום המסך למעלה, לפני שעזב את הקונסולה MySQL, כדי להגדיר את הרשאות המשתמש root נעשה שימוש בפקודה:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '1234' WITH GRANT OPTION;
שבו:

  • כל ההרשאות מוענקות GRANT ALL PRIVILEGES
  • בכל הטבלאות בכל מסדי הנתונים ON *.*
  • למשתמש root גישה מהמחשב המריץ את השרת MySQL TO 'root'@'localhost'
  • באמצעות 1234 כסיסמה IDENTIFIED BY '1234'
  • עם הרשאה לאשר משתמשים אחרים WITH GRANT OPTION

על מנת לנהל את מסד הנתונים מרחוק, יש להעניק הרשאות למשתמש המקביל ממקומות אחרים. בדוגמה הקודמת זה היה מותר root גישה אליו מהמחשב שבו פועל שרת מסד הנתונים (localhost) עם 'root'@'localhost', אם נעשה בו שימוש 'root'@'%' תתאפשר גישה מכל מכונה.

אם יש לך הרשאות מנהל במערכת, תוכל להגדיר מחדש את סיסמת המשתמש root de MySQL. לשם כך, יש צורך להפסיק את השירות (mysql o mysqld, בהתאם להפצה), אתחל אותו ללא מפתח, הגדר את המפתח החדש root ולהפעיל אותו מחדש. על ידי גישה ללא סיסמה ניתן גם להעניק את ההרשאות המתוארות לעיל.

  • להפסיק את השירות sudo /etc/init.d/mysql stop
  • לזרוק MySQL ללא מפתח ולפתוח את המסוף sudo mysqld_safe --skip-grant-tables &
  • גישה כמו «root» mysql -u root
  • שנה את הסיסמה:
    • גישה למסד הנתונים «mysql»: USE mysql;
    • להקצות ל «root» המפתח «1234»: UPDATE user SET authentication_string=PASSWORD("1234") WHERE user="root";
    • החל את ההרשאות החדשות: FLUSH PRIVILEGES;
    • לצאת מהקונסולה mysql ולחזור למערכת: quit
  • הפעל מחדש את השירות sudo /etc/init.d/mysql restart

הגדר גישה מרחוק למסד נתונים

מטעמי אבטחה, התצורה הראשונית של מנהל מסד הנתונים MySQL אינו מאפשר גישה מרחוק, כדי לשנות אותו יש צורך לערוך את מסמך התצורה, בדרך כלל my.cnf, שנמצא בדרך כלל במסלול /etc/mysql.

אם משתמשים בו מריאד, שהיא כעת הגרסה ה"חופשית" יותר, של MySQL, בוודאות my.cnf יהיה קישור ל /etc/alternatives/my.cnf אשר, בתורו, יטען את התצורה, באמצעות !includedir, מתוך מסמכי המסלול /etc/mysql/mariadb.conf.d, כנראה מהמסמך 50-server.cnf

המשאב ששרת מסד הנתונים משתמש בו כדי לא לטפל בבקשות מרוחקות מורכב מ"האזנה" רק לבקשות המבוצעות ממיקום מסוים. כתובת IP שמתבטא כערך הפרמטר bind-address (מה שמחליף את הקלאסי skip-networking) כאשר הכתובת היא 127.0.0.1 (localhost) רק בקשות מהמחשב המקומי מטופלות. אם הגיבו עם # או אם הערך הוא 0.0.0.0, אנו משרתים כל כתובת. כדי לאפשר גישה חיצונית, הדבר הבטוח ביותר הוא לציין את כתובת IP (שיכול להיות ציבורי או פרטי) של המחשב שממנו ניגשים, בדרך כלל משהו כמו bind-address = 192.168.1.74. במקרה שלך, ציוד זה יכול לפעול כ מנהרה (מפנה עם SSH) או כשביל (עם ה טבלאות ip ליבה) כדי להימנע מחשיפת השרת מחוץ לאזור מבוקר של הרשת.

תצורת מסד הנתונים של MySQL על ידי עריכת קובץ my.cnf (ב- etc mysql)

בצילום המסך למעלה ניתן לראות שהוא עבר עריכה my.cnf עם התצורה MySQL באמצעות ההזמנה sudo nano /etc/mysql/my.cnf. במקרה של עבודה עם מריאד עם התצורה הרגילה, הסדר יהיה משהו כמו sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf. כפי שהוזכר לעיל, ברגע שיש גישה עם הרשאות ניהול, א GUI כמו שולחן עבודה של MySQL לניהול מסד נתונים רגיל.

צור את מסדי הנתונים

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

הסדר CREATE DATABASE temperaturas; יוצר את מסד הנתונים "טמפרטורות". כדי למנוע שגיאות, ניתן להשתמש בטופס CREATE DATABASE IF NOT EXISTS base_datos_temperaturas; מה שייצור את מסד הנתונים "temperature_database" רק אם הוא אינו קיים כעת.

צור את הטבלאות

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

אם שם מסד הנתונים מושמט בעת הפעלה על טבלה (במקרה זה, בעת יצירתה) זה נחשב שהפנייה האחרונה שנבחרה. כדי לבחור במפורש אחד ספציפי, אתה יכול להשתמש בפקודה USE ולציין את שמך USE base_datos_temperaturas;

בעת יצירת טבלאות בבסיסי נתונים, באותה פעולה, בדרך כלל מוסיפים את המידע של השדות היוצרים אותם (אם כי ניתן גם לשנות אותם מאוחר יותר). בדיוק כפי שנעשה במסד הנתונים, ניתן ליצור את הטבלה רק אם היא לא קיים הוספת הסעיף IF NOT EXISTS או להיפך, הקפד למחוק את הטבלה לפני יצירתה רק אם היא קיימת באמצעות DROP TABLE IF EXISTS valor_temperaturas;

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

הגדר את השדות

השדות שמתווספים בעת יצירת הטבלה מסומנים על ידי סגירתם בסוגריים וציון סוג הנתונים שהם מאחסנים. סוגי הנתונים המשמשים בדרך כלל במסד נתונים לאחסון מידע ממכשירים המחוברים לאינטרנט של הדברים הם מספרים שלמים (INT o BIGINT) עשרונים (DECIMAL, DOUBLE o FLOAT) של זמן (DATE, TIME, DATETIME o TIMESTAMP) וטקסט (בעיקר VARCHAR למרות שיש אחרים כמו TEXT אך הם אינם משמשים עבור IoT) לאחר סוג הנתונים, ובסוגריים, מתווספים אורך הנתונים ואם רלוונטי, הפורמט או הדיוק.

על ידי הוספה AUTO_INCREMENT ההגדרה של שדה מציינת למנהל מסד הנתונים שאם לא מצוין שום דבר אחר, בעת יצירת רשומה חדשה יש לאחסן אוטומטית את הערך של הרשומה האחרונה בתוספת התוספת המתאימה (שהוא בדרך כלל 1). בדרך כלל הוא נכלל ב- שדות המשמשים כאינדקסים מספריים של הרשומות.

הקוד NOT NULL מציין ששדה ברשומה לא יכול להיות ריק, הוא חייב לאחסן ערך כלשהו.

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

כדי לייעל את הביצועים של בסיס הנתונים, נוח לכלול בסוף ההגדרה של הטבלה שדות אחד המשמש כאינדקס עם הסעיף PRIMARY KEY (ID) מזהה הוא השדה שנבחר כאינדקס.

בסוף ההגדרה של טבלה ניתן לציין את מנוע מסד הנתונים איתו היא מנוהלת כערך הפרמטר ENGINE עם הפורמט ENGINE=InnoDB; siendo InnoDB המנוע שנבחר במקרה זה.

צור מסדי נתונים, טבלאות והגדר שדות בהפעלת SQL

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

צור עותקי גיבוי של מסדי נתונים

לאחר הגדרת השרת ומסד הנתונים והטבלאות שלו נוצרו, הכל יהיה מוכן לאחסן את המידע שהתקבל על ידי צמתי ה-IoT. למרות שהמוקד של סדרת מאמרים זו אינו כולל תחזוקה, ישנו נושא ניהולי קריטי אחד שחשוב לטפל בו: גיבויים. מרוב המנהלים, כולל phpMyAdmin y שולחן עבודה של MySQL, ניתן ליצור ולשחזר עותקי גיבוי אך מקובל לכלול אותם בסקריפט שהופך אותם לאוטומטי (כנראה יחד עם התצורה ומסמכים רבים אחרים) כך שיותר נוח להשתמש בכלי MySQLDump, לקוח שהוא בדרך כלל חלק מהתקנה קונבנציונלית של MySQL, או חלופה כזו דומפר נתונים של MySQL מה ההזמנה כוללת? mydumper לעשות את העותק ו myloader כדי לשחזר אותו

MySQLDump

פורמט ההזמנה mysqldump זה מאוד פשוט, צריך רק לציין את שם המשתמש user, סיסמה password ואת מסד הנתונים שברצונך להעתיק או --all-databases כדי לגבות את כל מסדי הנתונים כמו בדוגמה הבאה:

mysqldump --opt --user=pelaez --password=1234 --all-databases > copia.sql

הדוגמה הקודמת יוצרת את המסמך copia.sql המכיל את הפקודות SQL (כלומר טקסט) הדרוש כדי לבנות מחדש את כל מסדי הנתונים. בשמירה בפורמט טקסט, העותק תופס הרבה יותר מהנדרש, ולכן הוא גם נדחס בדרך כלל כדי לחסוך במקום במכשיר שבו הוא מאוחסן.

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

mysql --user=pelaez --password=1234 < copia.sql

דומפר נתונים של MySQL

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

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

--host polaridad.es "polaridad.es" הוא השם של שרת מסד הנתונים
--port 3306 "3306" הוא מספר היציאה שבו השרת מאזין (כברירת מחדל הוא 3306)
--user pelaez "pelaez" הוא שם המשתמש שאיתו גישה למסד הנתונים
--password 1234 "1234" היא הסיסמה של המשתמש שאיתו הגישה למסד הנתונים
--database temperaturas "טמפרטורות" הוא השם של מסד הנתונים שמגובה
--no-locks אל תנעל את מסד הנתונים במהלך ההעתקה (כברירת מחדל הוא ננעל)
--build-empty-files גם להעתיק טבלאות ריקות
--compress-input לדחוס קלט
--compress דחוס את הפלט (הגיבוי שנוצר)

כדי לשחזר את הגיבוי שהושג באמצעות mydumper זה בשימוש myloader אשר משמש בעיקר עם האפשרויות הבאות, אשר חייבות להיכלל באותו סדר מופרדים ברווחים:

--host polaridad.es "polaridad.es" הוא השם של שרת מסד הנתונים
--port 3306 "3306" הוא מספר היציאה שבו השרת מאזין (כברירת מחדל הוא 3306)
--user pelaez "pelaez" הוא שם המשתמש שאיתו גישה למסד הנתונים
--password 1234 "1234" היא הסיסמה של המשתמש שאיתו הגישה למסד הנתונים
--directory=copia_iot «iot_copy» היא התיקיה שבה נמצא העותק שנוצר באמצעותו mydumper
--overwrite-tables להחליף טבלאות גם אם הן כבר קיימות
--verbose 3 "3" היא מידת המידע של התהליך (גבוהה יותר, יותר הודעות)
-C השתמש בדחיסה על זרם הנתונים

המאמר הבא (והאחרון) בסדרה זו מסביר כיצד להשתמש בשפת התכנות PHP כדי לאחסן את המידע המתקבל על ידי מכשירים המחוברים לאינטרנט של הדברים במסדי נתונים עליהם דיברו בטקסט הזה.

לפרסם תגובה

אולי פספסת