سؤال

أحاول استخدامها mysqldump لتفريغ المخطط، وهو يعمل في الغالب ولكن واجهت فضولًا واحدًا:ال -p أو --password يبدو أن الخيار يفعل شيئًا آخر غير تعيين كلمة المرور (مثل man الصفحة و --help يقول الإخراج أنه ينبغي).

على وجه التحديد، يبدو أنه يفعل ما هو موضح هنا: http://snippets.dzone.com/posts/show/360 - أي ضبط قاعدة البيانات على التفريغ.

لدعم ادعائي الغريب إلى حد ما، يمكنني أن أخبرك أنه إذا لم أحدد --password (أو -p) ، يقوم الأمر بطباعة بيان الاستخدام ويخرج مع ظهور خطأ.إذا قمت بتحديد ذلك، فسيُطلب مني على الفور إدخال كلمة المرور (!)، ثم قاعدة البيانات المحددة في ملف --password تم تفريغ الخيار (أو يتم إعطاء خطأ في الحالة المعتادة التي تم فيها تحديد كلمة مرور لا تتطابق مع أي اسم لقاعدة البيانات).

وهنا نسخة:

    $ mysqldump -u test -h myhost --no-data --tables --password lose
    Enter password: 
    -- MySQL dump 10.10
    mysqldump: Got error: 1044: Access denied for user 'test'@'%' to
    database 'lose' when selecting the database

إذن، ما الذي يعطي؟هل هذه هي الطريقة التي من المفترض أن يعمل بها هذا؟من المؤكد أنه لا يبدو منطقيًا ولا يتطابق مع الوثائق الرسمية.وأخيرًا، إذا كانت هذه هي الطريقة التي تعمل بها، فكيف من المفترض أن أحدد كلمة المرور لاستخدامها في مهمة تلقائية؟استخدام expect???

أنا استخدم mysqldump Ver 10.10 Distrib 5.0.22, for pc-linux-gnu (i486).

هل كانت مفيدة؟

المحلول

من الرجل mysqldump:

--كلمة المرور[=كلمة المرور]، -p[كلمة المرور]

كلمة السر لاستخدامها عند الاتصال بالخادم.إذا كنت تستخدم نموذج الخيار القصير (-P) ، فلا يمكن أن يكون لديك مساحة بين الخيار وكلمة المرور.إذا قمت بحذف قيمة كلمة المرور بعد خيار -password أو -P على سطر الأوامر ، تتم مطالبتك بواحد.
يجب اعتبار تحديد كلمة مرور على سطر الأوامر غير آمن.راجع القسم 6.6، "الحفاظ على كلمة المرور الخاصة بك آمنة".

من الناحية التركيبية، أنت لا تستخدم مفتاح --password بشكل صحيح.على هذا النحو، يرى محلل سطر الأوامر استخدامك لـ "lose" كوسيطة مستقلة يفسرها mysqldump كاسم قاعدة البيانات كما لو كنت ستحاول تنفيذ أمر أبسط مثل mysqldump lose

لتصحيح هذا، حاول استخدام --password=lose أو -plose أو ببساطة استخدم -p أو --password واكتب كلمة المرور عندما يُطلب منك ذلك.

نصائح أخرى

خيار آخر هو إنشاء الملف ~/.my.cnf (الأذونات يجب أن تكون 600).

أضف هذا إلى ملف .my.cnf

[client]
password=lose

يتيح لك ذلك الاتصال كمستخدم MySQL الذي يحتاج إلى كلمة مرور دون الحاجة إلى إدخال كلمة المرور فعليًا.لا تحتاج حتى إلى -p أو --password.

مفيد جدًا في برمجة أوامر mysql وmysqldump.

لقد وجدت أن هذا يحدث إذا كانت كلمة المرور الخاصة بك تحتوي على أحرف خاصة.تحتوي كلمة مرور MySQL هنا على !فيه، لذا يجب أن أفعل ==password='xxx!xxxx' حتى يعمل بشكل صحيح.لاحظ العلامات ".

لست متأكدًا مما إذا كان يعمل مع إصدار --password، ولكن إذا كنت تستخدم -p فيمكنك تحديد كلمة المرور فورًا بعد ذلك (المفتاح هو عدم تضمين مسافة):

Mysqldump -pmypassword ...

حاول وضع "=" بينهما - تفقد كلمة المرور مثل:

--password=lose

إذا كنت تستخدم -p، فلا يمكن أن يكون هناك مسافة بين -p وكلمة المرور، أي."-بلوز".

هل حاولت --password=whatever-password-is ؟

ربما لم أتمكن من الإجابة على هذا السؤال، ولكن هذا ما أفعله لتشغيل الأداة.

إذا كنت تستخدم -p أو --password بدون وسيطة، فسوف تحصل على مطالبة تطلب منك إدخال كلمة مرور.

إذا كنت تريد الإشارة إلى كلمة مرور في سطر الأوامر، فيجب عليك استخدام -pYOURPASSWORD أو --password=YOURPASSWORD.لاحظ أنه لا توجد مسافة بعد -p، وهناك علامة "=" بعد --password.

في المثال الخاص بك، يطلب mysqldump كلمة مرور، ثم يعامل "lose" كاسم قاعدة البيانات.إذا كانت هذه هي كلمة المرور الخاصة بك، فيجب عليك تضمين "="

لا يتطلب الخيار -p وسيطة.ما عليك سوى وضع -p أو --password للإشارة إلى أنك ستستخدم كلمة مرور للوصول إلى قاعدة البيانات.السبب وراء تفريغ قاعدة البيانات المسماة كل ما تضعه بعد -p هو أن الوسيطة الأخيرة لـ mysqldump يجب أن تكون اسم قاعدة البيانات التي تريد تفريغها (أو --all-databases إذا كنت تريدها كلها).

إجابة @ ناثان صحيحة أيضًا.يمكنك تحديد كلمة المرور في الحال باتباع المفتاح -p (مفيد في البرامج النصية، حيث لا يمكنك إدخاله يدويًا بعد تنفيذ الأمر).

--كلمة المرور[=كلمة المرور]

هنا هو توثيق

ربما لا يمتلك "اختبار" المستخدم الخاص بك الإذن للوصول إلى قاعدة البيانات "الخسارة" الخاصة بك؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top