সম্পূর্ণ মাইএসকিউএল ডেটাবেস সদৃশ


92

একটি লিনাক্স সার্ভারে একটি সম্পূর্ণ মাইএসকিউএল ডাটাবেসটি সদৃশ করার পক্ষে কি তা কার্যকর?

আমি জানি যে আমি রফতানি এবং আমদানি করতে পারি তবে মূল ডাটাবেসটি> 25 এমবি হয় যাতে এটি আদর্শ নয়।

এটি কি মাইএসকিলডাম্প ব্যবহার করে বা সরাসরি ডাটাবেস ফাইলগুলির সদৃশ করে?

উত্তর:


177

প্রথমে সদৃশ ডাটাবেস তৈরি করুন:

CREATE DATABASE duplicateddb;

নিশ্চিত হয়ে নিন যে ব্যবহারকারীর অনুমতি এবং অনুমতিগুলি সব জায়গায় রয়েছে এবং:

 mysqldump -u admin -p originaldb | mysql -u backup -pPassword duplicateddb; 

29
আপনার 2 য় কমান্ড লাইনের 2 য় অংশে "-p" এবং "পাসওয়ার্ড" এর মধ্যে কোনও স্থান থাকা উচিত বলে মনে করি না

16
জায়গা না থাকা উচিত! উত্তর ঠিক এই মত। মাইএসকিএল ম্যান পৃষ্ঠাটি বলেছিল: - পাসওয়ার্ড [= পাসওয়ার্ড], -p [পাসওয়ার্ড] সার্ভারের সাথে সংযোগ করার সময় ব্যবহার করার জন্য পাসওয়ার্ড। আপনি যদি সংক্ষিপ্ত বিকল্প ফর্ম (-p) ব্যবহার করেন তবে বিকল্প এবং পাসওয়ার্ডের মধ্যে আপনার কোনও স্থান থাকতে পারে না। আপনি যদি কমান্ড লাইনে --password বা -p বিকল্প অনুসরণ করে পাসওয়ার্ডের মানটি বাদ দেন, mysql এর জন্য অনুরোধ জানাবে। কমান্ড লাইনে একটি পাসওয়ার্ড নির্দিষ্ট করা নিরাপদ হিসাবে বিবেচনা করা উচিত। বিভাগ 6.1.2.1, "পি এর জন্য শেষ ব্যবহারকারী নির্দেশিকা দেখুন ...
নীল পিটারসোহন

4
মনে রাখবেন যে মাইএসকিলডাম্প ডিফল্টরূপে ট্রিগারগুলি ব্যাক আপ করে তবে স্টোরেজ পদ্ধতিগুলি নয়, --routinesএই ক্ষেত্রে বিকল্প হিসাবে যুক্ত করুন ।
লিনাক্সডেভিপস

4
আপনি যদি এটি এটি করে থাকেন এবং আপনি চান না যে এই ব্যবহারকারীর মাইএসকিউএল পাসওয়ার্ড বাশ ইতিহাসে পাওয়া যায়, এটি সম্পাদন ~/.bash_historyকরার পরে আপনার ফাইল থেকে সম্পাদনা করুন। অথবা আপনি প্রথম কমান্ডের ফলাফলকে একটি অস্থায়ী ফাইলের আউটপুটও দিতে পারেন এবং এর পরে নিম্নলিখিতটি সম্পাদন করতে পারেন (যা আপনাকে পাসওয়ার্ড দিয়ে জিজ্ঞাসা করবে) mysql -p -u admin duplicatedb < temporaryfile.sql
মাইক

4
এই উত্তরটি অবশ্যই কাজ করে তবে প্রশ্নটি বলে যে "আমি জানি আমি রফতানি এবং আমদানি ব্যবহার করতে পারি তবে মূল ডাটাবেসটি> 25 এমবি হয় এটি আদর্শ নয়" এবং এই উত্তরটি যা বলে তা মূলত রফতানি এবং আমদানি।
el.pescado

17

রিমোট সার্ভারে

mysqldump mydbname | ssh host2 "mysql mydbcopy"

স্থানীয় সার্ভারে

