39

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.

4
  • i've always just extracted the package files with 7zip (7z x /path/to/foo.deb, then 7z x data.tar.gz).... Commented Nov 9, 2009 at 6: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. (serverfault.com/questions/13091/advice-on-storing-etc-in-a-vcs) Commented Nov 9, 2009 at 6:54
  • 4
    And this, kids, is why we have backups... Commented Nov 9, 2009 at 7: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 Commented Nov 9, 2009 at 13:19

7 Answers 7

38

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

2
  • 8
    Thanks! On Ubuntu, it was sudo dpkg --force-confmiss -i /var/cache/apt/archives/mysql-common*.deb Commented Nov 9, 2009 at 13:26
  • Hi, Would this work for mysql-apt-config as well. My mysql-apt-config is missing. Thanks Michael Commented Dec 6, 2020 at 1:21
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 
1
  • This is the command to use, considering aptitude is not default. Don't forget the sudo :) Commented Jul 25, 2016 at 15:17
11

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 
0
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.

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.

3
  • 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. Commented Nov 9, 2009 at 6: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. Commented Nov 9, 2009 at 6: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. :) Commented Nov 9, 2009 at 6:19
0

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

2
  • Does that actually restore missing configuration files? Commented Oct 24, 2013 at 8:44
  • 1
    No, that doesn't work. Commented Jun 7, 2014 at 0:25
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] 

You must log in to answer this question.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.