পাসওয়ার্ড প্রম্পট ছাড়াই কীভাবে মাইএসকিএলডাম সঞ্চালন করবেন?


229

আমি পাসওয়ার্ডের প্রম্পট ছাড়াই একটি ডাটাবেসের একটি মাইএসকিএলডম্প সম্পাদন করার কমান্ডটি জানতে চাই।

কারণ: আমি একটি ক্রোন জব চালাতে চাই, যা প্রতিদিন একবারে ডাটাবেসের মাইসকিল্ডাম্প নেয়। অতএব, অনুরোধ জানালে আমি পাসওয়ার্ডটি সন্নিবেশ করতে সক্ষম হব না।

আমি কীভাবে এটি সমাধান করতে পারি?

উত্তর:


412

যেহেতু আপনি উবুন্টু ব্যবহার করছেন, আপনার কেবলমাত্র আপনার হোম ডিরেক্টরিতে একটি ফাইল যুক্ত করা দরকার এবং এটি মাইএসকিल्डম্প্প পাসওয়ার্ড প্রম্পটিংটি অক্ষম করে। এটি ফাইল তৈরি করে করা হয় ~/.my.cnf(অনুমতিগুলি 600 হতে হবে)।

এটি .my.cnf ফাইলে যুক্ত করুন

[mysqldump]
user=mysqluser
password=secret

এটি আপনাকে এমন কোনও মাইএসকিউএল ব্যবহারকারী হিসাবে সংযুক্ত করতে দেয় যার পাসওয়ার্ডের প্রয়োজন নেই যা আসলে পাসওয়ার্ডটি প্রবেশ না করেই হয় password এমনকি আপনার -p বা - পাসওয়ার্ডের প্রয়োজন নেই।

স্ক্রিপ্টিং মাইএসকিএল এবং মাইএসকিলডাম্প কমান্ডগুলির জন্য খুব সহজ y

এটি অর্জনের পদক্ষেপগুলি এই লিঙ্কটিতে পাওয়া যাবে ।

বিকল্পভাবে, আপনি নিম্নলিখিত কমান্ডটি ব্যবহার করতে পারেন:

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

তবে সচেতন হন যে এটি অন্তর্নিহিতভাবে অনিরাপদ, কারণ একটি সাধারণ ps axকমান্ডের সাহায্যে ডাম্প চলাকালীন পুরো কমান্ডটি (পাসওয়ার্ড সহ) সিস্টেমের অন্য কোনও ব্যবহারকারী দেখতে পাবে ।


55
কমান্ড লাইনে -p কেটে দেওয়া অন্যান্য উত্তরগুলিকে ডাউনভোট করেছে, যেহেতু কোনও ব্যবহারকারীর রুট বা ব্যবহারকারীর পাসওয়ার্ড দেখতে পিক্স করতে পারেন can উপরের ফাইল পরামর্শটি ব্যবহার করা সর্বাধিক সুরক্ষিত
এডি

19
যদি কোনও বিশ্বব্যাপী সেটিংস কোনও বিকল্প না হয় (যদি আপনার সাথে সংযোগ করার জন্য কেবল একটি মাইএসকিএল উদাহরণ না থাকে) তবে আপনি কনফিগার ফাইলটি সেট করে নিতে পারেন --defaults-file। ভালো লেগেছে `mysqldump --defaults ফাইল = my_other.cnf --print-defaults`
ডেনিস

3
@ কান্তে: এটি নিরাপদ। এটি কেবলমাত্র সেই ব্যবহারকারীদের জন্য উপলব্ধ যার সাথে .my.cnf ফাইল অন্তর্ভুক্ত।
ইয়ান সাগান

7
উইন্ডোজে, কনফিগারেশন ফাইলটি নেই ~/.my.cnfস্ট্যাকওভারফ্লো . com/a/14653239/470749 দেখুন । মাইএসকিউএল আমার আশা করবে c:\wamp\bin\mysql\mysql5.5.24\my.cnf। সুতরাং আমি সেখানে একটি ফাইল তৈরি। মাইএসকিএল পুনরায় চালু করার প্রয়োজন ছিল না; এটি আমার পরবর্তী মাইএসকিলডাম্পের জন্য অবিলম্বে কাজ করেছে।
রায়ান

