הבדלים בין גרסאות בדף "אגרונט לייב באינטרנט"

מתוך אגרון - וויקיפדיה
קפיצה אל: ניווט, חיפוש
(העברת המידע מהאקסס ל-mysql)
שורה 5: שורה 5:
  
 
ניכנס ל-mysql שהתקנו באמצעות שורת הפקודה:
 
ניכנס ל-mysql שהתקנו באמצעות שורת הפקודה:
<pre>
+
<highlightSyntax language="bash">mysql -u root -p</highlightSyntax>
mysql -u root -p
 
</pre>
 
 
ניצור database שישמש גם את הלקוח וגם את האגרונט:
 
ניצור database שישמש גם את הלקוח וגם את האגרונט:
<pre>
+
<highlightSyntax language="mysql">CREATE DATABASE lib_data_user;</highlightSyntax>
CREATE DATABASE lib_data_user;
 
</pre>
 
 
לאחר מכן, כדי להתחבר משרת האגרונט ללקוח צריך לאפשר זאת ב-mysql של הלקוח:
 
לאחר מכן, כדי להתחבר משרת האגרונט ללקוח צריך לאפשר זאת ב-mysql של הלקוח:
<pre>
+
<highlightSyntax language="mysql">GRANT ALL ON lib_data.* TO lib_data_user@62.90.134.171 IDENTIFIED BY 'PASSWORD';</highlightSyntax>
GRANT ALL ON lib_data.* TO lib_data_user@62.90.134.171 IDENTIFIED BY 'PASSWORD';
 
</pre>
 
 
{{תיבת שים לב|יש לאפשר חיבור מהאגרונט (www.library.org.il) לשרת ה-mysql אצל הלקוח. לכן, יש לפתוח את פורט 3306 שמשמש את ה-mysql}}
 
{{תיבת שים לב|יש לאפשר חיבור מהאגרונט (www.library.org.il) לשרת ה-mysql אצל הלקוח. לכן, יש לפתוח את פורט 3306 שמשמש את ה-mysql}}
 
לאחר מכן, נבדוק אם הגדרנו זאת כהלכה. נריץ את הפקודה הבאה משרת האגרונט:
 
לאחר מכן, נבדוק אם הגדרנו זאת כהלכה. נריץ את הפקודה הבאה משרת האגרונט:
<pre>
+
<highlightSyntax language="bash">mysql -h remote_host -u lib_data_user -Ap lib_data -p</highlightSyntax>
mysql -h remote_host -u lib_data_user -Ap lib_data -p
 
</pre>
 
  
 
== יצירת טבלאות ==
 
== יצירת טבלאות ==
  
 
לאחר מכן נצטרך ליצור את שלושת הטבלאות שדרושים לשיטה זו:
 
