2009-03-02 25 views
10

Tôi đã cố gắng thực hiện công việc sao lưu cron trên máy chủ web đang chạy FreeBSD. Hiện nay nó trông giống như sau:Công việc cron sao lưu MySQL an toàn - my.cnf không được đọc

/usr/local/bin/mysqldump --opt --single-transaction --comments --dump-date --no-autocommit --all-databases --result-file=/var/backups/mysql/all.sql

Nó hoạt động tốt khi tôi chạy nó như là người chủ (từ gốc có .my.cnf với tên người dùng và mật khẩu dùng để kết nối, nhưng khi công việc được chạy bởi cron, file my.cnf không được đọc.

có cách nào để khắc phục điều đó mà không cần phải đặt tên truy cập và mật khẩu vào các lệnh riêng của mình (vì đó là kinda không an toàn)?

Thật lạ, tôi có cùng một thiết lập với PostgreSQL và một tệp .pgpass, và nó hoạt động giống như một sự quyến rũ.

Trả lời

16

Sử dụng --defaults-extra-file tùy chọn để cho nó nơi để tìm các tập tin .my.cnf (giả sử nó có thể đọc được bởi bất cứ người dùng đang chạy mysqldump

+0

* thở dài * dễ dàng;) * upvote * – Node

+0

Ah, vâng. Làm thế nào tôi đã bỏ lỡ điều đó. Tôi sẽ chỉ dính vào công việc hàng đêm của mình. Rất mong nhận được thông báo khi tôi đang ngủ :) – mikl

+0

thực sự, không dễ dàng tìm thấy trong tài liệu trực tuyến MySQL. Không ai trong số các chương trình cá nhân đề cập đến tùy chọn đó trong trang của họ. – Alnitak

2

Thats lạ thực sự cron nên đọc .my.cnf. Làm thế nào để bạn chạy cronjob trong/etc/crontab hoặc crontab -e? Bạn có thể thử sử dụng AutoMySQLBackup là một tập lệnh shell nhỏ sử dụng mysqldump.

+0

Vâng, thực ra nó không được chạy trực tiếp từ cron, mà bởi hệ thống 'periodic' của FreeBSDs. Nó thực sự là một tập lệnh trong/usr/local/etc/periodic/daily Các công việc định kỳ cron được chạy qua '/ etc/cron' như sau: >' 1 3 * * * root định kỳ hàng ngày ' – mikl

+0

Oh, Markdown không được bật trong các nhận xét. Hy vọng anyways dễ đọc của nó :) – mikl

0

Trên FreeBSD bạn có thể thêm như sau:.

security.bsd.see_other_uids=0 

Để/etc

/sysctl.conf và khởi động lại, hoặc sử dụng

sysctl security.bsd.see_other_uids=0 

Để thiết lập giá trị sysctl.

Bây giờ, người dùng không phải là người chủ mới chỉ có thể xem các quy trình của riêng họ. Vì vậy, việc đặt mật khẩu trong dòng lệnh ít rủi ro hơn.

Ngoài ra, cách chạy crontab? Bạn đã thêm nó vào người dùng root crontab bằng cách sử dụng crontab -e -u root, hay bạn đã thêm nó vào/etc/crontab?

Xác minh rằng các quyền phù hợp được đặt trên .my.cnf cũng như các biến môi trường được đặt bởi crontab vì điều đó có thể khiến nó nhìn ở một vị trí khác với thư mục gốc của bạn (thư mục gốc trên FreeBSD là/nguồn gốc).

2

Tôi cũng chạy vào điều này.

Có vẻ như MySQL được mã hóa cứng để tìm '~/.my.cnf', thay vì một cái gì đó như '$ HOME/.my.cnf'.

Trên FreeBSD, cronjobs gọi từ/etc/crontab sẽ bỏ qua '~' nhân vật dấu ngã, và do đó sẽ bỏ qua một giá trị như ~/.my.cnf

Trong thực tế, sau đây không làm việc cho tôi chút nào:

mysql --defaults-phụ-file = ~/.my.cnf

Tuy nhiên, sử dụng một biến $ HOME làm việc:

HOME =/home/admin mysql - -defaults-extra-file = $ HOME/.my.cnf

Để thay thế, cronjob của tôi sẽ hoạt động nếu tôi di chuyển từ/etc/crontab sang/var/cron/tabs/root (Sử dụng 'crontab -e' làm gốc).

Các vấn đề liên quan