पासवर्ड प्रॉम्प्ट के बिना mysqldump कैसे करें?


229

मैं पासवर्ड के लिए संकेत के बिना एक डेटाबेस के mysqldump प्रदर्शन करने के लिए कमांड जानना चाहूंगा।

REASON: मैं एक क्रॉन जॉब चलाना चाहूंगा, जो हर रोज एक बार डेटाबेस का mysqldump लेता है। इसलिए, संकेत दिए जाने पर मैं पासवर्ड नहीं डाल पाऊंगा।

मैं इसे कैसे हल कर सकता हूं?

जवाबों:


412

चूंकि आप उबंटू का उपयोग कर रहे हैं, इसलिए आपको बस अपने होम डायरेक्टरी में एक फाइल जोड़ने की जरूरत है और यह mysqldump पासवर्ड प्रॉम्प्ट को अक्षम कर देगा। यह फ़ाइल बनाकर किया जाता है ~/.my.cnf(अनुमतियाँ 600 होनी चाहिए)।

इसे .my.cnf फ़ाइल में जोड़ें

[mysqldump]
user=mysqluser
password=secret

यह आपको एक MySQL उपयोगकर्ता के रूप में कनेक्ट करने देता है, जिसे वास्तव में पासवर्ड दर्ज किए बिना पासवर्ड की आवश्यकता होती है। आपको -p या --password की भी आवश्यकता नहीं है।

Mysql और mysqldump कमांड को स्क्रिप्ट करने के लिए बहुत आसान है।

इसे प्राप्त करने के चरण इस लिंक में देखे जा सकते हैं ।

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

mysqldump -u [user name] -p[password] [database name] > [dump file]

लेकिन ध्यान रखें कि यह स्वाभाविक रूप से असुरक्षित है, क्योंकि पूरे कमांड (पासवर्ड सहित) को सिस्टम पर किसी अन्य उपयोगकर्ता द्वारा देखा जा सकता है जबकि डंप चल रहा है, एक साधारण ps axकमांड के साथ।


55
कमांड लाइन पर पासिंग -p के अन्य उत्तरों को डाउनवोट किया, क्योंकि कोई भी उपयोगकर्ता रूट या उपयोगकर्ता के पासवर्ड को देखने के लिए ps aux कर सकता है। उपरोक्त फ़ाइल सुझाव का उपयोग करना सबसे सुरक्षित है
एडी

19
यदि कोई वैश्विक सेटिंग एक विकल्प नहीं है (यदि आपके पास कनेक्ट करने के लिए केवल एक mysql उदाहरण नहीं है), तो आप इसके माध्यम से कॉन्फ़िगरेशन सेट कर सकते हैं --defaults-file। जैसे `mysqldump --defaults-file = my_other.cnf --print-defaults`
dennis

3
@ कैंट: यह सुरक्षित है। यह केवल उन उपयोगकर्ताओं के लिए उपलब्ध है जिनके लिए .my.cnf फ़ाइल संबंधित है।
यान सगन

7
विंडोज पर, कॉन्फ़िगरेशन फ़ाइल पर नहीं है ~/.my.cnfStackoverflow.com/a/14653239/470749 देखें । MySql को मेरा होने की उम्मीद थी c:\wamp\bin\mysql\mysql5.5.24\my.cnf। इसलिए मैंने वहां एक फाइल बनाई। मैसूरल को पुनः आरंभ करना आवश्यक नहीं था; इसने मेरे अगले mysqldump के लिए तुरंत काम किया।
रयान

6
सुरक्षा के स्तर को जोड़ने के लिए, आपको एक समर्पित, गैर डेटाबेस विशिष्ट, आसानी से उपयोगकर्ता का उपयोग करना चाहिए, और किसी भी मामले में रूट उपयोगकर्ता नहीं। इसे इस तरह किया जा सकता है:GRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
गदजौ

86

@ फ्रैंकलाइन के उत्तर में जोड़ना:

