যদি আপনার সমস্ত ডাটাবেস কেবল ইনোডিবি ব্যবহার করে তবে আমার কাছে কিছু ভাল খবর রয়েছে।
আপনার কোনও গোলামের সমান্তরালে সমস্ত ডাটাবেস ডাম্প করা উচিত।
বাস্তবে, আপনি সমস্ত ডাটাবেসগুলিকে একই পয়েন্ট-ইন-সময়তে বাধ্য করতে পারেন।
স্লেভ সম্পর্কে প্রথমে মনে রাখার বিষয় হ'ল এটি যদি অন্য স্লেভের জন্য মাস্টার না হয় তবে বাইনারি লগিং সক্ষম করার প্রয়োজন হয় না।
--master-data
সমান্তরাল ডাম্পের জন্য আপনি বিকল্পটি ব্যবহার করতে পারবেন না কারণ প্রতিটি ডাম্পের প্রতিটি ডাম্প ফাইলের 22 লাইনে আলাদা আলাদা অবস্থান লেখা থাকবে। মাস্টারের শেষ লগ ফাইলটি রেকর্ড করা এবং স্লেভকে ব্যবহার করে মৃত্যুদন্ড কার্যকর করা ভাল SHOW SLAVE STATUS\G
। এইভাবে, সমস্ত ডাটাবেসের একই পয়েন্ট-ইন-সময় অবস্থান রয়েছে।
আপনি সমস্ত ডাটাবেস সংগ্রহ করতে পারেন এবং সমস্ত ডাটাবেসের সমান্তরাল ডাম্প স্ক্রিপ্ট করতে পারেন।
DBLIST=/tmp/ListOfDatabasesToParallelDump.txt
BACKUP_BASE=/backups
BACKUP_DATE=`date +"%Y%m%d_%H%M%S"`
BACKUP_HOME=${BACKUP_BASE}/${BACKUP_DATE}
mkdir ${BACKUP_HOME}
cd ${BACKUP_HOME}
mysql -h... -u... -p... -e"STOP SLAVE;"
mysql -h... -u... -p... -e"SHOW SLAVE STATUS\G" > ${SSS}
LOGFIL=`cat ${SSS} | grep "Relay_Master_Log_File" | awk '{print $2}'`
LOGPOS=`cat ${SSS} | grep "Exec_Master_Log_Pos" | awk '{print $2}'`
echo "Master was at ${LOGFIL} Position ${LOGPOS} for this Backup" > Master_Log_FilePos.txt
mysql -h... -u... -p... -AN -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql','performance_schema')" > ${DBLIST}
for DB in `cat ${DBLIST}`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
done
wait
mysql -h... -u... -p... -e"START SLAVE;"
যদি খুব বেশি ডেটাবেস থাকে তবে নীচে সেগুলি একবারে 10 বা 20 টি ফেলে দিন:
DBLIST=/tmp/ListOfDatabasesToParallelDump.txt
SSS=/tmp/ShowSlaveStatusDisplay.txt
BACKUP_BASE=/backups
BACKUP_DATE=`date +"%Y%m%d_%H%M%S"`
BACKUP_HOME=${BACKUP_BASE}/${BACKUP_DATE}
mkdir ${BACKUP_HOME}
cd ${BACKUP_HOME}
mysql -h... -u... -p... -e"STOP SLAVE;"
mysql -h... -u... -p... -e"SHOW SLAVE STATUS\G" > ${SSS}
LOGFIL=`cat ${SSS} | grep "Relay_Master_Log_File" | awk '{print $2}'`
LOGPOS=`cat ${SSS} | grep "Exec_Master_Log_Pos" | awk '{print $2}'`
echo "Master was at ${LOGFIL} Position ${LOGPOS} for this Backup" > Master_Log_FilePos.txt
mysql -h... -u... -p... -AN -e"SELECT schema_name FROM information_schema.schemata WHERE schema_name NOT IN ('information_schema','mysql','performance_schema')" > ${DBLIST}
COMMIT_LIMIT=20
COMMIT_COUNT=0
for DB in `cat ${DBLIST}`
do
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} | gzip > ${DB}.sql.gz &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
wait
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
mysql -h... -u... -p... -e"START SLAVE;"
আপনার যদি একটি একক টেবিলটি পুনরুদ্ধার করতে হয় তবে আপনি আকারের ক্রমে 20 টি ডাম্প টেবিলের সমান্তরাল করতে পারেন ।
এটা চেষ্টা কর:
TBLIST=/tmp/ListOfTablesToParallelDump.txt
SSS=/tmp/ShowSlaveStatusDisplay.txt
BACKUP_BASE=/backups
BACKUP_DATE=`date +"%Y%m%d_%H%M%S"`
BACKUP_HOME=${BACKUP_BASE}/${BACKUP_DATE}
mkdir ${BACKUP_HOME}
cd ${BACKUP_HOME}
mysql -h... -u... -p... -e"STOP SLAVE;"
mysql -h... -u... -p... -e"SHOW SLAVE STATUS\G" > ${SSS}
LOGFIL=`cat ${SSS} | grep "Relay_Master_Log_File" | awk '{print $2}'`
LOGPOS=`cat ${SSS} | grep "Exec_Master_Log_Pos" | awk '{print $2}'`
echo "Master was at ${LOGFIL} Position ${LOGPOS} for this Backup" > Master_Log_FilePos.txt
mysql -h... -u... -p... -AN -e"SELECT CONCAT(table_schema,'.',table_name) FROM information_schema.tables WHERE table_schema NOT IN ('information_schema','mysql','performance_schema') ORDER BY data_length" > ${DBLIST}
COMMIT_LIMIT=20
COMMIT_COUNT=0
for DBTB in `cat ${TBLIST}`
do
DB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $1}'`
TB=`echo "${DBTB}" | sed 's/\./ /g' | awk '{print $2}'`
DUMPFILE=$DB-{DB}-TBL-${TB}.sql.gz
mysqldump -h... -u... -p... --hex-blob --routines --triggers ${DB} ${TB} | gzip > ${DUMPFILE} &
(( COMMIT_COUNT++ ))
if [ ${COMMIT_COUNT} -eq ${COMMIT_LIMIT} ]
then
COMMIT_COUNT=0
wait
fi
done
wait
if [ ${COMMIT_COUNT} -gt 0 ]
then
wait
fi
mysql -h... -u... -p... -e"START SLAVE;"
এখন আপনার কাছে ডাটাবেস বা পৃথক টেবিল ডাম্প করার স্ক্রিপ্ট রয়েছে, আপনি নিজের বিবেচনার ভিত্তিতে সেই ডেটা লোড করতে পারেন। আপনার যদি মাস্টারের বাইনারি লগগুলি থেকে এসকিউএলকে কার্যকর করতে হয় তবে আপনি এটি ব্যবহার করতে পারেন mysqlbinlog
এবং এটিকে ওটি ডেটটাইম এবং অন্য পাঠ্য ফাইলগুলিতে এসকিউএল আউটপুট দিতে পারেন। বার্নারি লগগুলির যে টাইমস্ট্যাম্পগুলি রয়েছে তার থেকে আপনার প্রয়োজনীয় পরিমাণের ডেটা খুঁজে পেতে আপনাকে কেবল অধ্যবসায় করতে হবে। কেবল মনে রাখবেন যে ওএসে প্রতিটি বাইনারি লগের টাইমস্ট্যাম্পটি এটি শেষবারের মতো লেখা হয়েছিল।