command-line - MySQL में कमांड लाइन का उपयोग कर SQL फ़ाइल आयात कैसे करें?




import (25)

मेरे पास phpMyAdmin से निर्यात के साथ एक .sql फ़ाइल है। मैं कमांड लाइन का उपयोग कर इसे एक अलग सर्वर में आयात करना चाहता हूं।

मेरे पास एक विंडोज सर्वर 2008 आर 2 स्थापना है। मैंने .sql फ़ाइल को सी ड्राइव पर रखा, और मैंने इस कमांड को आजमाया

database_name < file.sql

यह काम नहीं कर रहा है मुझे वाक्यविन्यास त्रुटियां मिलती हैं।

  • मैं बिना किसी समस्या के इस फ़ाइल को कैसे आयात कर सकता हूं?
  • क्या मुझे पहले डेटाबेस बनाने की ज़रूरत है?

Answers

mysqldump का एक सामान्य उपयोग पूरे डेटाबेस का बैकअप बनाने के लिए है:

shell> mysqldump db_name > backup-file.sql

आप इस तरह सर्वर में डंप फ़ाइल को वापस लोड कर सकते हैं:

यूनिक्स

shell> mysql db_name < backup-file.sql

विंडोज कमांड प्रॉम्प्ट में वही:

mysql -p -u[user] [database] < backup-file.sql

शक्ति कोशिका

C:\> cmd.exe /c "mysql -u root -p db_name < backup-file.sql"

MySQL कमांड लाइन

mysql> use db_name;
mysql> source backup-file.sql;

सभी उत्तरों में, ऊपर की समस्या के लिए, यह सबसे अच्छा है:

 mysql> use db_name;
 mysql> source file_name.sql;

एक डेटाबेस आयात करने के लिए, निम्न आदेश का उपयोग करें।

mysql -u username -p password dbname < dump.sql

एकाधिक डेटाबेस डंप आयात करने के लिए, निम्न आदेश का उपयोग करें।

mysql -u username -p password < dump.sql

जबकि यहां अधिकांश उत्तर सरल आदेश का जिक्र करते हैं

mysql -u डेटाबेस_user -p <डेटाबेस_file.sql

आज यह काफी आम है कि डेटाबेस और तालिकाओं में utf8-collation है जहां यह आदेश पर्याप्त नहीं है। निर्यातित तालिकाओं में utf8-collation होने के बाद इसे इस आदेश का उपयोग करने की आवश्यकता है:

mysql -u डेटाबेस_user -p --default-character-set = utf8 <डेटाबेस_file.sql

सुरली यह अन्य वर्णमाला के लिए भी काम करती है, सही नोटेशन कैसे दिखाना है यहां देखा जा सकता है:

https://dev.mysql.com/doc/refman/5.7/en/show-collation.html

एक टिप्पणी में यह भी बताया गया है कि यदि कोई डेटाबेस कभी मौजूद नहीं होता है तो खाली डेटाबेस पहले बनाया जाना था। यह कुछ मामलों में सही हो सकता है, लेकिन निर्यात फ़ाइल पर निर्भर करता है। यदि निर्यात की गई फ़ाइल में डेटाबेस बनाने के लिए पहले से ही कमांड शामिल है तो डेटाबेस को एक अलग चरण में कभी भी नहीं बनाया जाना चाहिए, जो आयात पर भी त्रुटि उत्पन्न कर सकता है। तो आयात पर यह सलाह दी जाती है कि फाइल में सबसे पहले एक नज़र डालें, यह जानने के लिए कि कौन से कमांड शामिल हैं, निर्यात पर यह सलाह दी जाती है कि सेटिंग्स को ध्यान में रखें, खासकर यदि फ़ाइल बहुत बड़ी है और एक संपादक में पढ़ना मुश्किल है।

कमांड के लिए अभी भी अधिक पैरामीटर हैं जो सूचीबद्ध हैं और यहां समझाए गए हैं:

https://dev.mysql.com/doc/refman/5.7/en/mysql-command-options.html

यदि आप किसी अन्य डेटाबेस-संस्करण का उपयोग मैन्युअल के संबंधित संस्करण की खोज पर विचार करते हैं। उल्लिखित लिंक MySQL संस्करण 5.7 का संदर्भ लें।


मुझे लगता है कि यह उल्लेखनीय है कि आप नीचे दिखाए गए जैसे zcat साथ एक gzipped (संपीड़ित) फ़ाइल भी लोड कर सकते हैं:

