বিভিন্ন নামের সাথে মাইএসকিএল ডাটাবেস পুনরুদ্ধার করুন


41

আমরা কীভাবে মাইএসকিএলডাম্প ফাইল থেকে আলাদা নামের সাথে মাইএসকিএল ডাটাবেস পুনরুদ্ধার করতে পারি। আমি ডাম্প ফাইলটি খুলতে এবং এটি সম্পাদনা করতে চাই না। অন্য কোন ভাল পদ্ধতি?

উত্তর:


58

আপনি mysqldump কে এমনভাবে ডাম্প তৈরি করতে দিতে পারেন যাতে এটি ডেটাবেস তৈরি বা নির্বাচন না করে।

উদাহরণ: আপনি ডাটাবেস db1 ডাম্প করছেন এবং এটি ডাটাবেস db2 এ লোড করছেন

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

mysqldump -u... -p... --routines --triggers --databases db1 > /root/db1.sql

এই করা হবে না তৈরি ডাটাবেস এবং ডাম্প ব্যবহারের কমান্ড রাখা ( এই হল আপনি যা চান তা )

mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql

আপনি এটিকে চারটি (4) উপায়ে একটি অন্য ডাটাবেসে (যেমন db2) লোড করতে পারেন:

বিকল্প 1

$ mysqldump -u... -p... --routines --triggers db1 | mysql -u... -p... -A -Ddb2

বিকল্প 2

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2 < /root/db1.sql

বিকল্প 3

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A -Ddb2
mysql> source /root/db1.sql

বিকল্প 4

$ mysqldump -u... -p... --routines --triggers db1 > /root/db1.sql
$ mysql -u... -p... -A
mysql> use db2
mysql> source /root/db1.sql

একবার চেষ্টা করে দেখো !!!


অন্য কেউ যদি এর সাথে লড়াই করে তবে তার -Ddb2সামনে হাইফেন থাকা উচিত নয়। অন্তত, আমি এটি অন্তর্ভুক্ত করার সময় একটি মাইএসকিউএল সিন্ট্যাক্স ত্রুটি পেয়েছি।
gwg

এটি কাজ করে না বলে মনে হচ্ছে। আমার ডাম্পের একটি তৈরি বা ব্যবহারের উপাত্ত নেই, তবে এটিতে এখনও আছে ALTER DATABASE ... CHARACTER SET ...যা আমার আমদানি ভঙ্গ করছে। সম্পাদনা করুন: ওরাকল মূলত বাগটি উপেক্ষা করছে
এমপেন

5

আমি ডাম্প, এডিট এবং সন্নিবেশ করানোর একটি বড় অনুরাগী। তবে এটি পরিবর্তন করতে আপনাকে পাঠ্য ফাইল (ডাম্প ফাইল) খুলতে হবে না (এটি বেশ কয়েকটি মিলিয়ন লাইনের দীর্ঘ হলে এটি বিশেষত কার্যকর)। আপনি যদি ডাটাবেস ডাম্প করতে চান MYDATABASE

mysqldump MYDATABASE > mydump.sql

তারপরে পুরানো ডাটাবেসের নামটিকে নতুনটির মতো প্রতিস্থাপন করতে সেড ব্যবহার করুন

sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql

তারপরে আপনি কেবল নতুন ডাটাবেসটি তৈরি করতে পারেন এবং এটি আবার আমদানি করতে পারবেন এবং এটি নতুন ডাটাবেই সমস্ত টেবিল তৈরি করবে MYNEWDATABASE '

mysqladmin create MYNEWDATABASE

mysql MYNEWDATABASE < mydump.sql

সম্পাদনা করুন: মতামত বিভাগের কিছু চমৎকার লোকেরা যেমন উল্লেখ করেছে, এটি বিপজ্জনক হতে পারে, যদি উপরের কিছু উপাত্তও এর দ্বারা পরিবর্তিত হয়, সুতরাং এটি এড়ানোর জন্য কংক্রিটের উপায়গুলি।

1) আপনি এটি পরিবর্তন করার আগে ডাম্পের জন্য এটি গ্রেপ করুন change

cat mydump.sql | grep "MYDATABASE"

এবং

2) এটিকে আরও নিরাপদ করতে আমরা কিছু যোগ করতে পারি:

sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql

অন্য কারও কাছে যদি সুনির্দিষ্ট পরামর্শ থাকে তবে আমি আরও 4 বছরের মধ্যে আমার উত্তর সম্পাদনা করে খুশি।


আমি মনে করি যে প্রশ্নটি একটি এনট্রি ডাটাবেস পুনরুদ্ধার সম্পর্কে ছিল তবে একটি ভিন্ন নামের সাথে, কেবল একটি বিদ্যমান ডিবিতে একটি সারণী অনুলিপি করা নয়।
মাইকেল সবুজ


10
এই আদেশটি একটি খারাপ ধারণা এবং আমি যদি ভোট দিতে পারি তবে আমি ভোটটি নামিয়ে দেব। আপনি যদি স্ট্রিং প্রতিস্থাপনের জন্য যাচ্ছেন তবে কমপক্ষে টেবিলটি তৈরি করুন এবং ব্যবহার করুন লাইনের সাথে মিল করুন যাতে আপনি অন্য কোনও ডেটা প্রতিস্থাপন করবেন না।
bksunday

