আমি আমার সমস্ত মাইএসকিউএল ডাটাবেসের একটি ব্যাকআপ রাখতে চাই। আমার 100 টিরও বেশি মাইএসকিউএল ডাটাবেস রয়েছে। আমি একই সাথে তাদের সকলকে রফতানি করতে চাই এবং আবার একবারে আমার মাইএসকিউএল সার্ভারে সেগুলি সমস্ত আমদানি করতে চাই। আমি এটা কিভাবে করবো?
আমি আমার সমস্ত মাইএসকিউএল ডাটাবেসের একটি ব্যাকআপ রাখতে চাই। আমার 100 টিরও বেশি মাইএসকিউএল ডাটাবেস রয়েছে। আমি একই সাথে তাদের সকলকে রফতানি করতে চাই এবং আবার একবারে আমার মাইএসকিউএল সার্ভারে সেগুলি সমস্ত আমদানি করতে চাই। আমি এটা কিভাবে করবো?
উত্তর:
mysqldump -u root -p --all-databases > alldb.sql
দেখুন mysqldump ডকুমেন্টেশন । আপনি মন্তব্যগুলিতে উল্লিখিত কয়েকটি বিকল্প ব্যবহার করতে পারেন:
mysqldump -u root -p --opt --all-databases > alldb.sql
mysqldump -u root -p --all-databases --skip-lock-tables > alldb.sql
mysql -u root -p < alldb.sql
অন্যান্য সমাধান:
এটি প্রতিটি ডাটাবেসকে একটি পৃথক ফাইলে ব্যাক আপ করে
#!/bin/bash
USER="zend"
PASSWORD=""
#OUTPUT="/Users/rabino/DBs"
#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
echo "Dumping database: $db"
mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql
# gzip $OUTPUT/`date +%Y%m%d`.$db.sql
fi
done
ExcludeDatabases="Database|information_schema|performance_schema|mysql"
[পরের লাইনে] databases=`-u $USER -p$PASWORD -e "SHOW DATABASES;" | tr -d "| " | egrep -v $ExcludeDatabases`
এবং অপসারণ if
এবং fi
সম্পূর্ণরূপে লাইন। ভেরিয়েবলটিতে ExcludeDatabases
আপনি ডাটাবেসের নামগুলি সংরক্ষণ করেন যা ফেলা উচিত নয় [সাধারণত সিস্টেম ডাটাবেস]।
-Bse "show databases"
অতিরিক্ত ফরম্যাটিং আউটপুট এড়াতে ব্যবহার করতে পারেন এবং এইভাবে আপনি মুছে ফেলতে পারেন | tr -d "| " | grep -v Database
। আমার রফতানি স্ক্রিপ্টে এই লাইনটি হলdatabases=`mysql -u $USER -p$PASSWORD -Bse "SHOW DATABASES;"
U+200C U+200B
মধ্যবর্তী "C" এবং "এইচ" শব্দের "প্রকল্প" -টি । এটি অনুলিপি এবং বিট আটকানো বিট। এই ইস্যুতে এখানে আরও আলোচনা করুন: meta.stackex
শেল অপারেটরের মধ্যে থাকা কোনও ফাইলের প্রস্থানটি পুনঃনির্দেশের সমস্যার কারণে এই প্রশ্নটিতে আমি যে সমস্ত উত্তর দেখছি তাতে কিছু ডেটাবেজে অক্ষর সেটগুলির সাথে সমস্যা হতে mysqldump
পারে >
।
এই সমস্যাটি সমাধান করার জন্য আপনাকে এই জাতীয় কমান্ড দিয়ে ব্যাকআপ করা উচিত
mysqldump -u root -p --opt --all-databases -r backup.sql
অক্ষর সেটগুলির কোনও সমস্যা ছাড়াই একটি ভাল বিডি পুনরুদ্ধার করতে। অবশ্যই আপনার প্রয়োজন অনুসারে আপনি ডিফল্ট-চরিত্র-সেটটি পরিবর্তন করতে পারেন।
mysql -uroot -p --default-character-set=utf8
mysql> SET names 'utf8';
mysql> SOURCE backup.sql;
এই উত্তরের উপর ভিত্তি করে আমি স্ক্রিপ্ট তৈরি করেছি যা সমস্ত ডাটাবেসকে পৃথক ফাইলগুলিতে ব্যাকআপ করে, তবে তারপরে নাম হিসাবে তারিখ সহ একটি সংরক্ষণাগারগুলিতে সেগুলি সংকুচিত করে।
এটি পাসওয়ার্ড চাইবে না, ক্রোন ব্যবহার করা যাবে। পাসওয়ার্ড সংরক্ষণ করতে .my.cnf
এই উত্তরটি দেখুন https://serverfault.com/a/143587/62749
যারা বাশ স্ক্রিপ্টগুলির সাথে খুব বেশি পরিচিত নন তাদের জন্য মন্তব্যেও তৈরি করুন।
#!/bin/bash
# This script will backup all mysql databases into
# compressed file named after date, ie: /var/backup/mysql/2016-07-13.tar.bz2
# Setup variables used later
# Create date suffix with "F"ull date format
suffix=$(date +%F)
# Retrieve all database names except information schemas. Use sudo here to skip root password.
dbs=$(sudo mysql --defaults-extra-file=/root/.my.cnf --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema")
# Create temporary directory with "-d" option
tmp=$(mktemp -d)
# Set output dir here. /var/backups/ is used by system,
# so intentionally used /var/backup/ for user backups.
outDir="/var/backup/mysql"
# Create output file name
out="$outDir/$suffix.tar.bz2"
# Actual script
# Check if output directory exists
if [ ! -d "$outDir" ];then
# Create directory with parent ("-p" option) directories
sudo mkdir -p "$outDir"
fi
# Loop through all databases
for db in $dbs; do
# Dump database to temporary directory with file name same as database name + sql suffix
sudo mysqldump --defaults-extra-file=/root/.my.cnf --databases "$db" > "$tmp/$db.sql"
done
# Go to tmp dir
cd $tmp
# Compress all dumps with bz2, discard any output to /dev/null
sudo tar -jcf "$out" * > "/dev/null"
# Cleanup
cd "/tmp/"
sudo rm -rf "$tmp"
মাইএসকিএল টেবিলগুলির বিভিন্ন কলাম থাকতে পারে বলে বিভিন্ন মাইএসকিউএল সংস্করণ থেকে রফতানি এবং আমদানি করার সময় সাবধান হন। আপনার ভাগ্যের বাইরে থাকলে অনুদানের সুযোগগুলি কাজ করতে ব্যর্থ হতে পারে। আমি এই স্ক্রিপ্টটি তৈরি করেছি (mysql_export_grants.sql) কেবল নতুন ক্ষেত্রে, নতুন ডাটাবেসে আমদানির জন্য অনুদানগুলি ডাম্প করার জন্য:
#!/bin/sh
stty -echo
printf 'Password: ' >&2
read PASSWORD
stty echo
printf "\n"
if [ -z "$PASSWORD" ]; then
echo 'No password given!'
exit 1
fi
MYSQL_CONN="-uroot -p$PASSWORD"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g'
আপনি যখন সমস্ত ডাটাবেস ডাম্প করা হয়। স্পষ্টতই এটির বড় ডেটা রয়েছে। সুতরাং আপনি নীচে আরও ভাল পছন্দ করতে পারেন:
ব্যাকআপ তৈরি করা হচ্ছে:
mysqldump -u [user] -p[password]--single-transaction --quick --all-databases | gzip > alldb.sql.gz
যদি ত্রুটি
- সতর্কতা: সারণী mysql.event এর ডেটা এড়ানো হচ্ছে। --Events বিকল্পটি স্পষ্টভাবে উল্লেখ করুন।
ব্যবহার করুন:
mysqldump -u [user] -p --events --single-transaction --quick --all-databases | gzip > alldb.sql.gz
ব্যাকআপ পুনরুদ্ধার:
gunzip < alldb.sql.gz | mysql -u [user] -p[password]
আশা করি এটি সাহায্য করবে :)
আমি এই মন্তব্যটি ইতিমধ্যে 4 বছরেরও বেশি আগে লিখেছি এবং এখনই উত্তরটি দেওয়ার সিদ্ধান্ত নিয়েছি।
স্ক্রিপ্ট থেকে jruzafa একটু সরলীকৃত করা যেতে পারে:
#!/bin/bash
USER="zend"
PASSWORD=""
#OUTPUT="/Users/rabino/DBs"
#rm "$OUTPUTDIR/*gz" > /dev/null 2>&1
ExcludeDatabases="Database|information_schema|performance_schema|mysql"
databases=`mysql -u $USER -p$PASSWORD -e "SHOW DATABASES;" | tr -d "| " | egrep -v $ExcludeDatabases`
for db in $databases; do
echo "Dumping database: $db"
mysqldump -u $USER -p$PASSWORD --databases $db > `date +%Y%m%d`.$db.sql
# gzip $OUTPUT/`date +%Y%m%d`.$db.sql
done
বিঃদ্রঃ:
ExcludeDatabases
mysqldump -uroot -proot --all-databases> allDB.sql
দ্রষ্টব্য: - "আপনার ব্যবহারকারী নাম" -p "আপনার পাসওয়ার্ড"
উবুন্টুতে সমস্ত ডাটাবেস রফতানি করুন
1 - mysqldump -u root -p --databases database1 database2 > ~/Desktop/databases_1_2.sql
অথবা
2 - mysqldump -u root -p --all_databases > ~/Desktop/all_databases.sql