לאחר מכן נצטרך ליצור את שלושת הטבלאות שדרושים לשיטה זו:
<pre>
+
<highlightSyntax language="mysql">CREATE TABLE `Loans` (
CREATE TABLE `Loans` (
 
 
   `ID` int(11) NOT NULL AUTO_INCREMENT,
 
   `ID` int(11) NOT NULL AUTO_INCREMENT,
 
   `card_no` int(11) DEFAULT NULL,
 
   `card_no` int(11) DEFAULT NULL,
שורה 70: שורה 61:
 
   KEY `reader_no` (`reader_no`),
 
   KEY `reader_no` (`reader_no`),
 
   KEY `reserve_date` (`reserve_date`)
 
   KEY `reserve_date` (`reserve_date`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
+
) ENGINE=MyISAM DEFAULT CHARSET=utf8;</highlightSyntax>
</pre>
 
 
{{תיבת שים לב|ניתן להריץ את הפקודות גם מהלקוח וגם משרת האגרונט. האחרון בגלל ההרשאה שנתנו בהתחלה.}}
 
{{תיבת שים לב|ניתן להריץ את הפקודות גם מהלקוח וגם משרת האגרונט. האחרון בגלל ההרשאה שנתנו בהתחלה.}}
  
שורה 81: שורה 71:
  
 
נצטרך לשנות את 3 הטבלאות שיצרנו לשם חדש עם prefix כמו של ה-subdomain של האתר (לדוגמא, ה-prefix של אתר יקנעם הינו yoqneam). הפקודה הבאה תעשה לנו את העבודה:
 
נצטרך לשנות את 3 הטבלאות שיצרנו לשם חדש עם prefix כמו של ה-subdomain של האתר (לדוגמא, ה-prefix של אתר יקנעם הינו yoqneam). הפקודה הבאה תעשה לנו את העבודה:
<pre>
+
<highlightSyntax language="mysql">RENAME TABLE Loans TO foo_Loans;
RENAME TABLE Loans TO foo_Loans;
 
 
RENAME TABLE LoansHistory TO foo_LoansHistory;
 
RENAME TABLE LoansHistory TO foo_LoansHistory;
RENAME TABLE Reservations TO foo_Reservations;
+
RENAME TABLE Reservations TO foo_Reservations;</highlightSyntax>
</pre>
 
 
foo הינו ה-subdomain של האתר.
 
foo הינו ה-subdomain של האתר.
 
== עדכון התוכנה אצל הלקוחות ==
 
== עדכון התוכנה אצל הלקוחות ==
שורה 92: שורה 80:
 
== יצירת טריגרים ==
 
== יצירת טריגרים ==
 
ניצור טריגרים שיעזרו לנו ליצור database "חי" באגרונט. בשביל הטריגרים נצטרך לייבא את הטבלה copies מה-lib_data (רק לייבא) בעזרת ה-tool שהוזכר קודם (MS Access to MySQL). יצירת הטריגרים מתבצעת כדלקמן:
 
ניצור טריגרים שיעזרו לנו ליצור database "חי" באגרונט. בשביל הטריגרים נצטרך לייבא את הטבלה copies מה-lib_data (רק לייבא) בעזרת ה-tool שהוזכר קודם (MS Access to MySQL). יצירת הטריגרים מתבצעת כדלקמן:
<pre>
+
<highlightSyntax language="mysql">CREATE TRIGGER update_loan_copy_status_on_insert  
CREATE TRIGGER update_loan_copy_status_on_insert AFTER INSERT ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 2 WHERE copies.copy_no = NEW.copy_no;
+
AFTER INSERT ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 2  
CREATE TRIGGER update_loan_copy_status_on_delete AFTER DELETE ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 1 WHERE copies.copy_no = OLD.copy_no;
+
WHERE copies.copy_no = NEW.copy_no;
 +
 
 +
CREATE TRIGGER update_loan_copy_status_on_delete  
 +
AFTER DELETE ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 1  
 +
WHERE copies.copy_no = OLD.copy_no;
 +
 
 
DELIMITER |
 
DELIMITER |
CREATE TRIGGER update_reservation_time_on_insert BEFORE INSERT ON foo_Reservations FOR EACH ROW IF (NEW.reserve_date IS NULL) THEN SET NEW.reserve_date = NOW; END IF;|  
+
 
DELIMITER ;
+
CREATE TRIGGER update_reservation_time_on_insert  
</pre>
+
BEFORE INSERT ON foo_Reservations FOR EACH ROW  
 +
IF (NEW.reserve_date IS NULL) THEN SET NEW.reserve_date = NOW; END IF;|  
 +
 
 +
DELIMITER ;</highlightSyntax>
 
{{תיבת שים לב|לטריגר האחרון נצטרך לשנות את ה-delimeter (כפי שניתן לראות בפקודות).}}
 
{{תיבת שים לב|לטריגר האחרון נצטרך לשנות את ה-delimeter (כפי שניתן לראות בפקודות).}}
  

גרסה מ־17:11, 16 באפריל 2010

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

התקנת mysql

כדי לעבוד בצורה זאת, כך שה-db של הלקוח יעבוד עם שרת האגרונט יש לבצע מספר פעולות ליצירת השיתוף. נצטרך ליצור אצל הלקוח mysql שניתן להורידו מאתר mysql. צריך להתקין את ה-mysql אצל הלקוח במחשב שעובד 24/7.

ניכנס ל-mysql שהתקנו באמצעות שורת הפקודה: <highlightSyntax language="bash">mysql -u root -p</highlightSyntax> ניצור database שישמש גם את הלקוח וגם את האגרונט: <highlightSyntax language="mysql">CREATE DATABASE lib_data_user;</highlightSyntax> לאחר מכן, כדי להתחבר משרת האגרונט ללקוח צריך לאפשר זאת ב-mysql של הלקוח: <highlightSyntax language="mysql">GRANT ALL ON lib_data.* TO lib_data_user@62.90.134.171 IDENTIFIED BY 'PASSWORD';</highlightSyntax>

שימו לב: יש לאפשר חיבור מהאגרונט (www.library.org.il) לשרת ה-mysql אצל הלקוח. לכן, יש לפתוח את פורט 3306 שמשמש את ה-mysql

לאחר מכן, נבדוק אם הגדרנו זאת כהלכה. נריץ את הפקודה הבאה משרת האגרונט: <highlightSyntax language="bash">mysql -h remote_host -u lib_data_user -Ap lib_data -p</highlightSyntax>

יצירת טבלאות

לאחר מכן נצטרך ליצור את שלושת הטבלאות שדרושים לשיטה זו: <highlightSyntax language="mysql">CREATE TABLE `Loans` (

 `ID` int(11) NOT NULL AUTO_INCREMENT,
 `card_no` int(11) DEFAULT NULL,
 `copy_no` int(11) DEFAULT NULL,
 `date_borrowed` datetime NOT NULL,
 `date_returned` datetime DEFAULT NULL,
 `date_promise` datetime DEFAULT NULL,
 `ismanuy` tinyint(4) DEFAULT '0',
 PRIMARY KEY (`ID`),
 UNIQUE KEY `card_no_2` (`card_no`,`copy_no`,`date_borrowed`),
 KEY `card_no` (`card_no`),
 KEY `copy_no` (`copy_no`),
 KEY `date_borrowed` (`date_borrowed`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `LoansHistory` (

 `ID` int(11) NOT NULL,
 `card_no` int(11) DEFAULT NULL,
 `copy_no` int(11) DEFAULT NULL,
 `date_borrowed` datetime NOT NULL,
 `date_returned` datetime DEFAULT NULL,
 `date_promise` datetime DEFAULT NULL,
 `ismanuy` int(11) DEFAULT NULL,
 PRIMARY KEY (`ID`),
 UNIQUE KEY `card_no_2` (`card_no`,`copy_no`,`date_borrowed`),
 KEY `card_no` (`card_no`),
 KEY `copy_no` (`copy_no`),
 KEY `date_borrowed` (`date_borrowed`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;

CREATE TABLE `Reservations` (

 `res_no` int(11) NOT NULL AUTO_INCREMENT,
 `reader_no` int(11) NOT NULL,
 `title_no` int(11) NOT NULL,
 `By_copy` int(11) DEFAULT NULL,
 `reserve_date` datetime DEFAULT NULL,
 `DeadLineDate` datetime DEFAULT NULL,
 `ExpireDate` datetime DEFAULT NULL,
 `SendEmail` tinyint(4) DEFAULT NULL,
 PRIMARY KEY (`res_no`),
 UNIQUE KEY `reader_no_2` (`reader_no`,`title_no`),
 KEY `title_no` (`title_no`),
 KEY `reader_no` (`reader_no`),
 KEY `reserve_date` (`reserve_date`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8;</highlightSyntax>

שימו לב: ניתן להריץ את הפקודות גם מהלקוח וגם משרת האגרונט. האחרון בגלל ההרשאה שנתנו בהתחלה.

העברת המידע מהאקסס ל-mysql

עכשיו תוכל להעביר את ה-data אל הטבלאות מה-lib_data.mdb של הלקוח לטבלאות הנ"ל (מומלץ לעשות זאת אצל הלקוח). ניתן לעשות זאת באמצעות MS Access to MySQL. הכלי הינו gui וקל לתפעול.

אזהרה: יש להעביר את המידע מהטבלאות ולא את מבנה הטבלאות!

שינוי שמות הטבלאות

נצטרך לשנות את 3 הטבלאות שיצרנו לשם חדש עם prefix כמו של ה-subdomain של האתר (לדוגמא, ה-prefix של אתר יקנעם הינו yoqneam). הפקודה הבאה תעשה לנו את העבודה: <highlightSyntax language="mysql">RENAME TABLE Loans TO foo_Loans; RENAME TABLE LoansHistory TO foo_LoansHistory; RENAME TABLE Reservations TO foo_Reservations;</highlightSyntax> foo הינו ה-subdomain של האתר.

עדכון התוכנה אצל הלקוחות

יש ליצור קישור מה-lib_data ל-mysql אצל הלקוח לטבלאות החדשות, כאשר השמות של הטבלאות באקסס הן ללא ה-prefix (אבל מצביעות לטבלאות עם prefix). בנוסף, נעדכן את יחסי הגומלין של הטבלאות וכמו כן ניצור קישור בין lib_appml.mdb ל-mysql (ללא צורך בעדכון הקשרי גומלין ב-lib_appml).

יצירת טריגרים

ניצור טריגרים שיעזרו לנו ליצור database "חי" באגרונט. בשביל הטריגרים נצטרך לייבא את הטבלה copies מה-lib_data (רק לייבא) בעזרת ה-tool שהוזכר קודם (MS Access to MySQL). יצירת הטריגרים מתבצעת כדלקמן: <highlightSyntax language="mysql">CREATE TRIGGER update_loan_copy_status_on_insert AFTER INSERT ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 2 WHERE copies.copy_no = NEW.copy_no;

CREATE TRIGGER update_loan_copy_status_on_delete AFTER DELETE ON foo_Loans FOR EACH ROW UPDATE copies SET copies.status = 1 WHERE copies.copy_no = OLD.copy_no;

DELIMITER |

CREATE TRIGGER update_reservation_time_on_insert BEFORE INSERT ON foo_Reservations FOR EACH ROW IF (NEW.reserve_date IS NULL) THEN SET NEW.reserve_date = NOW; END IF;|

DELIMITER ;</highlightSyntax>

שימו לב: לטריגר האחרון נצטרך לשנות את ה-delimeter (כפי שניתן לראות בפקודות).

יצירת סקריפט יבוא לעותקים

בשביל שיופיעו העותקים החדשים עם סטטוס מעודכן, נריץ סקריפט אוטומטי שייבא באופן אוטומטי פעם ביום את הטבלה copies מה-lib_data אל ה-mysql. מבצעים זאת בעזרת MS Access to MySQL.

ראה גם