সমস্ত ডেটা ইনোডিবি
এটি আপনাকে ডেটার একটি সঠিক পয়েন্ট ইন টাইম স্ন্যাপশট দেবে:
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
--single-transaction
একটি চেকপয়েন্ট তৈরি করে যা আগত পরিবর্তনগুলি গ্রহণ করার সময় ডাম্পটিকে চেকপয়েন্টের আগে সমস্ত ডেটা ক্যাপচার করতে দেয়। আগত পরিবর্তনগুলি ডাম্পের অংশ হয় না। এটি সমস্ত টেবিলের জন্য একই পয়েন্ট ইন সময় নিশ্চিত করে।
--routines
সমস্ত সঞ্চিত পদ্ধতি এবং সঞ্চিত কার্যাদি ডাম্প করে
--triggers
প্রতিটি টেবিলের জন্য সমস্ত ট্রিগার ডাম্প করে
সমস্ত ডেটা মাইআইএসএএম বা মিক্স অফ ইনোডিবি / মাইআইএসএএম
আপনাকে একটি গ্লোবাল রিড লক চাপিয়ে দিতে হবে, মাইএসকিএলডাম করতে হবে এবং গ্লোবাল লকটি প্রকাশ করতে হবে
mysql -uuser -ppass -Ae"FLUSH TABLES WITH READ LOCK; SELECT SLEEP(86400)" &
sleep 5
mysql -uuser -ppass -ANe"SHOW PROCESSLIST" | grep "SELECT SLEEP(86400)" > /tmp/proclist.txt
SLEEP_ID=`cat /tmp/proclist.txt | awk '{print $1}'`
echo "KILL ${SLEEP_ID};" > /tmp/kill_sleep.sql
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
mysql -uuser -ppass -A < /tmp/kill_sleep.sql
একবার চেষ্টা করে দেখো !!!
আপডেট 2012-06-22 08:12 ইডিটি
যেহেতু আপনার কাছে মোট ডেটা <50MB রয়েছে আমার কাছে অন্য একটি বিকল্প রয়েছে। 86400 সেকেন্ডের জন্য গ্লোবাল রিড লকটি ধরে রাখার জন্য ব্যাকগ্রাউন্ডে একটি স্লাইপ কমান্ড প্রবর্তনের পরিবর্তে (24 ঘন্টা) কেবল প্রক্রিয়া আইডি পেতে এবং বাইরে হত্যা করার জন্য, আসুন ওএসের পরিবর্তে মাইএসকিএলে একটি 5 সেকেন্ড টাইমআউট সেট করার চেষ্টা করুন:
SLEEP_TIMEOUT=5
SQLSTMT="FLUSH TABLES WITH READ LOCK; SELECT SLEEP(${SLEEP_TIMEOUT})"
mysql -uuser -ppass -Ae"${SQLSTMT}" &
mysqldump -uuser -ppass --single-transaction --routines --triggers --all-databases > backup_db.sql
এটি খুব ছোট ডাটাবেসের জন্য একটি ক্লিনার এবং সহজ পদ্ধতির।