mysqldump mydbname | mysql mydbcopy

ত্রুটি 1064 (42000): আপনার এসকিউএল সিনট্যাক্সে আপনার একটি ত্রুটি রয়েছে; স্থানীয় সার্ভারে কমান্ড ব্যবহারের সময় হাই ত্রুটি দেখিয়ে দয়া করে সহায়তা করুন
amit_game


5

আমি মাঝে মাঝে একটি মাইএসকিএলড্প করি এবং আউটপুটটিকে অন্য ডেটাবেসে আমদানি করার জন্য অন্য মাইএসকিএল কমান্ডে পাইপ করি।

mysqldump --add-drop-table -u wordpress -p wordpress | mysql -u wordpress -p wordpress_backup

আমি একটি ত্রুটি পেয়েছি যে আমি যখন এটি ব্যবহার করি তখন ডেস্ট ডাটাবেসের অস্তিত্ব থাকে না। সুতরাং, আপনার পাশাপাশি একটি ক্রিয়েট ডেটাবেস লাইনও দরকার।
blak3r

3

নতুন সিস্টেমে একটি ইনপুট হিসাবে এই mysqldump ফাইলটি দেওয়ার জন্য সিস্টেমে একটি mysqldump ফাইল তৈরি করুন যা ডেটা রয়েছে এবং পাইপ ব্যবহার করে। নতুন সিস্টেমটি ssh কমান্ড ব্যবহার করে সংযুক্ত হতে পারে।

mysqldump -u user -p'password' db-name | ssh user@some_far_place.com mysql -u user -p'password' db-name

-p [পাসওয়ার্ড] এর মধ্যে কোনও স্থান নেই


4
এটি কীভাবে কাজ করে তার একটি বিবরণ যুক্ত করতে পারেন, যেমন পাইপের ব্যবহার?
kalyfe

1

উইন্ডোজ ব্যাটের ফাইলটি আমি এখানে লিখেছি যা ভিনসেন্ট এবং পলসের পরামর্শকে একত্রিত করে। এটি উত্স এবং গন্তব্য নামগুলির জন্য ব্যবহারকারীকে অনুরোধ করে।

আপনার এক্সিকিউটেবল / ডাটাবেস পোর্টগুলিতে সঠিক পাথ সেট করতে কেবল শীর্ষে ভেরিয়েবলগুলি সংশোধন করুন।

:: Creates a copy of a database with a different name.
:: User is prompted for Src and destination name.
:: Fair Warning: passwords are passed in on the cmd line, modify the script with -p instead if security is an issue.
:: Uncomment the rem'd out lines if you want script to prompt for database username, password, etc.

:: See also: http://stackoverflow.com/questions/1887964/duplicate-entire-mysql-database

@set MYSQL_HOME="C:\sugarcrm\mysql\bin"
@set mysqldump_exec=%MYSQL_HOME%\mysqldump
@set mysql_exec=%MYSQL_HOME%\mysql
@set SRC_PORT=3306
@set DEST_PORT=3306
@set USERNAME=TODO_USERNAME
@set PASSWORD=TODO_PASSWORD

:: COMMENT any of the 4 lines below if you don't want to be prompted for these each time and use defaults above.
@SET /p USERNAME=Enter database username: 
@SET /p PASSWORD=Enter database password: 
@SET /p SRC_PORT=Enter SRC database port (usually 3306): 
@SET /p DEST_PORT=Enter DEST database port: 

%MYSQL_HOME%\mysql --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="show databases;"
@IF NOT "%ERRORLEVEL%" == "0" GOTO ExitScript

@SET /p SRC_DB=What is the name of the SRC Database:  
@SET /p DEST_DB=What is the name for the destination database (that will be created):  

%mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% --execute="create database %DEST_DB%;"
%mysqldump_exec% --add-drop-table --user=%USERNAME% --password=%PASSWORD% --port=%SRC_PORT% %SRC_DB% | %mysql_exec% --user=%USERNAME% --password=%PASSWORD% --port=%DEST_PORT% %DEST_DB%
@echo SUCCESSFUL!!!
@GOTO ExitSuccess

