Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

मेरा डेटाबेस बैकअप स्क्रिप्ट php में काम क्यों नहीं कर रहा है?

यह आपके डेटाबेस को SQL स्क्रिप्ट के रूप में बैकअप करने के लिए काम नहीं करेगा, जब तक कि आपका डेटाबेस केवल एक खिलौना डेटाबेस न हो, "हैलो वर्ल्ड" स्क्रिप्ट के बराबर।

वह स्क्रिप्ट भयावह है। आपको डेटाबेस का बैकअप लेने के लिए इसका उपयोग नहीं करना चाहिए। वह स्क्रिप्ट पहले पोस्ट की जा चुकी है:PHP डेटाबेस डंप स्क्रिप्ट - क्या कोई समस्या है?

  • Mysql_connect() या mysql_queries() के बाद कोई त्रुटि जांच नहीं। आपने शायद गलत पासवर्ड या कुछ और दिया है, लेकिन आपको कभी पता नहीं चलेगा क्योंकि स्क्रिप्ट सत्यापित नहीं करती है कि कनेक्ट सफल रहा।

  • यदि आपके डेटाबेस में कोई NULLs है तो यह सही INSERT स्टेटमेंट नहीं देगा।

  • कैरेक्टर सेट को हैंडल नहीं किया जाता है।

  • Addlashes() उपयुक्त नहीं है डेटा से बचने के लिए।

  • तालिका के नाम सीमित नहीं हैं।

  • विचारों, प्रक्रियाओं, कार्यों या ट्रिगर का बैकअप नहीं लेता है।

  • mysql_query() बफ़र्स परिणाम देते हैं, इसलिए यदि आपके पास हज़ारों पंक्तियों या अधिक वाली तालिका है, तो आप अपनी PHP मेमोरी सीमा को पार कर लेंगे। वास्तव में, स्क्रिप्ट INSERT कथनों की श्रृंखला को एक एकल PHP चर में संयोजित करती है। इसलिए इसके समाप्त होने से पहले, आपके पास आपका संपूर्ण . होगा डेटाबेस को मेमोरी में दर्शाया जाता है।

किसी को भी उस स्क्रिप्ट का उपयोग नहीं करना चाहिए। यह बिल्कुल कचरा है, और मैं इसे हल्के में नहीं कहता।

<स्ट्राइक>mysqldump चलाने के लिए बस shellexec() का उपयोग करें।

@ अलवारो जी विकारियो की एक अच्छी बात है, इस कार्य के लिए आपको PHP का उपयोग करने की कोई आवश्यकता नहीं है। मैं मान रहा था कि आपको PHP स्क्रिप्ट से बैकअप बनाने की आवश्यकता है। यहां बताया गया है कि मैं क्रॉन स्क्रिप्ट से बैकअप कैसे बनाऊंगा:

एक शेल स्क्रिप्ट बनाएं, इसे आप जो चाहें कह सकते हैं, उदा। mymysqldump.sh. यहां बताया गया है कि मैं इसे कैसे लिखूंगा:

:
: ${BACKUP_HOST:="localhost"}
: ${BACKUP_DATABASE:="mydatabase"}
: ${BACKUP_DIR:="/opt/local/var/db/mysql5/backups"}
: ${BACKUP_FILE:="${DATABASE}-`date +%Y%m%d%H%M%S`"}

mysqldump -h ${BACKUP_HOST} ${BACKUP_DATABASE} > ${BACKUP_DIR}/${BACKUP_FILE}

निश्चित रूप से अपने परिवेश के लिए आवश्यक चर के मानों को अनुकूलित करें।

आप देख सकते हैं कि उपयोगकर्ता नाम और पासवर्ड नहीं हैं इस फ़ाइल में। कृपया पासवर्ड को स्क्रिप्ट में सादे पाठ में न डालें ताकि हर कोई उन्हें पढ़ सके। इसके बजाय, हम इसे और अधिक सुरक्षित बनाने के लिए उन्हें एक विकल्प फ़ाइल में डाल देंगे।

एक विशेष ऑपरेटिंग सिस्टम उपयोगकर्ता बनाएं जो क्रॉन से बैकअप चलाने जा रहा है। MySQL सर्वर को चलाने के लिए आपके सिस्टम में एक विशेष उपयोगकर्ता "mysql" या "_mysql" हो सकता है, लेकिन इस उपयोगकर्ता को कोई मान्य होम निर्देशिका नहीं होने के लिए कॉन्फ़िगर किया जा सकता है। आपको ऐसे उपयोगकर्ता की आवश्यकता है जिसके पास होम निर्देशिका हो। चलिए इसे "mybackup" कहते हैं।

उस उपयोगकर्ता की होम निर्देशिका के अंतर्गत, एक फ़ाइल बनाएँ .my.cnf निम्नलिखित सामग्री के साथ:

[mysqldump]
user = alupto_backup
password = xyzzy

जहां "alupto_backup" और "xyzzy" MySQL उपयोगकर्ता नाम और उसका पासवर्ड हैं (इन्हें अपने परिवेश के लिए बदलें)। इस फ़ाइल का स्वामित्व और मोड सेट करें ताकि केवल इसका स्वामी ही इसे पढ़ सके:

chown mybackup .my.cnf
chmod 600 .my.cnf

इस उपयोगकर्ता के घर के नीचे एक बिन निर्देशिका बनाएं और उसमें हमारी शेल स्क्रिप्ट डालें।

mkdir ~mybackup/bin
mv mymysqldump ~mybackup/bin

अब आप इसका परीक्षण करने के लिए शेल स्क्रिप्ट चला सकते हैं:

sh ~mybackup/bin/mymysqldump

अब इस उपयोगकर्ता के लिए एक क्रॉन फ़ाइल बनाएँ:

crontab -u mybackup

@daily ~mybackup/bin/mymysqldump

यही होना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MYSQL में सामान्यीकरण

  2. अल्पविराम के साथ मूल्यों को कैसे सम्मिलित करें? स्विच स्टेटमेंट में

  3. तैयार कथन के साथ MySQL पर LIMIT कीवर्ड

  4. माइस्क्ल के लिए वैग्रांट पोर्ट अग्रेषण

  5. MySQL में डेटाबेस नाम वाइल्डकार्ड के साथ अनुदान दें?