সমস্ত মাইএসকিউএল ডেটাবেস একসাথে রফতানি এবং আমদানি করুন


353

আমি আমার সমস্ত মাইএসকিউএল ডাটাবেসের একটি ব্যাকআপ রাখতে চাই। আমার 100 টিরও বেশি মাইএসকিউএল ডাটাবেস রয়েছে। আমি একই সাথে তাদের সকলকে রফতানি করতে চাই এবং আবার একবারে আমার মাইএসকিউএল সার্ভারে সেগুলি সমস্ত আমদানি করতে চাই। আমি এটা কিভাবে করবো?

উত্তর:


774

রপ্তানি:

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

1
mysqldump -uroot -p --opt --all-databases> alldb.sql
একটি কোডার

7
mysqldump -uroot -p - সমস্ত ডাটাবেসগুলি - স্কিপ-লক-টেবিলগুলি> alldb.sql
মন্দির

12
কীভাবে ডাম্পটি এগিয়ে চলছে তা দেখতে --verbose বা -v বিকল্প যুক্ত করুন।
বাগনিই

4
মাইসকিल्डম্প ম্যান পৃষ্ঠা থেকে @ হ্যালিলজিগার: "মাইসকিल्ड্প্প তথ্যটি ডিফল্টরূপে ইনফরমেশন_সেচএইএমএ বা পারফরম্যান্স_স্কেমা ডাটাবেস ডাম্প করে না these এগুলির যে কোনও একটি ডাম্প করতে, এটিকে স্পষ্টভাবে কমান্ড লাইনে নাম লিখুন এবং --স্কিপ-লক-সারণী বিকল্পটিও ব্যবহার করুন।"
ম্যামলোন

2
সতর্কতা , আমদানি আপনার বিদ্যমান মাইএসকিউএল ব্যবহারকারীকে ওভাররাইড করবে।
RousseauAlexandre

218

অন্যান্য সমাধান:

এটি প্রতিটি ডাটাবেসকে একটি পৃথক ফাইলে ব্যাক আপ করে

#!/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

3
আমি এই পদ্ধতির পছন্দ করতাম, যেহেতু এটি সমস্ত ডাটাবেসের বিভিন্ন ফাইল হিসাবে ডাম্প করে।
আর্দা

10
আপনি প্রক্রিয়া সহজ করতে / স্ক্রিপ্ট একটু উন্নত করুন: 9 ম লাইন [ডাটাবেস = ...] এই দুই লাইনের প্রতিস্থাপন করুন: ExcludeDatabases="Database|information_schema|performance_schema|mysql"[পরের লাইনে] databases=`-u $USER -p$PASWORD -e "SHOW DATABASES;" | tr -d "| " | egrep -v $ExcludeDatabases`এবং অপসারণ ifএবং fiসম্পূর্ণরূপে লাইন। ভেরিয়েবলটিতে ExcludeDatabasesআপনি ডাটাবেসের নামগুলি সংরক্ষণ করেন যা ফেলা উচিত নয় [সাধারণত সিস্টেম ডাটাবেস]।
পিটার VARGA

