डुप्लीकेट संपूर्ण MySQL डाटाबेस


90

क्या लिनक्स सर्वर पर पूरे MySQL डेटाबेस को डुप्लिकेट करना संभव है?

मुझे पता है कि मैं निर्यात और आयात का उपयोग कर सकता हूं, लेकिन मूल डेटाबेस> 25 एमबी है, इसलिए यह आदर्श नहीं है।

क्या mysqldump का उपयोग करके या डेटाबेस फ़ाइलों को सीधे डुप्लिकेट करना संभव है?

जवाबों:


174

सबसे पहले डुप्लिकेट डेटाबेस बनाएँ:

CREATE DATABASE duplicateddb;

सुनिश्चित करें कि उपयोगकर्ता और अनुमतियाँ सभी जगह हैं और:

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

29
मुझे नहीं लगता कि आपके 2 कमांड लाइन के दूसरे भाग में "-पी" और "पासवर्ड" के बीच एक स्थान होना चाहिए

16
कोई जगह नहीं होनी चाहिए! उत्तर इस तरह सही है। Mysql मैन पेज ने कहा: --पासवर्ड [= पासवर्ड], -p [पासवर्ड] सर्वर से कनेक्ट करते समय उपयोग करने वाला पासवर्ड। यदि आप लघु विकल्प फ़ॉर्म (-p) का उपयोग करते हैं, तो आपके पास विकल्प और पासवर्ड के बीच कोई स्थान नहीं हो सकता है। यदि आप कमांड लाइन पर thepassword या -p विकल्प के बाद पासवर्ड मान छोड़ते हैं, तो mysql एक के लिए संकेत देता है। कमांड लाइन पर एक पासवर्ड निर्दिष्ट करना असुरक्षित माना जाना चाहिए। धारा 6.1.2.1, "P- के लिए अंतिम-उपयोगकर्ता दिशानिर्देश देखें
nils petersohn

2
ध्यान दें कि mysqldump डिफ़ॉल्ट रूप से ट्रिगर करता है, लेकिन संग्रहीत कार्यविधियाँ नहीं, --routinesइस मामले के लिए एक विकल्प के रूप में जोड़ें ।
LinuxDevOps 14

1
यदि आप इसे इस तरह से कर रहे हैं और आप नहीं चाहते हैं कि यह उपयोगकर्ता का MySQL पासवर्ड बैश इतिहास में उपलब्ध हो, तो इसे ~/.bash_historyनिष्पादित करने के बाद इसे अपनी फ़ाइल से संपादित करें । या आप पहले कमांड के परिणाम को एक अस्थायी फ़ाइल में भी आउटपुट कर सकते हैं और इसके बाद निम्नलिखित को निष्पादित कर सकते हैं (जो आपको पासवर्ड के साथ संकेत देगा) mysql -p -u admin duplicatedb < temporaryfile.sql
माइक

1
यह उत्तर निश्चित रूप से काम करता है, लेकिन प्रश्न "मुझे पता है कि मैं निर्यात और आयात का उपयोग कर सकता हूं, लेकिन मूल डेटाबेस> 25 एमबी है, इसलिए यह आदर्श नहीं है" और यह उत्तर मूल रूप से निर्यात और आयात का सुझाव देता है।
el.pescado

17

दूरस्थ सर्वर के लिए

mysqldump mydbname | ssh host2 "mysql mydbcopy"

स्थानीय सर्वर को

mysqldump mydbname | mysql mydbcopy

ERROR 1064 (42000): आपके एसक्यूएल सिंटैक्स में एक त्रुटि है ;, स्थानीय सर्वर में कमांड का उपयोग करते समय त्रुटि दिखाते हुए, कृपया मदद करें
amit_game


5

मैं कभी-कभी एक mysqldump करता हूं और आउटपुट को किसी अन्य डेटाबेस में आयात करने के लिए दूसरे mysql कमांड में पाइप करता हूं।

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

मुझे एक त्रुटि मिलती है कि जब मैं इसका उपयोग करता हूं तो भाग्य डेटाबेस मौजूद नहीं होता है। तो, आप के रूप में अच्छी तरह से एक क्रीत लाइन की जरूरत है।
ब्लेक

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 [पासवर्ड] के बीच कोई स्थान नहीं


1
क्या आप यह वर्णन कर सकते हैं कि यह कैसे काम करता है, जैसे पाइप का उपयोग?
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 के लिए काम नहीं करेगा। इस वर्कअराउंड का उपयोग केवल तभी करें जब आप MyISAM डेटाबेस को कॉपी करने का प्रयास कर रहे हों।

यदि बैकअप के दौरान तालिकाओं को लॉक करना, और, संभवतः डेटाबेस आयात के दौरान MySQL को रोकना स्वीकार्य है, तो mysqlhotcopy तेजी से काम कर सकता है।

उदाहरण के लिए

बैकअप:

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

पुनर्स्थापित करें:

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

mysqlhotcopy SSH (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

यह मेरे लिए कमांड प्रॉम्प्ट के साथ, OUTSIDE mysql शेल से काम करता है:

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

यह मेरे लिए सबसे अच्छा तरीका है। यदि "डंप। एसक्यूएल" ज़िपिंग आप इसे संपीड़ित बैकअप के रूप में सहानुभूतिपूर्वक स्टोर कर सकते हैं। ठंडा! इनोडब टेबल्स के साथ 1GB डेटाबेस के लिए, "डंप.स्कल" बनाने के लिए लगभग एक मिनट, और नए DB db2 में डेटा डंप करने के लिए लगभग तीन मिनट।

छेद डीबी निर्देशिका (mysql / data / db1) की नकल करना मेरे लिए कारगर नहीं था, मुझे लगता है कि मैं InnoDB तालिकाओं के कारण हूं।


-2

एक बार MySQL में एक बार आप mysql ट्री में सभी टेबल फ़ाइलों को किसी अन्य निर्देशिका में कॉपी कर सकते हैं

mysql cli - डेटाबेस db2 बनाएं

linux cli - cp db1 db2


यह केवल MyISAM के साथ काम करता है, है ना? अच्छे वो बुरे पुराने दिन चले गए।
लॉरेंज एल्बे

इतिहास की पुस्तकों के लिए अच्छा है, लेकिन अब बहुत उपयोगी नहीं है।
जेजे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.