-pविकल्प बाहर रखा जाना चाहिए क्रम कॉन्फ़िग फ़ाइल में पासवर्ड का उपयोग करने के आदेश से।

सही बात:
mysqldump –u my_username my_db > my_db.sql

गलत:
mysqldump –u my_username -p my_db > my_db.sql



.my.cnf उपयोगकर्ता नाम छोड़ सकते हैं।

[mysqldump]
password=my_password

यदि आपका .my.cnfफ़ाइल एक में नहीं है डिफ़ॉल्ट स्थान और mysqldumpनहीं देखा है, का उपयोग करते हुए यह निर्दिष्ट --defaults-file

mysqldump --defaults-file=/path-to-file/.my.cnf –u my_username my_db > my_db.sql


Damnit, XAMPP के बहुत सारे ट्यूटोरियल में -p को समझाए बिना शामिल हैं। यह एक खाली पासवर्ड को दरकिनार करने के लिए काम नहीं करता है ...
नेल्सन

47

कॉन्फ़िगरेशन फ़ाइल में पासवर्ड डालने के कुछ उत्तर का उल्लेख है।

वैकल्पिक रूप से, अपनी स्क्रिप्ट से आप कर सकते हैं export MYSQL_PWD=yourverysecretpassword

कॉन्फ़िगरेशन फ़ाइल का उपयोग करने पर इस विधि का उल्टा यह है कि आपको अपनी स्क्रिप्ट के साथ तालमेल रखने के लिए अलग कॉन्फ़िगरेशन फ़ाइल की आवश्यकता नहीं है। आपके पास केवल स्क्रिप्ट को बनाए रखने के लिए है।

इस पद्धति का कोई नकारात्मक पहलू नहीं है

सिस्टम पर अन्य उपयोगकर्ताओं के लिए पासवर्ड दिखाई नहीं देता है (यह दिखाई देगा यदि यह कमांड लाइन पर है)। पर्यावरण चर केवल mysql कमांड, और रूट चलाने वाले उपयोगकर्ता को दिखाई देते हैं।

पासवर्ड उस व्यक्ति को भी दिखाई देगा जो स्वयं स्क्रिप्ट पढ़ सकता है, इसलिए सुनिश्चित करें कि स्क्रिप्ट स्वयं सुरक्षित है। यह किसी भी तरह से कॉन्फ़िगरेशन फ़ाइल की सुरक्षा से अलग नहीं है। यदि आप स्क्रिप्ट को सार्वजनिक रूप से पठनीय ( export MYSQL_PWD=$(cat /root/mysql_password)उदाहरण के लिए) चाहते हैं, तब भी आप किसी भिन्न फ़ाइल से पासवर्ड का स्रोत बना सकते हैं । कॉन्फ़िगरेशन फ़ाइल बनाने की तुलना में किसी चर को निर्यात करना अभी भी आसान है।

उदाहरण के लिए,

$ export MYSQL_PWD=$(>&2 read -s -p "Input password (will not echo): "; echo "$REPLY")
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
$ mysqldump -u root mysql | head
-- MySQL dump 10.13  Distrib 5.6.23, for Linux (x86_64)
--
-- Host: localhost    Database: mysql
-- ------------------------------------------------------
-- Server version   5.6.23
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

हालांकि यह उत्तर वास्तव में "गलत" नहीं है, यह अभी तक सुरक्षित नहीं है, निर्यात किए जाने वाले पर्यावरण चर अभी भी आसानी से दिखाई दे रहे हैं जब कार्यक्रम चल रहा है ...
MatheusOl

4
@MatheusOl: पर्यावरण चर केवल रूट और उपयोगकर्ता के लिए ही दिखाई देते हैं - वही उपयोगकर्ता जिनके पास वैसे भी पासवर्ड रखने वाली कॉन्फ़िगरेशन फ़ाइल तक पहुंच होगी।
चुतज

