Linux: làm thế nào để khôi phục tập tin cấu hình bằng apt-get / aptitude?


37

Thỉnh thoảng tôi bị mất tập tin cấu hình "/etc/mysql/my.cnf" và muốn khôi phục nó. Tệp thuộc về gói mysql-commoncần thiết cho một số chức năng quan trọng vì vậy tôi không thể chỉ purge && installcó nó: các phụ thuộc cũng sẽ được gỡ cài đặt (hoặc nếu tôi có thể bỏ qua chúng tạm thời, chúng sẽ không hoạt động).

Có cách nào để khôi phục tệp cấu hình từ gói mà không arhủy tệp gói không?

dpkg-reconfigure mysql-common đã không khôi phục nó.


Tôi đã luôn luôn giải nén các tập tin gói với 7zip ( 7z x /path/to/foo.deb, sau đó 7z x data.tar.gz) ....
quack quixote

Cá nhân, tôi thích thiết lập một cái gì đó như etckeeper trên hệ thống của mình ngay sau khi tôi cài đặt. Bằng cách đó, tất cả các thay đổi và phiên bản của tệp cấu hình sẽ được lưu trữ. ( Serverfault.com/questions/13091/advice-on-storing-etc-in-a-vcs )
Zoredache

4
Và đây, những đứa trẻ, là lý do tại sao chúng ta có bản sao lưu ...
womble

1
@womble: thật ra, tình hình hơi khác một chút: tôi có một tập tin cấu hình, nhưng nó đã được tôi sửa đổi. Tôi đã không sử dụng conf.dcác thư mục và khi nhà bảo trì gói cập nhật nó, quá trình nâng cấp thực sự quan tâm đến việc hiển thị các thông báo "đã sửa đổi tệp cấu hình" :) Lý do không quan trọng để đề cập, vì vậy tôi quyết định đơn giản hóa câu hỏi của mình
kolypto

Câu trả lời:


39

dpkg -i --force-confmiss mysql-common.debsẽ tạo lại bất kỳ tập tin cấu hình bị thiếu, tức là /etc/mysql/my.cnftrong trường hợp của bạn.


8
Cảm ơn! Trên Ubuntu, đó làsudo dpkg --force-confmiss -i /var/cache/apt/archives/mysql-common*.deb
kolypto

10

Trong Debian Squeeze - ít nhất là -, chúng tôi cũng có thể làm theo cách này, sau su- hoặc sudocho Ubuntu -

aptitude install -o Dpkg::Options::=--force-confmiss mysql-server

Điều này sẽ quan tâm đến các phụ thuộc mysql-servervà đặt lại tất cả các tệp conf bị thiếu của lô, bao gồm cả mysql-common. Các tệp xung đột (còn lại) sẽ được nhắc giữ lại hoặc đặt lại.

Thật không may, có một lỗi trong năng khiếu , và

aptitude purge -o Dpkg::Options::=--force-all mysql-server

sẽ không hoạt động . Vì vậy, chúng tôi phải làm từng cái một với

dpkg --force-all --purge  mysql-common  mysql-server  mysql-client …

Điều này sẽ xóa bất kỳ tệp cấu hình , bản gốc hoặc sửa đổi, nhưng các tệp tùy chỉnh sẽ được giữ nguyên, với một thông báo trên màn hình. Lưu ý, nhân tiện, điều đó dpkgcũng nhận ra --force-confnew--force-confoldlựa chọn.

Để có được mysql-serverdanh sách phụ thuộc in trên màn hình:

aptitude --simulate remove mysql-server

9

Không có cách nào ở trên làm việc cho tôi - có thể đã lỗi thời - dù sao, tôi đã tìm thấy giải pháp này:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall mysql-common

Đây là lệnh để sử dụng, xem xét năng khiếu không phải là mặc định. Đừng quên sudo :)
nsn

3

Bạn có thể tìm thấy các tập tin cấu hình mysql mặc định trong /usr/share/doc/mysql-server-5.0/examples/hoặc tương tự. Đó có thể là tất cả những gì bạn cần trừ khi bạn bật một số cấu hình thực sự đặc biệt / bí truyền.


0

Trong /etc/mysql/thư mục của tôi , tôi có một my.cnf.origtệp chứa nội dung gốc của my.cnf.

Tôi không chắc chắn /etc/mysql/my.cnf.origđến từ đâu - đó là, cho dù tôi đã tạo ra nó, hoặc cài đặt mysql đã làm điều đó. Tôi nhớ kiểm tra tại một thời điểm đó nó chính xác giống nhưmy.cnf

Nếu bạn có một điều như vậy, và không my.cnf bạn có thể sao chép cái này sang cái khác.

sudo cp /etc/mysql/my.cnf.orig /etc/mysql/my.cnf

Trong mọi trường hợp, đó là một tệp văn bản đơn giản 3897 byte và bạn có thể sao chép và dán từ tệp cấu hình Mysql chung.

Nó sẽ là một ý tưởng tốt khi bạn khôi phục của bạn /etc/mysql/my.cnfđể tạo một bản sao để bạn có thể khôi phục lại nó một cách dễ dàng trong tương lai.


Tôi thường tạo bản sao lưu các tệp cấu hình cài đặt gốc bằng cách sao chép chúng vào /path/to/foo.conf.orig... nếu chúng được cài đặt tự động, chúng được tạo khi apt-get đang cài đặt phiên bản mới và phát hiện bạn đã thay đổi tệp cấu hình gốc.
quack quixote

Hmm, tôi càng nghĩ về nó, dường như tôi/etc/mysql/my.cnf.orig càng tạo ra một bản sao lưu sẽ không bị ghi đè bởi một bản cài đặt mới. Nhưng, đặt nó ở một nơi hoàn toàn khác biệt là một ý tưởng tốt.
pavium

Tôi đã cố gắng để được chung chung; cho my.cnf tôi sẽ sao chép nó vào /etc/mysql/my.cnf.orig. Sau đó, tự nhiên, tạo một bản sao lưu tarball của /etc. :)
quack quixote

0

Bạn cần cài đặt lại mysql-common với lệnh này:apt-get install --reinstall mysql-common


Điều đó thực sự khôi phục các tập tin cấu hình bị thiếu?
poolie

1
Không, nó không hoạt động.
chrishiestand

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.