zcat database_file.sql.gz | mysql -u username -p -h localhost database_name

  1. MySQL कमांड लाइन खोलें
  2. अपनी mysql बिन निर्देशिका का पथ टाइप करें और एंटर दबाएं
  3. Mysql सर्वर के bin फ़ोल्डर के अंदर अपनी SQL फ़ाइल पेस्ट करें।
  4. MySQL में डेटाबेस बनाएँ।
  5. उस विशेष डेटाबेस का उपयोग करें जहां आप SQL फ़ाइल आयात करना चाहते हैं।
  6. source databasefilename.sql टाइप source databasefilename.sql और एंटर करें
  7. आपकी एसक्यूएल फ़ाइल सफलतापूर्वक अपलोड करें।

बैकअप उद्देश्यों के लिए, एक बीएटी फ़ाइल बनाएं और कार्य शेड्यूलर का उपयोग करके इस बीएटी फ़ाइल को चलाएं। यह डेटाबेस का बैकअप लेगा; बस निम्न पंक्ति की प्रतिलिपि बनाएँ और Notepad में पेस्ट करें और फिर .bat फ़ाइल को सहेजें, और इसे अपने सिस्टम पर चलाएं।

@echo off
for /f "tokens=1" %%i in ('date /t') do set DATE_DOW=%%i
for /f "tokens=2" %%i in ('date /t') do set DATE_DAY=%%i
for /f %%i in ('echo %date_day:/=-%') do set DATE_DAY=%%i
for /f %%i in ('time /t') do set DATE_TIME=%%i
for /f %%i in ('echo %date_time::=-%') do set DATE_TIME=%%i

"C:\Program Files\MySQL\mysql server 5.5\bin\mysqldump" -u username -ppassword mysql>C:/%DATE_DAY%_%DATE_TIME%_database.sql

मैं पावरहेल 5 के साथ विंडोज 10 का उपयोग कर रहा हूं और मुझे लगभग सभी "यूनिक्स-जैसे" समाधान मिलते हैं जो मेरे लिए काम नहीं कर रहे हैं।

> mysql -u[username] [database-name] < my-database.sql
At line:1 char:31
+ mysql -u[username] [database-name] < my-database.sql
+                               ~
The '<' operator is reserved for future use.
    + CategoryInfo          : ParserError: (:) [], ParentContainsErrorRecordException
    + FullyQualifiedErrorId : RedirectionNotSupported

मैं इस आदेश का उपयोग कर समाप्त होता है।

> type my-database.sql | mysql -u[username] -h[localhost] -p [database-name]

और यह पूरी तरह से काम करता है, उम्मीद है कि यह मदद करता है।

@ के answer के लिए धन्यवाद।


निम्न आदेश WAMP पर विंडोज 7 पर कमांड लाइन (cmd) से मेरे लिए काम करता है।

d:/wamp/bin/mysql/mysql5.6.17/bin/mysql.exe -u root -p db_name < database.sql

mysql -u root -p password -D database_name << import.sql

विवरण mysql --help लिए mysql मदद का प्रयोग करें

मुझे लगता है कि ये हमारे संदर्भ में उपयोगी विकल्प होंगे

