38

I've occasionally lost my config file "/etc/mysql/my.cnf", and want to restore it. The file belongs to package mysql-common which is needed for some vital functionality so I can't just purge && install it: the dependencies would be also uninstalled (or if I can ignore them temporarily, they won't be working).

Is there a way to restore the config file from a package without un-ar-ing the package file?

dpkg-reconfigure mysql-common did not restore it.

kolypto
  • 10,738
  • 12
  • 51
  • 66
  • i've always just extracted the package files with 7zip (`7z x /path/to/foo.deb`, then `7z x data.tar.gz`).... – quack quixote Nov 09 '09 at 06:26
  • Personally, I like to setup something like etckeeper on my system right after I install. That way all changes and versions of configuration files get stored. (http://serverfault.com/questions/13091/advice-on-storing-etc-in-a-vcs) – Zoredache Nov 09 '09 at 06:54
  • 4
    And this, kids, is why we have *backups*... – womble Nov 09 '09 at 07:08
  • 1
    @womble: actually, the situation is slightly different: i have a config file, but it's modified by me. I was not using `conf.d` folders, and when the package maintainer update it, upgrade process becomes really keen of displaying "config file modified" messages :) The reason is not that important to mention, so I decided to simplify my question – kolypto Nov 09 '09 at 13:19

7 Answers7

39

dpkg -i --force-confmiss mysql-common.deb will recreate any missing configuration files, ie /etc/mysql/my.cnf in your case.

TRS-80
  • 2,564
  • 17
  • 15
18

None of the above worked for me - maybe outdated - anyway, I found this solution:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall mysql-common
Dave Hilditch
  • 323
  • 3
  • 7
  • This is the command to use, considering aptitude is not default. Don't forget the sudo :) – nsn Jul 25 '16 at 15:17
10

In Debian Squeeze — at least —, we also can do it this way, after su — or sudo for Ubuntu —

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

This will care for the dependencies of mysql-server and reset all the missing conf files of the lot, including mysql-common. Conflicting (remaining) files will be prompted out to be kept or reset.

Unfortunately, there is a bug in aptitude, and

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

will not work. So we have to do it one by one with

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

This will remove any config file, original or modified, but custom files will be preserved, with an onscreen message. Note, by the way, that dpkg also recognizes --force-confnew and --force-confold options.

To get mysql-server dependencies' list print on screen :

aptitude --simulate remove mysql-server
Jean Montané
  • 101
  • 1
  • 2
3

You can find default mysql config files in /usr/share/doc/mysql-server-5.0/examples/ or similar. That may be all that you need unless you have some really special/esoteric configurations enabled.

sybreon
  • 7,357
  • 1
  • 19
  • 19
0

You need to reinstall mysql-common with this command:apt-get install --reinstall mysql-common

0

It appears some of the other solutions won't work if the configuration files of the package are managed with ucf.

In this case you can use :

UCF_FORCE_CONFFMISS=1 apt-get --reinstall install [pkgname]
0

In my /etc/mysql/ directory, I have a my.cnf.orig file which contains the original contents of my.cnf.

I'm not sure where /etc/mysql/my.cnf.orig came from - that is, whether I created it, or the installation of mysql did it. I remember checking at one time that it was exactly the same as my.cnf

If you have such a thing, and no my.cnf you can copy one to the other.

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

In any case, it's a simple text file of 3897 bytes and you could copy and paste from a generic Mysql configuration file.

It will be a good idea once you restore your /etc/mysql/my.cnf to make a copy so you can restore it easily in future.

pavium
  • 654
  • 5
  • 8
  • I usually make a backup of original-install configuration files by copying them to `/path/to/foo.conf.orig` ... if these are automatically installed, they're created when apt-get is installing a new version and detects you've altered the original configuration file. – quack quixote Nov 09 '09 at 06:10
  • Hmm, the more I think about it, the more it seems **I** created `/etc/mysql/my.cnf.orig` as a backup which wouldn't be overwritten by a fresh installation. But, putting it somewhere entirely different is a good idea. – pavium Nov 09 '09 at 06:14
  • I was trying to be generic; for my.cnf I would copy it to `/etc/mysql/my.cnf.orig`. Then, naturally, make a tarball backup of `/etc`. :) – quack quixote Nov 09 '09 at 06:19