1
@mniess तुम गलत हो। export MYSQL_PWD=...करता नहीं प्रक्रिया सूची में दिखाई। एक विभाजन दूसरे के लिए भी नहीं। ऐसा इसलिए है क्योंकि exportकमांड एक शेल बिलिन है (और होना है)। यदि आप इसे अपने शेल में निष्पादित करते हैं, तो शेल कमांड के तर्क के साथ एक प्रक्रिया को कांटा / निष्पादित नहीं करता है।
मैक्सक्लेपजिग

1
@maxschlepzig आपके अधिकार सही हैं। इस मामले में यह कोई फर्क नहीं पड़ता क्योंकि ईएनवी में पासवर्ड डालने से यह अन्य उपयोगकर्ताओं को वैसे भी दिखाई देता है (जैसा कि mysql प्रलेखन में चेतावनी दी गई है)
mniess

2
@mniess जैसा कि मैंने कहा है कि mysql प्रलेखन बहुत खराब और भ्रामक है। 'बेहद असुरक्षित माना जाना चाहिए और इसका इस्तेमाल नहीं किया जाना चाहिए' लिनक्स और अन्य प्रणालियों का उपयोग करते समय बस गलत और बुरी सलाह है। और यह आपके दावे का समर्थन नहीं करता है: 'क्योंकि ENV में पासवर्ड डालने से यह अन्य उपयोगकर्ताओं को वैसे भी दिखाई देता है'। साइड नोट: मजाकिया हालांकि ओरेकल कमांड लाइन पर पासवर्ड पास करने के लिए कैसे नहीं करता है जो वास्तव में बेहद असुरक्षित है।
मैक्सक्लेपज़िग

42

OS के अंदर कहीं भी एक फ़ाइल का उपयोग करने के लिए, --defaults-extra-fileउदाहरण के लिए उपयोग करें :

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > [desiredoutput].sql

नोट: .sqlpwdसिर्फ एक उदाहरण फ़ाइल नाम है। आप अपनी इच्छानुसार उपयोग कर सकते हैं।

नोट: MySQL स्वचालित रूप से जांच करेगा ~/.my.cnfजिसके लिए इसका उपयोग किया जा सकता है--defaults-extra-file

अगर आपके मेरे जैसे CRON का उपयोग कर रहे हैं, तो यह कोशिश करो!

mysqldump --defaults-extra-file=/path/.sqlpwd [database] > "$(date '+%F').sql"

आवश्यक अनुमति और अनुशंसित स्वामित्व

sudo chmod 600 /path/.sqlpwd && sudo chown $USER:nogroup /path/.sqlpwd

.sqlpwd सामग्री:

[mysqldump]
user=username
password=password

अन्य उदाहरण में पारित करने के लिए .cnfया.sqlpwd

[mysql]
user=username
password=password

[mysqldiff]
user=username
password=password

[client]
user=username
password=password

यदि आप अपने आप डेटाबेस में लॉग इन करना चाहते हैं, तो आपको [mysql]उदाहरण के लिए प्रवेश की आवश्यकता होगी ।

अब आप एक उपनाम बना सकते हैं कि ऑटो आपको डीबी से जोड़ता है

alias whateveryouwant="mysql --defaults-extra-file=/path/.sqlpwd [database]"

आप केवल पासवर्ड भी डाल सकते हैं .sqlpwdऔर स्क्रिप्ट / क्ली के माध्यम से उपयोगकर्ता नाम पास कर सकते हैं । मुझे यकीन नहीं है कि इससे सुरक्षा में सुधार होगा या नहीं, यह एक अलग सवाल होगा।

संपूर्णता के लिए मैं बताऊंगा कि आप निम्नलिखित कार्य कर सकते हैं, लेकिन यह बहुत असुरक्षित है और इसका उपयोग कभी भी उत्पादन वातावरण में नहीं किया जाना चाहिए:

mysqldump -u [user_name] -p[password] [database] > [desiredoutput].sql

नोट: -p और पासवर्ड के बीच कोई स्पेस नहीं है।

उदाहरण गलत है, -pPassWordजबकि सही -p Passwordहै


