עבודה עם מסד נתונים
-
@clickone אמר בעבודה עם מסד נתונים:
@davidnead
יכול להיות שזה פתוח סלקטיבי.
בשיטה שאני מציע אין בעייה לכאורה.
כי בעצם אתה עושה קריאה ל הרשומות.
רק במקום להציג את זה לHTML או משהו אחר, אתה עושה INSERT עם הנתונים לטבלה אחרת.
זה אמור להיות קוד גנרי קלאסיעדיין לא הבנתי מאיפה ירוץ ולאיפה ישמור. קראת את מה שכתבתי?
-
@clickone אמר בעבודה עם מסד נתונים:
@davidnead
יכול להיות שזה פתוח סלקטיבי.
בשיטה שאני מציע אין בעייה לכאורה.
כי בעצם אתה עושה קריאה ל הרשומות.
רק במקום להציג את זה לHTML או משהו אחר, אתה עושה INSERT עם הנתונים לטבלה אחרת.
זה אמור להיות קוד גנרי קלאסיאני חושב שהבנתי, אך היות שאני נגד לימודי ליבה נראה לי שהאפשרות הראשונה (הרצה על 2, שאיבה מ1 ושמירה על 3) יותר בתחום השגתי.
-
@dovid
כן. קראתי.תסתכל רגע כאן
https://stackoverflow.com/questions/4262876/how-to-copy-database-tables-and-each-record-from-one-database-server-to-another
משהו בסגנון שיש שם.
הוא על שרת מספר 2, פותח 2 קונקשנים.
אחד לשרת הישן (1), והשני לשרת החדש (3).
ואז הוא רץ בלופ על הטבלאות שנמצאות בשרת הישן, ומכניס אותם לחדש.
בדוגמא הזו הוא גם יצר את הטבלאות.
אני חושב שאת הסכמה עדיף לו לקחת משם. כי בטח יש עוד אינדקסים וכו<?php $dbNewDB = 'newdb'; $dbNewUser = 'newroot'; $dbNewUserPswd = 'newpass'; $dbConnect = mysql_connect('localhost', 'root', 'mypassword') or die('Couldn\'t connect to MySql:'.mysql_error()); $dbNewConnect = mysql_connect('localhost', $dbNewUser, $dbNewUserPswd) or die('Couldn\'t connect to MySql:'.mysql_error()); $sqlStatement = "SHOW TABLES FROM olddb"; $result = mysql_query($sqlStatement,$dbConnect) or die('Unable to get tables: '.mysql_error()); while($row = mysql_fetch_row($result)) { //Drop table if exist $sqlStatement = "DROP TABLE IF EXISTS " . $dbNewDB . "." . $row[0]; mysql_query($sqlStatement,$dbNewConnect) or die("Failed to delete: " . mysql_error()); //Create new table $sqlStatement = "CREATE TABLE " . $dbNewDB . "." . $row[0] . " LIKE olddb." . $row[0]; echo "$sqlStatement [" . __METHOD__ . "]"; mysql_query($sqlStatement,$dbNewConnect)or die("Failed to create: ". mysql_error()); //Insert data $sqlStatement = "INSERT INTO " . $dbNewDB . "." . $row[0] . " SELECT * FROM " . $dbNewDB . "." . $row[0]; echo "$sqlStatement [" . __METHOD__ . "]"; mysql_query($sqlStatement,$dbNewConnect)or die("Table copy failed: ".mysql_error()); echo "$row[0] copy done. [" . __METHOD__ . "]"; } mysql_free_result($result); mysql_close($dbConnect); mysql_close($dbNewConnect); ?>
-
@clickone אתה מצליח להפליא אותי. כתבתי פעמיים את הפתרון הזה בדיוק. ולכן אני תמה אם קראת.
ואמרתי על זה שבשביל זה יש להקים שרת SQL ב3, ולפתוח אותו לREMOTE ב2.
ובאותו מחיר של כתיבת כזאת הדרכה אני יכול לכתוב לו איך לפתוח את ה1 לREMOTE למחשב שלו האישי או לשלוש, בלי לעבור ב2 כלל. -
@dovid אמר בעבודה עם מסד נתונים:
@clickone אתה מצליח להפליא אותי. כתבתי פעמיים את הפתרון הזה בדיוק. ולכן אני תמה אם קראת.
ואמרתי על זה שבשביל זה יש להקים שרת SQL ב3, ולפתוח אותו לREMOTE ב2.
ובאותו מחיר של כתיבת כזאת הדרכה אני יכול לכתוב לו איך לפתוח את ה1 לREMOTE למחשב שלו האישי או לשלוש, בלי לעבור ב2 כלל.הבעיה בשני ההצעות, היא שאין לי אפשרות לפתוח את 1 - מאחר שאין לי גישה אליו.
-
@davidnead אמר בעבודה עם מסד נתונים:
@dovid אמר בעבודה עם מסד נתונים:
@clickone אתה מצליח להפליא אותי. כתבתי פעמיים את הפתרון הזה בדיוק. ולכן אני תמה אם קראת.
ואמרתי על זה שבשביל זה יש להקים שרת SQL ב3, ולפתוח אותו לREMOTE ב2.
ובאותו מחיר של כתיבת כזאת הדרכה אני יכול לכתוב לו איך לפתוח את ה1 לREMOTE למחשב שלו האישי או לשלוש, בלי לעבור ב2 כלל.הבעיה בשני ההצעות, היא שאין לי אפשרות לפתוח את 1 - מאחר שאין לי גישה אליו.
יש לך גישת SQL, אם זה root, לא צריך יותר מזה.
-
@dovid עברתי שוב מההתחלה על מה שכתבת.
לא ראיתי הצעה להרצת קוד PHP מהשרת הפתוח והעתקה בריצה פיזית של הרשומות בלופ.
אשמח אם תיתן לינק להודעה הספציפית.
כן ראיתי שהצעת לו לשים את התוכנה של MYSQL.לגבי הפתיחה עכשיו אני רואה.
בכל מקרה לפי מה שהוא כותב, אז ברור שהקוד חייב לעבור ב2.
והוא לא חייב לפתוח גישה מרחוק לMYSQL מ3 ל2 אם הוא מתעקש....
הוא יכול לשים 2 קבצי PHP בשניהם.
וש2 יעשה POST לדף ב3 שיעשה את האינסרט שהוא יעביר לו. (כמובן שאח"כ הוא ימחק את הקבצים בגלל אבטחת מידע ובלה בלה בלה....) -
@dovid אמר בעבודה עם מסד נתונים:
@davidnead אמר בעבודה עם מסד נתונים:
@dovid אמר בעבודה עם מסד נתונים:
@clickone אתה מצליח להפליא אותי. כתבתי פעמיים את הפתרון הזה בדיוק. ולכן אני תמה אם קראת.
ואמרתי על זה שבשביל זה יש להקים שרת SQL ב3, ולפתוח אותו לREMOTE ב2.
ובאותו מחיר של כתיבת כזאת הדרכה אני יכול לכתוב לו איך לפתוח את ה1 לREMOTE למחשב שלו האישי או לשלוש, בלי לעבור ב2 כלל.הבעיה בשני ההצעות, היא שאין לי אפשרות לפתוח את 1 - מאחר שאין לי גישה אליו.
יש לך גישת SQL, אם זה root, לא צריך יותר מזה.
אוקיי, אם ככה כדאי לאמץ את ההצעה הפשוטה יותר. אני מבטיח הצבעה למי שיגלה איך לבצע.
-
@davidnead
אתה נכנס בSSH לשרת מספר 2, ופותח את הכתובת בפיירוול.@davidnead אמר בעבודה עם מסד נתונים:
צריך לעשות פשוט sqldump - שייצא את זה ישר לשרת 3. לא כך?
לכאורה אתה צודק.
אולי אנחנו באמת מחפשים את הכסף מתחת לגשר והוא מתחת לתנור.... -
@clickone אמר בעבודה עם מסד נתונים:
@davidnead
אתה נכנס בSSH לשרת מספר 2, ופותח את הכתובת בפיירוול.@davidnead אמר בעבודה עם מסד נתונים:
צריך לעשות פשוט sqldump - שייצא את זה ישר לשרת 3. לא כך?
לכאורה אתה צודק.
אולי אנחנו באמת מחפשים את הכסף מתחת לגשר והוא מתחת לתנור....נו, אולי נעמיד את זה לפרס ההוא שצריך להמציא מכונה שבכמה שיותר תהליכים תעשה את הדבר הפשוט ביותר.
בכל מקרה, אני חוזר על הצעתי ללייק למי שיספר לי מה הפקודות הדרושות לבצע את זה. הייתי מציע 2 לייקים אבל זה לא עובד פה.
-
@clickone אמר בעבודה עם מסד נתונים:
@davidnead
נתחיל בזה.
תספר מה הידע שלך בSSH / לינוקס (כי אני לא יודע מאיפה להתחיל. מההסבר על SSH או ישר ללכת לFW)
וגם איזו הפצה מותקנת שםמותקן אובנטו, נדמה לי 16.
יודע לגשת בSSH, מכיר קצת פקודות לינוקס, לומד עם הזמן כאשר אני נתקל בפקודה שנצרכת לי. לא משתמש בזה בדרך כלל כדי לעבוד ישירות עם המסד נתונים, אלא עבודה עם קבצים או התקנות.
FW - אין לי ניסיון.
הרווחת כבר לייק. -
@davidnead
זה שרת שלך?
או אתה רק מתחזק אותו?
איפה הוא מתארח? כי יש שרתים שהFW בעצם מנוהל בחווה. (בד"כ אב הוא מנוהל בשרת עצמו)
לדוגמא:
כדי לפתוח כתובת אתה משתמש בiptables -A INPUT -s 1.2.3.4 -j ACCEPT
כש 1.2.3.4 זה הIP של השרת השני (שרת מספר 3 במקרה שלך)
ייתכן שגם על שרת 3 אתה צריך להוסיף כלל לFW אם הוא פתוח.
אחרי שהוספת כלל, צריך לשמורiptables-save
והכי חשוב!!
לגבות לפני את הקובץ/etc/iptables.up.rules
-
@dovid הוא לא מוגבל מול שרת מספר 2.
אחרת הוא לא היה יכול לפנות אליו מפרוייקט הווב שלו בשרת מספר 2.
sqldump ירוץ על שרת מספר 2 וינתב את הקובץ לשרת 3 (אפשר אולי גם לחשוב על יצירת תיקיית רשת בין שרת 2 ל3, כך שזה יהיה שמירה לתיקייה..), ששם יש הרשאות לפנייה.
רק השאלה זה האם יש בשרת מספר 1 רק הרשאה סלקטיבית מול שרת מספר 2. ו-sqldump ייכשל בגיבוי. -
@dovid אמר בעבודה עם מסד נתונים:
@davidnead גש לSSH, ותתחבר לשרת הSQL עם הפקודה mysql, מכיר?
לא. ניסיתי ישר לבצע גיבוי ופקודות שונות משרת 2 לSQL של 1, אבל התחברות רגילה לSQL מרוחק אני לא מכיר.