mysqldump nhắc nhập mật khẩu trong shellscript


9

Tôi đã viết một kịch bản shell đơn giản để kết xuất một cơ sở dữ liệu mysql cụ thể. vấn đề là nó đang nhắc tôi nhập mật khẩu mặc dù tôi cung cấp. Mã mys mys là phiên bản 5.0.27 nếu có vấn đề. Đây là dòng cụ thể tôi đang sử dụng.

$MYSQLDUMP -u backup -p$MyPass $DB > $DEST/$FILE

Tôi đã thử một vài biến thể, nhưng không có kết quả.

Câu trả lời:


4

Tôi muốn đặt cược rằng $MyPassnó không được đặt đúng trong kịch bản của bạn. Nếu bất kỳ công cụ dòng lệnh mysql nào nhận được -pmật khẩu không được theo dõi ngay lập tức, họ cho rằng họ nên nhắc nhập mật khẩu. Mặt khác, nếu bạn cung cấp một mật khẩu không chính xác (hoặc tên người dùng sai hoặc tương tự) thì nó sẽ không kết nối được.

Vì vậy, tôi khuyên bạn nên đặt một echolệnh ở đầu dòng đó và chạy lại tập lệnh của bạn, như vậy:

echo $MYSQLDUMP -u backup -p$MyPass $DB

Đừng quên xóa chuyển hướng đầu ra.


1
doh, đó là biến ngu ngốc, đã vượt qua giới hạn khi nó được đặt so với chữ thường trong dòng trên. cảm ơn mọi người
aduljr

18

Một giải pháp tốt hơn sẽ là lưu trữ tên người dùng và mật khẩu trong một tệp cấu hình và trỏ đến tệp cấu hình đó. Bằng cách có nó trong dòng lệnh, bất cứ ai có thể chạy ps đều có thể tìm thấy mật khẩu cho máy chủ của bạn.

Vượt qua --defaults-extra-file=/pathto/database.cnfbãi chứa mysql.

Các tập tin cấu hình cần phải trông như thế này. Đặt quyền hệ thống tệp để chỉ có quá trình sao lưu mới có thể mở tệp cấu hình.

[client]
host     = servername.domain.tld
user     = backup
password = strongpassword

Cập nhật (2016-06-29) Nếu bạn đang chạy mysql 5.6.6 trở lên, bạn nên xem công cụ mysql_config_editor cho phép bạn lưu thông tin đăng nhập trong một tệp được mã hóa. Cảm ơn Giovanni đã đề cập điều này với tôi.


nó là một người dùng cụ thể cho cơ sở dữ liệu đó với chỉ đủ quyền để thực hiện sao lưu. Chỉ có hai người có quyền truy cập vào máy chủ này, tôi và một người khác. Nhưng tôi sẽ sử dụng ý tưởng tập tin cnf đó. không bao giờ biết về lựa chọn đó. cảm ơn
aduljr

3
Tôi biết đây là một câu trả lời cũ, nhưng vẫn hiển thị khi tìm cách vượt qua mật khẩu một cách an toàn và nó cũng được liên kết từ các bài đăng khác. Sử dụng phiên bản 5.5, tôi đã phải đóng gói từ khóa trong các dấu kiểm đơn trong tệp cấu hình, chẳng hạn như nếu mật khẩu của tôi là aoeu1234, tệp cấu hình của tôi có password = 'aoeu1234'; nếu không, bạn sẽ nhận được một lỗi trái phép.
Damon

Tự hỏi nếu có một giải pháp không bao gồm mật khẩu trong Cleartext trong tệp .cnf.
Bob Stein

@Zoredache, thế nào "bất cứ ai có thể chạy ps có thể tìm ra mật khẩu cho máy chủ của bạn"?
Pacerier

@Damon, và nếu mật khẩu của bạn có những dấu tick này thì sao?
Pacerier
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.