আমরা কীভাবে মাইএসকিএলডাম্প ফাইল থেকে আলাদা নামের সাথে মাইএসকিএল ডাটাবেস পুনরুদ্ধার করতে পারি। আমি ডাম্প ফাইলটি খুলতে এবং এটি সম্পাদনা করতে চাই না। অন্য কোন ভাল পদ্ধতি?
আমরা কীভাবে মাইএসকিএলডাম্প ফাইল থেকে আলাদা নামের সাথে মাইএসকিএল ডাটাবেস পুনরুদ্ধার করতে পারি। আমি ডাম্প ফাইলটি খুলতে এবং এটি সম্পাদনা করতে চাই না। অন্য কোন ভাল পদ্ধতি?
উত্তর:
আপনি 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
একবার চেষ্টা করে দেখো !!!
ALTER DATABASE ... CHARACTER SET ...
যা আমার আমদানি ভঙ্গ করছে। সম্পাদনা করুন: ওরাকল মূলত বাগটি উপেক্ষা করছে ।
আমি ডাম্প, এডিট এবং সন্নিবেশ করানোর একটি বড় অনুরাগী। তবে এটি পরিবর্তন করতে আপনাকে পাঠ্য ফাইল (ডাম্প ফাইল) খুলতে হবে না (এটি বেশ কয়েকটি মিলিয়ন লাইনের দীর্ঘ হলে এটি বিশেষত কার্যকর)। আপনি যদি ডাটাবেস ডাম্প করতে চান 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 বছরের মধ্যে আমার উত্তর সম্পাদনা করে খুশি।
sed -i 's/MYDATABASE/MYNEWDATABASE/g' mydump.sql
সেড কমান্ড চালানোর আগে ( ) cat mydump.sql | grep "MYDATABASE"
কেবলমাত্র ডাটাবেসের নাম পরিবর্তন হয়েছে কিনা তা নিশ্চিত করার জন্য মায়াডাটাবেসের সমস্ত ঘটনা পরীক্ষা করে দেখুন , অন্যান্য ডেটা অপরিচ্ছন্ন থেকে যায়।
sed -i 's/`MYDATABASE`/`MYNEWDATABASE`/g' mydump.sql
# সম্ভাব্য সুরক্ষিত বাষ্প সম্পাদনা। আমার ডাটাবেস ডাম্পে কোনও ব্যবহার বা ক্রিয়েট ডেটাবেস স্টেটমেন্ট থাকে না, তবে ডিবি নামটি স্কয়ার মন্তব্য, ভিউ এবং ট্রিগারগুলিতে থাকে (মাইএসকিউএল 5.7)। এটি মন্তব্যে ডাটাবেসের নামটি প্রতিস্থাপন করে না, তবে ফলাফল ডাটাবেসের উপর তাদের কোনও প্রভাব নেই। এটি আমার পক্ষে ভাল কাজ করেছে।
তুমি কি হাতে থাকে তাহলে ফাইল এবং আপনি একটি শেল / কনসোল থেকে কাজে লাগাতে হয়, আমি ব্যবহার করেন 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
ব্যবহার করা হয়।
--no-create-db
ছাড়াই --database
বা ছাড়াই --databases
।
আপনি যদি নিম্নলিখিত দুটি নিয়ম ব্যবহার করে ডাম্প করেন:
--databases
, --database
, এবং কেবল মাত্র এই বিকল্পগুলি ছাড়া কমান্ডের শেষে ডেটাবেস নাম দিলেন।--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
--no-create-db
ছাড়াই --database
বা ছাড়াই --databases
।
এখানে শেল স্ক্রিপ্টটি আপনাকে ফ্লাইয়ের সমস্ত স্কিমা নামের সাথে প্রত্যয় / অ্যাফিক্স যুক্ত করার অনুমতি দেবে।
-Ddb2
সামনে হাইফেন থাকা উচিত নয়। অন্তত, আমি এটি অন্তর্ভুক্ত করার সময় একটি মাইএসকিউএল সিন্ট্যাক্স ত্রুটি পেয়েছি।