2
@ জুরুজাফা আপনি -Bse "show databases"অতিরিক্ত ফরম্যাটিং আউটপুট এড়াতে ব্যবহার করতে পারেন এবং এইভাবে আপনি মুছে ফেলতে পারেন | tr -d "| " | grep -v Database। আমার রফতানি স্ক্রিপ্টে এই লাইনটি হলdatabases=`mysql -u $USER -p$PASSWORD -Bse "SHOW DATABASES;"
মিক্যেল

6
একটি বিপরীত (আমদানি) স্ক্রিপ্ট তৈরি করেছেন: gist.github.com/tenold/aa5e107d93c0f54436cb
কোরি

1
সতর্কতা: @AlBundy দ্বারা খুব দরকারী মন্তব্য উপরে ইউনিকোড অক্ষর ক্রম ধারণ করে U+200C U+200Bমধ্যবর্তী "C" এবং "এইচ" শব্দের "প্রকল্প" -টি । এটি অনুলিপি এবং বিট আটকানো বিট। এই ইস্যুতে এখানে আরও আলোচনা করুন: meta.stackex
بدل.

29

শেল অপারেটরের মধ্যে থাকা কোনও ফাইলের প্রস্থানটি পুনঃনির্দেশের সমস্যার কারণে এই প্রশ্নটিতে আমি যে সমস্ত উত্তর দেখছি তাতে কিছু ডেটাবেজে অক্ষর সেটগুলির সাথে সমস্যা হতে 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;

-আর কি করে?
লুকা রেগেলিন

3
-r গন্তব্য ফাইলের নাম নির্ধারণ করে যেখানে আউটপুট লিখিত থাকবে।
নেটভিচিস

চরিত্রের সেটটির জন্য utf8 এর পরিবর্তে utf8mb4 ব্যবহার করা ভাল?
kojow7

1
আপনি নিজের টেবিলগুলিতে কী সংরক্ষণ করছেন তা নির্ভর করে। utf8 অক্ষর সেট প্রতিটি অক্ষরের জন্য সর্বোচ্চ 3 বাইট আছে। utf8mb4 এর প্রতিটি চরিত্রের জন্য সর্বোচ্চ 4 বাইট রয়েছে। স্পষ্টতই যদি আপনার ডাটাবেসটি utf8mb4 এ থাকে তবে এটি পুনরুদ্ধার করতে আপনার সেই অক্ষর সেটটি ব্যবহার করা উচিত।
নেটভিচিস

9

এই উত্তরের উপর ভিত্তি করে আমি স্ক্রিপ্ট তৈরি করেছি যা সমস্ত ডাটাবেসকে পৃথক ফাইলগুলিতে ব্যাকআপ করে, তবে তারপরে নাম হিসাবে তারিখ সহ একটি সংরক্ষণাগারগুলিতে সেগুলি সংকুচিত করে।

এটি পাসওয়ার্ড চাইবে না, ক্রোন ব্যবহার করা যাবে। পাসওয়ার্ড সংরক্ষণ করতে .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"

1
ভালো যে আপনি নিজের সংযোজন অবদান রাখতে ফিরে এসেছেন। আমার কাছ থেকে একটি ভোট
Fr0zenFyr

7

মাইএসকিএল কমান্ড সরাসরি যা করতে চান তা করতে পারলে কেন বিন্যাসিত আউটপুট পার্সিং করা যায়?

databases=`mysql -u $USER -p$PASSWORD --batch --skip-column-names -e "SHOW DATABASES;" | grep -E -v "(information|performance)_schema"`

ডাটাবেসের নাম এবং কেবল এটিই তালিকাভুক্ত করে।


3

মাইএসকিএল টেবিলগুলির বিভিন্ন কলাম থাকতে পারে বলে বিভিন্ন মাইএসকিউএল সংস্করণ থেকে রফতানি এবং আমদানি করার সময় সাবধান হন। আপনার ভাগ্যের বাইরে থাকলে অনুদানের সুযোগগুলি কাজ করতে ব্যর্থ হতে পারে। আমি এই স্ক্রিপ্টটি তৈরি করেছি (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'

3

আপনি যখন সমস্ত ডাটাবেস ডাম্প করা হয়। স্পষ্টতই এটির বড় ডেটা রয়েছে। সুতরাং আপনি নীচে আরও ভাল পছন্দ করতে পারেন:

ব্যাকআপ তৈরি করা হচ্ছে:

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]

আশা করি এটি সাহায্য করবে :)


3

আমি এই মন্তব্যটি ইতিমধ্যে 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

বিঃদ্রঃ:

  1. বাদ দেওয়া ডাটাবেসগুলি - প্রচলিতভাবে সিস্টেম টেবিলগুলি ভেরিয়েবলের মধ্যে সরবরাহ করা হয় ExcludeDatabases
  2. দয়া করে সচেতন হন যে পাসওয়ার্ডটি কমান্ড লাইনে সরবরাহ করা হয়েছে। এটি অনিরাপদ হিসাবে বিবেচিত হয়। এই প্রশ্নটি অধ্যয়ন করুন ।

0

mysqldump -uroot -proot --all-databases> allDB.sql

দ্রষ্টব্য: - "আপনার ব্যবহারকারী নাম" -p "আপনার পাসওয়ার্ড"


আপনার উত্তরটি সমস্যাটি সত্যিই সমাধান করে না, কারণ তিনি একবারে সমস্ত ডাটাবেস রফতানি করতে বলছেন। হতে পারে আপনি কিছুটা উন্নতি করতে পারেন: mysqldump -uroot -proot --all-databases> allDB.sql নোট: -u "আপনার ব্যবহারকারীর নাম" -p "আপনার পাসওয়ার্ড"
মারওয়ান সেলিম

0

উবুন্টুতে সমস্ত ডাটাবেস রফতানি করুন

1 - mysqldump -u root -p --databases database1 database2 > ~/Desktop/databases_1_2.sql

অথবা

2 - mysqldump -u root -p --all_databases > ~/Desktop/all_databases.sql

এখানে চিত্র বর্ণনা লিখুন

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.