6
সুরক্ষা একটি স্তর যুক্ত করতে, আপনার একটি উত্সর্গীকৃত, অ ডাটাবেস নির্দিষ্ট, কেবলমাত্র পঠনযোগ্য ব্যবহারকারী এবং কোনও ক্ষেত্রেই ব্যবহারকারীর ব্যবহার করা উচিত the : এটা ভালো কাজ করা যেতে পারেGRANT LOCK TABLES, SELECT ON *.* TO 'BACKUPUSER'@'%' IDENTIFIED BY 'PASSWORD';
gadjou

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


ড্যামনিট, প্রচুর এক্সএএমপিপি টিউটোরিয়াল -p ব্যাখ্যা না করেই অন্তর্ভুক্ত করে। এটি ফাঁকা পাসওয়ার্ড বাইপাস করার জন্য কাজ করে না ...
নেলসন

47

কয়েকটি উত্তর একটি কনফিগারেশন ফাইলে পাসওয়ার্ড রাখার উল্লেখ করে।

বিকল্পভাবে, আপনার স্ক্রিপ্ট থেকে আপনি পারেন export MYSQL_PWD=yourverysecretpassword

কনফিগারেশন ফাইল ব্যবহার করার ক্ষেত্রে এই পদ্ধতির উল্টোটি হ'ল আপনার স্ক্রিপ্টের সাথে সিঙ্ক রাখতে আপনার আলাদা কনফিগারেশন ফাইলের প্রয়োজন নেই। আপনার কাছে কেবল রক্ষণাবেক্ষণের জন্য স্ক্রিপ্ট রয়েছে।

নেই কোন downside হয় এই পদ্ধতি করতে।

পাসওয়ার্ডটি নেই সিস্টেমে অন্য ব্যবহারকারীদের কাছে দৃশ্যমান (এটি যদি কমান্ড লাইনে থাকে তবে তা দৃশ্যমান হবে)। এনভায়রনমেন্ট ভেরিয়েবলগুলি কেবল মাইএসকিএল কমান্ড এবং রুট ব্যবহারকারী ব্যবহারকারীর কাছে দৃশ্যমান।