1
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sqlসেড কমান্ড চালানোর আগে ( ) cat mydump.sql | grep "MYDATABASE"কেবলমাত্র ডাটাবেসের নাম পরিবর্তন হয়েছে কিনা তা নিশ্চিত করার জন্য মায়াডাটাবেসের সমস্ত ঘটনা পরীক্ষা করে দেখুন , অন্যান্য ডেটা অপরিচ্ছন্ন থেকে যায়।
রাফাফ তাহসিন

1
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql # সম্ভাব্য সুরক্ষিত বাষ্প সম্পাদনা। আমার ডাটাবেস ডাম্পে কোনও ব্যবহার বা ক্রিয়েট ডেটাবেস স্টেটমেন্ট থাকে না, তবে ডিবি নামটি স্কয়ার মন্তব্য, ভিউ এবং ট্রিগারগুলিতে থাকে (মাইএসকিউএল 5.7)। এটি মন্তব্যে ডাটাবেসের নামটি প্রতিস্থাপন করে না, তবে ফলাফল ডাটাবেসের উপর তাদের কোনও প্রভাব নেই। এটি আমার পক্ষে ভাল কাজ করেছে।
জোনাথন

3

আমি এটি অনেক আগে করেছি।

আপনি যখন আপনার সমস্ত ডেটা রফতানি করেন, তখন ফাইলের সূচনায় ডাটাবেসের নাম সেট করার একটি বিকল্প থাকে, এটি কিছু: "ডাটাবেস এক্স ব্যবহার করুন"

সুতরাং, আপনি এই ঘোষণাটি পরিবর্তন করতে পারেন।


3

তুমি কি হাতে থাকে তাহলে ফাইল এবং আপনি একটি শেল / কনসোল থেকে কাজে লাগাতে হয়, আমি ব্যবহার করেন sedদিয়ে শুরু লাইন স্ট্রিং প্রতিস্থাপন করতে CREATE DABATASE, CREATE TABLE, USEএবং optionnally --(mysqldump মন্তব্য)

ডেটাবেস তৈরি করুন, সারণী তৈরি করুন, ব্যবহার করুন এবং মাইএসকিডল্প মন্তব্যগুলির সাথে মেলে এমন লাইনে ডিবি নামটি প্রতিস্থাপন করা

dbfile="yoursqldumpfile.sql";
dbname="current_db_name";
dbnewname="new_db_name";
dbnewfile="/tmp/$dbnewname.sql";
cat $dbfile | sed "/^CREATE DATABASE/ s=$dbname=$dbnewname=" | sed "/^CREATE TABLE/ s=$dbname=$dbnewname=" | sed "/^USE / s=$dbname=$dbnewname=" | sed "/^-- / s=$dbname=$dbnewname=" > $dbnewfile


অবশ্যই এখানে বেশিরভাগ উত্তরের মতো উল্লেখ করা হয়েছে, মাইএসকিলডাম্প ব্যাকআপে একটি ক্রিয়েট ডেটাবেস এবং একটি ইউএসই লাইন না থাকলে এটি সহজ। অপশন অর্থ --all-databases, --databasesঅথবা তাদের সংক্ষিপ্ত সংস্করণ -Aবা -Bব্যবহার করা হয়।


মাইএসকিউএল ৫.7-তে, মাইএসকিএলডাম্পে ট্রিগার এবং ভিউগুলিতে ডাটাবেসের নাম অন্তর্ভুক্ত রয়েছে এমনকি এমনকি বা --no-create-dbছাড়াই --databaseবা ছাড়াই --databases
জোনাথন

2

আপনি যদি নিম্নলিখিত দুটি নিয়ম ব্যবহার করে ডাম্প করেন:

  1. যেমন অপশন ব্যবহার করবেন না --databases, --database, এবং কেবল মাত্র এই বিকল্পগুলি ছাড়া কমান্ডের শেষে ডেটাবেস নাম দিলেন।
  2. বিকল্পটি অন্তর্ভুক্ত করুন --no-create-db

আপনি যদি নিম্নলিখিতটি করেন তবে mysqldump ডাটাবেস উল্লেখ না করেই এসকিউএল তৈরি করবে, তবে আপনি আমদানির সময় আপনার মাইএসকিএল কমান্ডের শেষে নতুন ডাটাবেস নামটি ব্যবহার করতে পারেন!

mysqldump  --no-create-db old_db_name --single-transaction --compress --order-by-primary --host old_db_host -u old_db_user -pOld_db_password | mysql --host new_host -u new_user -pnewpassword new_db_name

মাইএসকিউএল ৫.7-তে, মাইএসকিএলডাম্পে ট্রিগার এবং ভিউগুলিতে ডাটাবেসের নাম অন্তর্ভুক্ত রয়েছে এমনকি এমনকি বা --no-create-dbছাড়াই --databaseবা ছাড়াই --databases
জোনাথন

1

এখানে শেল স্ক্রিপ্টটি আপনাকে ফ্লাইয়ের সমস্ত স্কিমা নামের সাথে প্রত্যয় / অ্যাফিক্স যুক্ত করার অনুমতি দেবে।

http://snippets.dzone.com/posts/show/13749


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