2
यह सबसे अच्छा जवाब है, खासकर जब कई डेटाबेस और उपयोगकर्ता / पासवर्ड पर विचार करते हैं।
हज़ोक

BTW, लंबे विकल्प (जैसे-defaults-file) को छोटे विकल्पों (जैसे -u) से पहले रखा जाना चाहिए। Mysqldump संस्करण 5.7.17 पर परीक्षण किया गया।
सासदिन

@Sysadmin एक विकल्प तर्क एक डैश या दो डैश के साथ शुरू होता है, यह इस बात पर निर्भर करता है कि यह एक संक्षिप्त रूप है या विकल्प नाम का लंबा रूप है। कई विकल्पों में छोटे और लंबे दोनों रूप होते हैं। उदाहरण के लिए, -? और --help इस विकल्प के छोटे और लंबे रूप हैं जो MySQL प्रोग्राम को अपना मदद संदेश प्रदर्शित करने का निर्देश देते हैं। dev.mysql.com/doc/refman/8.0/en/command-line-options.html
FreeSoftwareServers

29

हाँ यह बहुत आसान है .... बस एक जादुई कमांड लाइन में और नहीं

mysqldump --user='myusername' --password='mypassword' -h MyUrlOrIPAddress databasename > myfile.sql

और हो गया :)


33
चेतावनी: कमांड लाइन इंटरफेस पर पासवर्ड का उपयोग करना असुरक्षित हो सकता है।
93196.93

6
@ वायटट्रॉन यह असुरक्षित हो सकता है, विशेष रूप से उस दिन में जब प्राचीन यूनिक्स प्रणालियों में आसानी से 10-15 लोग दिन के अधिकांश समय के लिए लॉग इन करते थे और vi भौंकते थे। एक आधुनिक VPS पर, जबकि आप IRC में 10-15 लोगों को शामिल कर सकते हैं और उनका उपयोग कर सकते हैं, केवल प्रशासक (ओं) के लिए शेल एक्सेस होना आम है।
क्रिस्टोस

3
इसके लिए धन्यवाद, मैं इसे डॉकटर डेबॉक्स में उपयोग कर रहा हूं। इसलिए सुरक्षा कोई मुद्दा नहीं है।
मिकीएलएल

7

मेरे लिए, MariaDB का उपयोग करते हुए मुझे यह करना पड़ा: फ़ाइल जोड़ें ~/.my.cnfऔर अनुमतियाँ बदलकर करें chmod 600 ~/.my.cnf। फिर फ़ाइल में अपने क्रेडेंशियल्स जोड़ें। मैजिक पीस जो मुझे याद आ रहा था, वह पासवर्ड क्लाइंट ब्लॉक (रेफ: डॉक्स ) के तहत होना चाहिए , जैसे:

[client]
password = "my_password"

[mysqldump]
user = root
host = localhost

यदि आप यहां आने के लिए देख रहे हैं कि मारियाबेड के साथ एक mysqldump कैसे किया जाए। एक [क्लाइंट] ब्लॉक के तहत पासवर्ड रखें, और फिर एक [mysqldump] ब्लॉक के तहत उपयोगकर्ता।


मैं MariaDB (साथ ही विशिष्ट होने के लिए 10.4) का उपयोग कर रहा हूं और मैंने केवल [mysqldump]अनुभाग के तहत पासवर्ड डाला है और इसने बिना किसी समस्या के काम किया है। उबंटू 18.04 एलटीएस
पॉल डेविस

3

यहाँ एक स्क्रिप्ट / बिन / श में डॉकर के लिए एक समाधान है:

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "[client]" > /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "user=root" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec echo "password=$MYSQL_ROOT_PASSWORD" >> /root/mysql-credentials.cnf'

docker exec [MYSQL_CONTAINER_NAME] sh -c 'exec mysqldump --defaults-extra-file=/root/mysql-credentials.cnf --all-databases'