যে কেউ স্ক্রিপ্ট নিজেই পড়তে পারে সেই পাসওয়ার্ডটিও দৃশ্যমান হবে, সুতরাং স্ক্রিপ্টটি নিজেই সুরক্ষিত রয়েছে তা নিশ্চিত করুন। এটি কোনওভাবেই কোনও কনফিগারেশন ফাইল সুরক্ষার চেয়ে আলাদা নয়। আপনি যদি স্ক্রিপ্টটি সর্বজনীনভাবে পঠনযোগ্য করতে চান তবে আপনি আলাদা ফাইল থেকে পাসওয়ার্ড উত্স করতে পারেন (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 */;

যদিও এই উত্তরটি সত্যই "ভুল" নয় তবে এটি এখনও নিরাপদ নয়, পরিবেশগত পরিবর্তনগুলি রফতানি করা প্রোগ্রামটি চলমান অবস্থায় এখনও সহজেই দৃশ্যমান হয় ...
ম্যাথিউস ওল

4
@ ম্যাথিউসঅল: পরিবেশের ভেরিয়েবলগুলি কেবলমাত্র রুট এবং ব্যবহারকারী নিজেই দৃশ্যমান - একই ব্যবহারকারীর পাসওয়ার্ড ধারণকারী একটি কনফিগারেশন ফাইল অ্যাক্সেস করতে পারে।
চুটজ

1
@mniess আপনি ভুল বলেছেন। export MYSQL_PWD=...নেই না প্রক্রিয়া তালিকায় প্রদর্শিত। এমনকি একটি বিভক্ত দ্বিতীয় জন্য না। এর কারণ হ'ল exportকমান্ডটি শেল বিল্টিন (এবং থাকতে হবে)। সুতরাং শেল কমান্ডের যুক্তি দিয়ে একটি প্রক্রিয়া কাঁটাচামচ / চালায় না যদি আপনি এটি আপনার শেলের মধ্যে চালান।
ম্যাক্সচলেপজিগ

1
@ mamaschlepzig আপনার ঠিক আছে। এক্ষেত্রে কিছু যায় আসে না কারণ ENV- এ পাসওয়ার্ডটি রাখলে এটি অন্য ব্যবহারকারীদের কাছে দৃশ্যমান হয়ে যায় (যেমন
মাইএসকিএল

2
@ এমনিজস যেমনটি আমি বলেছি যে মাইএসকিউএল ডকুমেন্টেশন খুব দুর্বল এবং বিভ্রান্তিকর। 'অবশ্যই অত্যন্ত সুরক্ষিত হিসাবে বিবেচিত হওয়া উচিত এবং এটি ব্যবহার করা উচিত নয়' লিনাক্স এবং অন্যান্য সিস্টেমগুলি ব্যবহার করার সময় কেবল ভুল এবং খারাপ পরামর্শ। এবং এটি আপনার দাবিকে সমর্থন করে না যা ছিল: 'কারণ পাসওয়ার্ডটি ENV এ রাখলে তা অন্য ব্যবহারকারীদের কাছে দৃশ্যমান হয়ে যায়'। সাইড নোট: যদিও কিভাবে ওরাকল কমান্ড লাইন যা আসলে পাসওয়ার্ড ক্ষণস্থায়ী বিনয়ী নেই মজার হয় অত্যন্ত অনিরাপদ।
maxschlepzig

42

OS এর অভ্যন্তরে যে কোনও ফাইল ব্যবহার করতে, --defaults-extra-fileউদাহরণস্বরূপ ব্যবহার করুন :

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

দ্রষ্টব্য: .sqlpwdফাইলের নাম মাত্র। আপনি যা ইচ্ছা ব্যবহার করতে পারেন।

দ্রষ্টব্য: মাইএসকিউএল স্বয়ংক্রিয়ভাবে যাচাই করবে ~/.my.cnfযা পরিবর্তে ব্যবহার করা যেতে পারে--defaults-extra-file

আপনি যদি আমার মতো ক্রোন ব্যবহার করেন তবে এটি ব্যবহার করে দেখুন!

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]প্রবেশের প্রয়োজন হবে entry

আপনি এখন এমন একটি উপাধি তৈরি করতে পারেন যা স্বয়ংক্রিয়ভাবে আপনাকে ডিবিতে সংযুক্ত করে

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

আপনি কেবল পাসওয়ার্ডের ভিতরে রাখতে পারেন .sqlpwdএবং স্ক্রিপ্ট / ক্লিপের মাধ্যমে ব্যবহারকারীর নামটি পাস করতে পারেন। আমি নিশ্চিত নই যে এটির নিরাপত্তার উন্নতি হবে কি না, এটি সামগ্রিকভাবে একটি আলাদা প্রশ্ন হবে।

সম্পূর্ণতার জন্য আমি আপনাকে জানাতে চাই যে আপনি নিম্নলিখিতগুলি করতে পারেন তবে চরম অনিরাপদ এবং কখনও কখনও উত্পাদন পরিবেশে ব্যবহার করা উচিত নয়:

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

দ্রষ্টব্য: -p এবং পাসওয়ার্ডের মধ্যে কোনও স্পেস নেই।

যেমন ভুল -pPassWordযখন উদাহরণস্বরূপ -p Password


2
এটি সর্বোত্তম উত্তর, বিশেষত যখন একাধিক ডাটাবেস এবং ব্যবহারকারী / পাসওয়ার্ড বিবেচনা করে।
হাজোক

বিটিডাব্লু, দীর্ঘ বিকল্পগুলি (যেমন --defeults-file) সংক্ষিপ্ত বিকল্পগুলির আগে স্থাপন করা উচিত (যেমন -u)। মাইসকিल्डম্প্প সংস্করণ 5.7.17 এ পরীক্ষিত।
সিসাদমিন

@ সিসাদমিন একটি বিকল্প যুক্তি একটি ড্যাশ বা দুটি ড্যাশ দিয়ে শুরু হয়, এটি বিকল্প নামের একটি সংক্ষিপ্ত রূপ বা দীর্ঘ ফর্ম কিনা তার উপর নির্ভর করে। অনেক বিকল্পের সংক্ষিপ্ত এবং দীর্ঘ উভয় ফর্ম রয়েছে। উদাহরণ স্বরূপ, -? এবং --help হ'ল অপশনটির সংক্ষিপ্ত এবং দীর্ঘ রূপ যা কোনও মাইএসকিউএল প্রোগ্রামকে তার সহায়তা বার্তা প্রদর্শন করার নির্দেশ দেয়। 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 ছড়িয়ে পড়ে। একটি আধুনিক ভিপিএসে, আপনার আইআরসি ব্যবহার করে 10-15 জন লোক শেল করা থাকতে পারে তবে কেবল প্রশাসক (গুলি) এর পক্ষে শেল অ্যাক্সেস পাওয়া সাধারণ।
ক্রিস্টোস হেওয়ার্ড

3
এর জন্য ধন্যবাদ, আমি এটি একটি ডকার ডেভবক্সে ব্যবহার করছি। সুতরাং সুরক্ষা কোনও সমস্যা নয়।
মাইকিএলএল

7

আমার জন্য, মারিয়াডিবি ব্যবহার করে আমাকে এটি করতে হয়েছিল: ফাইল যুক্ত করুন ~/.my.cnfএবং এর মাধ্যমে অনুমতিগুলি পরিবর্তন করুন chmod 600 ~/.my.cnf। তারপরে ফাইলটিতে আপনার শংসাপত্র যুক্ত করুন। আমি যে ম্যাজিক পিসটি হারিয়েছিলাম তা হ'ল পাসওয়ার্ডটি ক্লায়েন্ট ব্লকের (রেফার: ডক্স ) এর অধীনে থাকা দরকার :

[client]
password = "my_password"

[mysqldump]
user = root
host = localhost

আপনি যদি মারিয়াডিবির সাথে কীভাবে একটি মাইএসকিল্ডাম্প করবেন তা সন্ধান করতে এখানে আসার ঘটনা ঘটে। পাসওয়ার্ডটি একটি [ক্লায়েন্ট] ব্লকের নীচে রাখুন এবং তারপরে ব্যবহারকারীকে [মাইএসকিএলডাম্প] ব্লকের নীচে রাখুন।


আমি পাশাপাশি মারিয়াডিবি ব্যবহার করছি (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কমান্ড লাইন পাসওয়ার্ড করতে হবে যা প্রশংসনীয় ডিফল্ট - proc পড়তে (বা পূর্ণ PS না) ক্ষমতা সকলের কাছে দৃশ্যমান।
রাফা

-11

অবশ্যই আমি মনে করি যে শংসাপত্রগুলির সাথে পূর্ণ সিএমডি লাইনটি মূল ক্রন্টবায় স্থাপন করা আরও ভাল এবং নিরাপদ হবে। কমপক্ষে ক্রন্টব সম্পাদনা এমন কাউকেই সীমাবদ্ধ করা হয়েছে (পঠনযোগ্য) যা ইতিমধ্যে পাসওয়ার্ডটি জানে .. তাই সাধারণ পাঠ্যে এটি দেখানোর কোনও উদ্বেগ নেই ...

যদি কোনও সাধারণ মাইএসকিলডাম্পের চেয়ে বেশি প্রয়োজন হয় ... কেবলমাত্র একটি বাশ স্ক্রিপ্ট রাখুন যা শংসাপত্রগুলিকে প্যারাম হিসাবে গ্রহণ করে এবং ভিতরে সমস্ত সুযোগসুবিধা সম্পাদন করে ...

সহজভাবে বেস ফাইল

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

ক্রোনটবে:

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

3
না, এটি নিরাপদ হবে না, যখন আপনি কমান্ডলাইনে পাসওয়ার্ড যুক্ত করেন এটি প্রোক পড়ার ক্ষমতা (বা পুরো পিএস করতে) যে কারও কাছে দৃশ্যমান - যা বেশ ডিফল্ট। আপনি যখন .my.cnf ফাইল যুক্ত করেন এবং 600 টি অধিকার সেট করেন এটি কেবল আপনার কাছে দৃশ্যমান।
রোম্বার্কজ

-21

আপনি নিম্নলিখিতভাবে কমান্ড লাইনে পাসওয়ার্ড নির্দিষ্ট করতে পারেন:

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

মাইএসকিএলডাম্পের বিকল্পগুলি কেস সংবেদনশীল!


না, এটি কাজ করে না, আমি মনে করি না যে এটি বুঝতে পারে যে -p পাসওয়ার্ড
প্রকাশ রমন

1
এটি কীভাবে 1 টি ভোট পেয়েছে তা নিশ্চিত নই, আমি এটিকে নীচে নামছি। এখানে অন্যান্য উত্তরে যেমন দেখা যায়, -p এবং প্রদত্ত পাসওয়ার্ডের মধ্যে কোনও স্থান থাকতে হবে না। এছাড়াও আপনার আউটপুটটি ডাম্পফাইলে পুনর্নির্দেশ করা উচিত, আপনি যা করছেন তা নির্দিষ্ট করে না বা এটি একটি টেবিলের নাম হিসাবে ধরে নেওয়া হবে be @ বুজিপি এটি সেরা বলেছে।
নীক

এটি কাজ করা উচিত (যদিও এটি অন্য ব্যবহারকারীদের পক্ষে পাসওয়ার্ড দেখার পক্ষে সুরক্ষিত তবে এটি mysqldump -u root -pmypassword
নিরাপদ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.