[~]$ mysql --help
mysql  Ver 14.14 Distrib 5.7.20, for osx10.12 (x86_64) using  EditLine wrapper
Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.                                                                                                                                         
Usage: mysql [OPTIONS] [database]
  -?, --help          Display this help and exit.
  -I, --help          Synonym for -?
  --bind-address=name IP address to bind to.
  -D, --database=name Database to use.
  --delimiter=name    Delimiter to be used.
  --default-character-set=name Set the default character set.
  -f, --force         Continue even if we get an SQL error.
  -p, --password[=name] Password to use when connecting to server.
  -h, --host=name     Connect to host.
  -P, --port=#        Port number to use for connection or 0 for default to, in order of preference, my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default (3306).
  --protocol=name     The protocol to use for connection (tcp, socket, pipe,
  -s, --silent        Be more silent. Print results with a tab as separator, each row on new line.
  -v, --verbose       Write more. (-v -v -v gives the table output format).
  -V, --version       Output version information and exit.
  -w, --wait          Wait and retry if connection is down.

मजेदार क्या है, अगर हम एक बड़ा डेटाबेस आयात कर रहे हैं और प्रगति पट्टी नहीं है। पाइप व्यूअर का प्रयोग करें और पाइप के माध्यम से डेटा स्थानांतरण देखें

मैक के लिए, brew install pv लिए डेबियन / उबंटू, apt-get install pv । अन्य, http://www.ivarch.com/programs/pv.shtml देखें

pv import.sql | mysql -u root -p password -D database_name

1.45GiB 1:50:07 [339.0KiB/s]   [=============>      ] 14% ETA 11:09:36
1.46GiB 1:50:14 [ 246KiB/s]     [=============>      ] 14% ETA 11:09:15
1.47GiB 1:53:00 [ 385KiB/s]     [=============>      ] 14% ETA 11:05:36

mysql --user=[user] --password=[password] [database] < news_ml_all.sql

मेरे लिए काम करने वाला एक समाधान नीचे दिया गया है:

Use your_database_name;
SOURCE path_to_db_sql_file_on_your_local;

डेटाबेस में आयात करें: -

mysql -u उपयोगकर्ता नाम -p डेटाबेस_नाम </ फ़ाइल पथ / file_name.sql

डेटाबेस से निर्यात करें: -

mysqldump -u उपयोगकर्ता नाम -p डेटाबेस_नाम> / फ़ाइल पथ / file_name.sql

इन आदेशों के बाद प्रॉम्प्ट आपके mysql पासवर्ड के लिए पूछेगा


यदि आपके पास पहले से ही डेटाबेस dump या sql फ़ाइल आयात करने के लिए निम्न का उपयोग करता है

mysql -u username -p database_name < file.sql

यदि आपको MySQL में प्रासंगिक डेटाबेस (खाली) बनाने की आवश्यकता नहीं है, तो उस पहले के लिए टर्मिनल में या cmd में निम्न आदेश चलाकर MySQL कंसोल पर लॉग ऑन करें

mysql -u userName -p;

और जब संकेत दिया गया पासवर्ड प्रदान करते हैं।

अगला डेटाबेस बनाएं और इसका इस्तेमाल करें

mysql>create database yourDatabaseName;
mysql>use yourDatabaseName;

फिर डेटाबेस से sql या dump फ़ाइल आयात करें

mysql> source pathToYourSQLFile;

नोट: यदि आपका टर्मिनल उस स्थान पर नहीं है जहां dump या sql फ़ाइल मौजूद है, तो ऊपर के सापेक्ष पथ का उपयोग करें।


विशाल फ़ाइलों को आयात करने के लिए किए गए समय के बारे में: सबसे महत्वपूर्ण बात यह है कि इसमें अधिक समय लगता है क्योंकि MySQL की डिफ़ॉल्ट सेटिंग autocommit = true । आपको अपनी फ़ाइल आयात करने से पहले इसे बंद करना होगा और फिर जांच करें कि आयात कैसे मणि की तरह काम करता है।

आपको बस निम्न कार्य करने की आवश्यकता है:

mysql> use db_name;

mysql> SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;

उस निर्देशिका पर जाएं जहां आपके पास MySQL है।

 c:\mysql\bin\> mysql -u username -p password database_name <
 filename.sql

सभी डेटाबेस को डंप करने के लिए, -all-databases विकल्प का उपयोग करें, और किसी भी डेटाबेस के नाम को अब निर्दिष्ट करने की आवश्यकता नहीं है।

mysqldump -u username -ppassword –all-databases > dump.sql

या आप ऐसा करने के लिए SQLYog जैसे कुछ जीयूआई क्लाइंट का उपयोग कर सकते हैं।


डेटाबेस आयात करें

  1. ड्राइव पर जाएं:

    command: d:
    
  2. MySQL लॉगिन

    command: c:\xampp\mysql\bin\mysql -u root -p
    
  3. यह पीडब्ल्यूडी के लिए पूछेगा। इसे दर्ज करें:

    pwd
    
  4. डेटाबेस का चयन करें

    use DbName;
    
  5. फ़ाइल का नाम प्रदान करें

    \.DbName.sql
    

मैं उस समस्या में भाग रहा था जहां डेटाबेस नहीं बनाया गया था।

मैंने इसे इस तरह तय किया

mysql -u root -e "CREATE DATABASE db_name"
mysql db_name --force < import_script.sql

कमांड लाइन पर प्रमाण पत्र प्रदान करना एक अच्छा विचार नहीं है। उपर्युक्त उत्तर महान हैं, लेकिन उल्लेख करने के लिए उपेक्षा करते हैं

mysql --defaults-extra-file=etc/myhost.cnf database_name < file.sql

जहां आदि / myhost.cnf एक फ़ाइल है जिसमें होस्ट, उपयोगकर्ता, पासवर्ड होता है, और आप कमांड लाइन पर पासवर्ड उजागर करने से बचते हैं। यहां एक नमूना है,

[client]
host=hostname.domainname
user=dbusername
password=dbpassword

जानकारी के लिए मेरे पास सिर्फ डिफ़ॉल्ट रूट + बिना पासवर्ड था, यह सभी उपरोक्त उत्तरों के साथ काम नहीं करता था।

  • मैंने सभी विशेषाधिकारों और पासवर्ड के साथ एक नया उपयोगकर्ता बनाया है। यह काम करता हैं।

  • स्पेस के बिना पासवर्ड।


प्रयत्न:

mysql -u username -p database_name < file.sql

MySQL विकल्प जांचें।

नोट -1: SQL फ़ाइल file.sql के पूर्ण पथ का उपयोग करना बेहतर है।

नोट -2: मूल डेटाबेस के दिनचर्या और ट्रिगर रखने के लिए -R और --triggers का उपयोग करें। वे डिफ़ॉल्ट रूप से प्रतिलिपि नहीं हैं।


हम कमांड लाइन से एसक्यूएल आयात करने के लिए इस कमांड का उपयोग कर सकते हैं:

mysql -u username -p password db_name < file.sql

उदाहरण के लिए, यदि उपयोगकर्ता नाम root और पासवर्ड password । और आपके पास bank रूप में डेटाबेस नाम है और SQL फ़ाइल bank.sql । फिर, बस ऐसा ही करें:

mysql -u root -p password bank < bank.sql

याद रखें कि आपकी एसक्यूएल फाइल कहां है। यदि आपकी SQL फ़ाइल Desktop फ़ोल्डर / निर्देशिका में है तो डेस्कटॉप निर्देशिका पर जाएं और इस तरह की कमांड दर्ज करें:

~ ? cd Desktop
~/Desktop ? mysql -u root -p password bank < bank.sql

और यदि आप Project निर्देशिका में हैं और आपकी SQL फ़ाइल Desktop निर्देशिका में है। यदि आप इसे Project निर्देशिका से एक्सेस करना चाहते हैं तो आप ऐसा कर सकते हैं:

~/Project ? mysql -u root -p password bank < ~/Desktop/bank.sql

कभी-कभी उस डेटाबेस के सर्वर के आईपी ​​पते के साथ-साथ पोर्ट भी परिभाषित करता है ...

mysql -u user -p user -h <Server IP> -P<port> (DBNAME) < DB.sql 

यदि .sql फ़ाइल में CREATE DATABASE IF NOT EXISTS db_name बनाते हैं, तो आपको कमांड लाइन पर डेटाबेस का नाम निर्दिष्ट करने की आवश्यकता नहीं है, अगर मैं CREATE DATABASE IF NOT EXISTS db_name और USE db_name कथन को CREATE DATABASE IF NOT EXISTS db_name

बस सुनिश्चित करें कि आप उस उपयोगकर्ता से कनेक्ट कर रहे हैं जिसमें डेटाबेस बनाने की अनुमति है, यदि .sql फ़ाइल में उल्लिखित डेटाबेस मौजूद नहीं है।


PowerShell get-command तहत $Env:PATH में कहीं भी निष्पादन योग्य पाएंगे।

get-command eventvwr

CommandType   Name          Definition
-----------   ----          ----------
Application   eventvwr.exe  c:\windows\system32\eventvwr.exe
Application   eventvwr.msc  c:\windows\system32\eventvwr.msc

यह पावरहेल cmdlets, फ़ंक्शंस, उपनाम, कस्टम एक्जिक्यूटिव एक्सटेंशन के साथ फ़ाइलों को $Env:PATHEXT , आदि के माध्यम से वर्तमान खोल के लिए परिभाषित किया गया है (बाश के type -a foo के समान) - यह अन्य टूल्स जैसे अन्य उपकरणों की तुलना में बेहतर हो जाता है where.exe , which.exe , आदि जो इन PowerShell कमांड से अनजान हैं।

आप जल्दी से sal which gcm साथ उपनाम स्थापित कर सकते हैं sal which gcm ( set-alias which get-command का संक्षिप्त रूप set-alias which get-command ) है।







mysql sql command-line import