बदलें [MYSQL_CONTAINER_NAME]और सुनिश्चित करें कि MYSQL_ROOT_PASSWORDआपके कंटेनर में पर्यावरण चर सेट किया गया है।

आशा है कि यह आपकी मदद करेगा जैसे यह मेरी मदद कर सकता है!


0

मेरे पास निम्नलिखित है।

/ Etc / mysqlpwd

[mysql]
user=root
password=password

निम्नलिखित उपनाम के साथ।

alias 'mysql -p'='mysql --defaults-extra-file=/etc/mysqlpwd'

एक पुनर्स्थापना करने के लिए मैं बस उपयोग करता हूं:

mysql -p [database] [file.sql]

-2

क्या --password = "" मेरे लिए 5.1.51 पर चल रहा है

mysqldump -h localhost -u <user> --password="<password>"

--password=xxxकमांड लाइन पर शामिल होने से पासवर्ड किसी को भी पढ़ने की क्षमता (या फ़ुल पीएस) करने की क्षमता के साथ दिखाई देगा - जो कि बहुत डिफ़ॉल्ट है।
रफा

-11

निश्चित रूप से मुझे लगता है कि यह बेहतर होगा और पूर्ण सीएमडी लाइन को रूट क्रॉस्टेब में जगह देनी चाहिए। कम से कम crontab संपादन को किसी ऐसे व्यक्ति के लिए प्रतिबंधित (पठनीय) है जो पहले से ही पासवर्ड जानता है .. इसलिए इसे सादे पाठ में दिखाने की कोई चिंता नहीं है ...

यदि एक साधारण mysqldump से अधिक की आवश्यकता है ... बस एक बैश स्क्रिप्ट रखें जो परमों के रूप में साख को स्वीकार करता है और अंदर की सुविधाओं को निष्पादित करता है ...

सरल में आधार फ़ाइल

#!/bin/bash
mysqldump -u$1 -p$2 yourdbname > /your/path/save.sql

Crontab में:

0 0 * * * bash /path/to/above/bash/file.sh root secretpwd 2>&1 /var/log/mycustomMysqlDump.log

3
नहीं, यह सुरक्षित नहीं होगा, जब आप पासवर्ड को कमांडलाइन करने के लिए जोड़ते हैं तो यह किसी को भी पढ़ने की क्षमता (या पूर्ण पीएस) करने की क्षमता के साथ दिखाई देता है - जो कि बहुत डिफ़ॉल्ट है। जब आप .my.cnf फ़ाइल जोड़ते हैं और 600 अधिकार सेट करते हैं तो यह केवल आपको दिखाई देता है।
rombarcz

-21

आप निम्नानुसार कमांड लाइन पर पासवर्ड निर्दिष्ट कर सकते हैं:

mysqldump -h <host> -u <user> -p<password> dumpfile

Mysqldump के विकल्प केस सेंसिटिव हैं!


नहीं, यह काम नहीं करता है, मुझे नहीं लगता कि यह समझता है कि -p पासवर्ड है
प्रकाश रमन

1
यह सुनिश्चित नहीं है कि इसे 1 वोट कैसे मिला, मैं इसे कम कर रहा हूं। जैसा कि यहां अन्य उत्तरों में देखा गया है, -p और दिए गए पासवर्ड के बीच कोई स्थान नहीं होना चाहिए। इसके अलावा, आपको आउटपुट को डंपफाइल पर पुनर्निर्देशित करना चाहिए, इसे निर्दिष्ट नहीं करना चाहिए जैसा आप कर रहे हैं, या इसे एक टेबल नाम माना जाएगा। @buzypi ने इसे बेहतरीन बताया।
नीक

यह काम करना चाहिए (हालांकि यह अन्य उपयोगकर्ताओं के लिए पासवर्ड देखने के लिए बहुत आसान है) में असुरक्षित है, आपको बस यह सुनिश्चित करने की आवश्यकता है कि -p और पासवर्ड के बीच कोई स्थान न हो जैसेmysqldump -u root -pmypassword
jx12345
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.