:ExitScript
@echo "Failed to copy database"
:ExitSuccess

নমুনা আউটপুট:

C:\sugarcrm_backups\SCRIPTS>copy_db.bat
Enter database username: root
Enter database password: MyPassword
Enter SRC database port (usually 3306): 3308
Enter DEST database port: 3308

C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="show databases;"
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sugarcrm_550_pro   |
| sugarcrm_550_ce    |
| sugarcrm_640_pro   |
| sugarcrm_640_ce    |
+--------------------+
What is the name of the SRC Database:  sugarcrm
What is the name for the destination database (that will be created):  sugarcrm_640_ce

C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 --execute="create database sugarcrm_640_ce;"

C:\sugarcrm_backups\SCRIPTS>"C:\sugarcrm\mysql\bin"\mysqldump --add-drop-table --user=root --password=MyPassword --port=3308 sugarcrm   | "C:\sugarcrm\mysql\bin"\mysql --user=root --password=MyPassword --port=3308 sugarcrm_640_ce
SUCCESSFUL!!!

1

এটি InnoDB এর পক্ষে কাজ করবে না। আপনি যদি মাইআইএসএএম ডাটাবেসগুলি অনুলিপি করার চেষ্টা করছেন তবেই এই কর্মসংস্থানটি ব্যবহার করুন।

যদি ব্যাকআপের সময় টেবিলগুলি লক করা হয় এবং এবং সম্ভবত ডেটাবেস আমদানির সময় মাইএসকিউএলকে থামানো গ্রহণযোগ্য হয় তবে মাইএসকিএলহোটকপি আরও দ্রুত কাজ করতে পারে।

যেমন

ব্যাকআপ:

# mysqlhotcopy -u root -p password db_name /path/to/backup/directory

পুনরুদ্ধার:

cp /path/to/backup/directory/* /var/lib/mysql/db_name

mysqlhotcopy এছাড়াও এসএসএইচ (scp) এর মাধ্যমে ফাইলগুলি সম্ভবত ডুপ্লিকেট ডাটাবেস ডিরেক্টরিতে স্থানান্তর করতে পারে।

যেমন

# mysqlhotcopy -u root -p password db_name /var/lib/mysql/duplicate_db_name

1

একটি ডাটাবেসের একটি অনুলিপি তৈরি করা হচ্ছে

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql

0

এটি আউটসাইড মাইএসকিএল শেল থেকে কমান্ড প্রম্পট নিয়ে আমার পক্ষে কাজ করেছে:

# mysqldump -u root -p password db1 > dump.sql
# mysqladmin -u root -p password create db2
# mysql -u root -p password db2 < dump.sql

এটি আমার পক্ষে সবচেয়ে ভাল উপায়। "ডাম্প.এসকিউএল" জিপ করা থাকলে আপনি এটিকে সংকুচিত ব্যাকআপ হিসাবে সিম্পল সহ সঞ্চয় করতে পারেন। কুল! ইনোডব টেবিল সহ 1 জিবি ডাটাবেসের জন্য, "ডাম্প.এসকিউএল" তৈরি করতে প্রায় এক মিনিট, এবং নতুন ডিবি ডিবি 2-তে ডেটা ডাম্প করতে প্রায় তিন মিনিট।

হোল ডিবি ডিরেক্টরিটি সরাসরি অনুলিপি করা (মাইএসকিএল / ডেটা / ডিবি 1) আমার পক্ষে কাজ করে নি, আমি অনুমান করি যে ইনোডিবি টেবিলগুলির কারণে।


-2

মাইএসকিউএল একবারে আপনি কেবল সমস্ত টেবিল ফাইল মাইএসকিএল ট্রিতে অন্য ডিরেক্টরিতে অনুলিপি করতে পারেন

mysql cli - db2 ডাটাবেস তৈরি করুন

লিনাক্স ক্লিপ - সিপি ডিবি 1 ডিবি 2


এটি কেবল মাইআইএসএএম-এর সাথে কাজ করে, তাই না? ভালো thoseসব খারাপ পুরানো দিনগুলি কেটে গেল।
লরেনজ আলবে

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