Thanks to everyone for your patience during our downtime today. As promised, here are steps to follow to upgrade your own PG instance to v12. (Confused? See the previous blog post on this subject.)
If you’re already running v12, there are still some instructions you must follow!
For MusicBrainz Docker
If you’re running the new MusicBrainz Docker setup, an upgrade script exists for you to use. See the release notes for specific – hopefully brief – instructions.
For a Manual Setup (INSTALL.md Based)
If you aren’t using Docker but rather set up musicbrainz-server by hand following INSTALL.md, see the steps below.
Know that as an alternative, you can always import new data dumps from scratch (again following the steps in INSTALL.md) into a new PG 12 cluster. Just make sure you’re on the v-2020-05-18-postgres12
tag of musicbrainz-server while doing so.
If on the other hand you don’t mind getting your hands a bit dirty, you can use the quicker method below. Like INSTALL.md, this assumes you’re using Ubuntu/Debian and their postgresql-common cluster management tools.
If you’re already running v12, you should still follow these steps; however, you can skip the ones involving apt-get
, pg_dropcluster
, and pg_upgradecluster
. The main steps you need to follow in this case are running the 20200518-pg12-before-upgrade.sql and 20200518-pg12-after-upgrade.sql scripts in that order.
On distros other than Debian/Ubuntu where the postgresql-common tools aren’t available, you’ll have to manage with initdb
and pg_upgrade
on your own.
- First take down the web server running MusicBrainz (stop plackup) to prevent database access.
- Turn off any cron jobs updating or accessing the database (e.g. for the live data feed/replication packets).
- Switch to the latest musicbrainz-server code with:
git fetch origin && \
git checkout v-2020-05-18-postgres12 - With PG 9.5 (or whatever version you’re using) still running, run the following “pre-upgrade” script:
psql -U postgres -d musicbrainz_db \
-f admin/sql/updates/20200518-pg12-before-upgrade.sqlThis assumes that “postgres” is the name of your PG superuser, and “musicbrainz_db” is the name of your database. If you see a few messages about things not existing, that’s normal.
- Install packages for PostgreSQL 12. On Ubuntu/Debian you can obtain them from the PGDG apt repo.
apt-get update && \
apt-get install postgresql-12 postgresql-server-dev-12If you’re installing postgresql-12 for the first time, this will automatically create a new cluster at /var/lib/postgresql/12/main. Remove that empty cluster. Don’t run this if you already had v12 installed and have data there!
pg_dropcluster --stop 12 main
If you did already have v12 installed withmusicbrainz_db
running there, leave the cluster alone and skip the next step involvingpg_upgradecluster
.In the unlikely event that you already have a v12 cluster, but also have
musicbrainz_db
running in a separate, older cluster, these instructions won’t work for you. We recommend importing fresh data dumps into the v12 cluster and dropping the old one. - Upgrade the old cluster. This assumes it’s version 9.5; if you’re using version 10 or 11, make sure to replace
9.5
below with 10 or 11. If you have other databases in your old cluster besidesmusicbrainz_db
, be aware that this will upgrade all of them to PG 12.pg_upgradecluster -v 12 9.5 main
- If all goes well, the new cluster should be up and running. (You can drop the old one if you like; the output of the
pg_upgradecluster
command will tell you how.) Now run the following “post-upgrade” script on the database:psql -U postgres -d musicbrainz_db -f \
This may take a bit, as it has to recreate some indexes.
admin/sql/updates/20200518-pg12-after-upgrade.sql - The upgrade is complete. You can turn cron jobs back on, if applicable.
- Restart the MusicBrainz web server / plackup, if applicable. If you’re accessing the server in a web browser, the usual release upgrade steps apply, like running
./script/compile_resources.sh
again.
If you run into any trouble following the above, please let us know and we’ll try to help resolve your issue as soon as possible!