2011-07-28 36 views
42

Tôi đã viết một kịch bản để sao lưu cơ sở dữ liệu MySQL của tôi sử dụng:Mysqldump đưa ra bởi cron và mật khẩu bảo mật

mysqldump --opt --all-databases -u user -pmypassword > myDump.sql 

Một cron khởi chạy nó mỗi đêm và scp kết quả đến máy chủ khác. mypassword xuất hiện rõ ràng trong tập lệnh của tôi, mọi người đều có thể thấy nó với các quyền thích hợp. Tôi đã được nói về/proc vấn đề quá (nơi chạy cmd có thể được nhìn thấy).

tài liệu MySQL nói:

Xác định một mật khẩu trên dòng lệnh cần được xem xét không an toàn. Xem Phần 7.6, "Bảo mật mật khẩu của bạn".

Tôi chưa tìm thấy phần ma thuật này 7.6 ở bất kỳ đâu.

Thực tiễn tốt để xử lý bảo mật mysqldump và mật khẩu tự động là gì?

+1

http://bugs.mysql.com/bug.php?id=13058 Đọc câu trả lời được đưa lên các báo cáo lỗi. Nó dẫn đến việc thêm mật khẩu như một tệp tùy chọn: http://dev.mysql.com/doc/refman/5.5/en/option-files.html. Không biết nếu điều này sẽ giúp đỡ. –

+1

Thông tin thêm một chút: http://www.webhostingtalk.com/showpost.php?s=044cd482ca45a726660c48eff2dfb704&p=5066589&postcount=10 –

Trả lời

48

Trích dẫn các tài liệu MySQL (http://dev.mysql.com/doc/refman/5.1/en/password-security-user.html):

Lưu mật khẩu của bạn vào tệp tùy chọn. Ví dụ, trên Unix bạn có thể liệt mật khẩu của bạn trong [khách hàng] phần của tập tin .my.cnf trong thư mục chính của bạn:

[client] 
password=your_pass 

Để giữ mật khẩu an toàn, các tập tin không nên tiếp cận với bất cứ ai nhưng bản thân bạn. Để đảm bảo điều này, thiết lập chế độ truy cập tập tin đến 400 hoặc 600. Ví dụ:

shell> chmod 600 .my.cnf 

để đặt tên từ dòng lệnh một tập tin tùy chọn cụ thể có chứa mật khẩu, sử dụng tùy chọn --defaults-file=file_name, nơi file_name là tên đường dẫn đầy đủ vào tệp.

+0

Cảm ơn bạn rất nhiều vì câu trả lời này! Chính xác những gì tôi cần. – localshred

+0

Đang thử cách này. Tôi sẽ biết trong một vài ngày nếu nó làm những gì tôi cần, một khi logrotate chạy một lần nữa. –

+0

Điều xấu là MySQL sẽ không hỏi bất kỳ mật khẩu nào sau đó. Điều được mong muốn chỉ là mật khẩu không bị lộ khi chạy _mysqldump_. – ajaaskel

2

Khám phá Keeping Passwords Secure để có câu trả lời hay. Bạn có thể lưu trữ mật khẩu của bạn trong tệp my.cnf thay đổi quyền trên tệp đó để giữ an toàn cho mật khẩu.

Bạn cũng có thể kiểm tra những nhận xét cuối cùng trên trang này quá:

MYSQL_PWD = "tinkerbell" mysqldump -ubackup --all-cơ sở dữ liệu> dump.sql

22

để thêm vào câu trả lời của Sahil trên, sử dụng --defaults-phụ-file

--defaults-phụ-file được sử dụng để nói với một chương trình để đọc một tập tin tùy chọn cụ thể đơn lẻ ngoài các tệp tùy chọn chuẩn.

trong khi - mặc định-tệp được đọc thay vì tệp my.cnf mặc định.

+0

Tuyệt vời, hữu ích! – iwalktheline

+5

Phải là đối số * đầu tiên * cho mysqldump, dưới dạng '--defaults-extra-file = my-file'. Đã cho tôi một vài lần lặp để đọc tài liệu ... – semperos

+0

Thao tác này sẽ thực hiện công việc như mong đợi. – ajaaskel

1

Các phương pháp sau đây làm việc cho tôi trên một máy Windows, nếu bạn có 2 phiên bản của MySQL được cài đặt, và bạn không chắc chắn mà my.ini được sử dụng khi bạn chạy mysqldump, điều này cũng sẽ giúp:

1 , C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ của tôi.ini, tiền phạt [khách hàng], thay thế nó để:

[client] 
user=my_user 
password=my_password 

2, Sử dụng lệnh này:

C: \ Program Files \ MySQL Server 5.6 \ bin> mysqldump --default-phụ-file =" C: \ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini "-u my_user db_to_export> db_to_export.sql

2

Tất cả các câu trả lời ở đây đều thành từng phần để chia sẻ lệnh hoàn chỉnh sẽ thực hiện yêu cầu và phải được sử dụng nếu cơ sở dữ liệu có kích thước lớn, --single-transaction--lock-tables rất quan trọng ở đây

mysqldump --defaults-extra-file=/home/dangi/.my.cnf -u root --single-transaction --quick --lock-tables=false --all-databases (or) DATABASE | gzip > OUTPUT.gz; 

Lưu ý: Câu trả lời bổ sung thêm câu trả lời của Avibodha và sahil, họ đã đưa ra vấn đề. Tôi chỉ đưa câu trả lời của họ vào một đoạn mã duy nhất với important measure should be taken at time of backing up live database

1

Câu trả lời được chấp nhận lưu trữ mật khẩu trong một tệp văn bản thuần túy, có thể được đọc bởi bất kỳ ai có quyền truy cập quản trị (root). Nếu cơ sở dữ liệu của bạn nằm trong môi trường lưu trữ được chia sẻ, điều này là không mong muốn.

Tùy chọn tốt hơn là sử dụng mysql_config_editor để tạo đường dẫn đăng nhập được mã hóa có tên mysqldump. Theo MySQL documentation:

mysql_config_editor mã hóa các tập tin .mylogin.cnf vì vậy nó không thể được đọc như dạng cleartext, và nội dung của nó khi giải mã bởi các chương trình khách hàng chỉ được sử dụng trong bộ nhớ. Bằng cách này, mật khẩu có thể được lưu trữ trong một tập tin ở định dạng không rõ ràng và được sử dụng sau này mà không cần phải được tiếp xúc trên dòng lệnh hoặc trong một biến môi trường.

Lệnh sau sẽ tạo ra con đường mysqldump đăng nhập của bạn:

mysql_config_editor --login-path=mysqldump --host=your_hostname --user=your_username --password 

Bạn sẽ được nhắc nhở để nhập mật khẩu của bạn, và đường dẫn đăng nhập mà bạn tạo ra sẽ được lưu trữ trong định dạng mã hóa. mysqldump sẽ tự động sử dụng đường dẫn đăng nhập này bất cứ khi nào bạn gọi nó trong tương lai, trừ khi bạn chỉ định một đường dẫn đăng nhập khác với tùy chọn dòng lệnh --login-path.

Đây là cách bạn sẽ gọi mysqldump sau khi tạo một đường dẫn đăng nhập được mã hóa:

mysqldump database_name > output_file 
Các vấn đề liên quan