Package: mbslave
This repository now contains a collection of scripts for managing a
replica of the MusicBrainz database.The main motivation for these scripts is to be able to customize
your database. If you don’t need such customizations, it might be
easier to use the replication tools provided by MusicBrainz itself.InstallationYou need to havePython 3.xinstalled on your system.
You can usepipxto install this package:sudo apt install python3 pipx
pipx install 'mbslave'There are two ways to configure the application.You can use a config file:curl https://raw.githubusercontent.com/acoustid/mbslave/main/mbslave.conf.default -o mbslave.conf
vim mbslave.confBy default, thembslavescript will look for the config file in the current directory.
If you want it to find it from anywhere, either save it to/etc/mbslave.confor
set theMBSLAVE_CONFIGenvironment variable. For example::export MBSLAVE_CONFIG=/usr/local/etc/mbslave.confAlternativelly, you can use using environment variables:export MBSLAVE_DB_HOST=127.0.0.1
export MBSLAVE_DB_PORT=5432
export MBSLAVE_DB_NAME=musicbrainz
export MBSLAVE_DB_USER=musicbrainz
export MBSLAVE_DB_PASSWORD=XXX
export MBSLAVE_DB_ADMIN_USER=postgres
export MBSLAVE_DB_ADMIN_PASSWORD=XXXDatabase SetupIf you are starting from scratch and want a full copy of the MusicBrainz database,
you can use thembslave initcommand. This will create a new database and
populate it with the latest data from the MusicBrainz database:mbslave init --create-user --create-databaseThis requires that you have PostgreSQL running and configured in a way, so
thatmbslavecan connect to it both using a regular account as well as
superuser account. How you do that depends on your environment.The other option is to create the database manually and use thembslave psqlto apply the scripts from MusicBrainz. In this case you are expected to know what
you are doing.Database ReplicationYou can also keep the database up-to-date by applying incrementa changes.You need get an API token from theMetaBrainz websiteand you
need to either add it tombslave.confor set theMBSLAVE_MUSICBRAINZ_TOKENenvironment variable.After that, you can use thembslave synccommand to download the latest updates:mbslave syncSchema UpgradeWhen the MusicBrainz database schema changes, the replication will stop working.
This is usually announced on theMusicBrainz blog.
When it happens, you need to upgrade the database.Release 2023-05-22 (28)Run the upgrade scripts:mbslave psql -f updates/schema-change/28.all.sql
echo 'UPDATE replication_control SET current_schema_sequence = 28;' | mbslave psqlRelease 2022-05-16 (27)Run the upgrade scripts:mbslave psql -f updates/schema-change/27.mirror.sql
echo 'UPDATE replication_control SET current_schema_sequence = 27;' | mbslave psqlRelease 2021-05-17 (26)Run the upgrade scripts:mbslave psql -f updates/schema-change/26.slave.sql
echo 'UPDATE replication_control SET current_schema_sequence = 26;' | mbslave psql2020-05-18 Upgrade to PostgreSQL 12These steps are recommended even if you were already running on Postgres 12 before MusicBrainz
moved to make PostgreSQL 12 the minimal supported version.Run the pre-upgrade script:mbslave psql -f updates/20200518-pg12-before-upgrade.sqlIf not already on PostgreSQL 12, upgrade your cluster now (depending on your OS, usingpg_upgradeclusterorpg_upgrade)After upgrading, or if already on PostgreSQL 12, run:mbslave psql -f updates/20200518-pg12-after-upgrade.sqlRelease 2019-05-14 (25)Run the upgrade scripts:mbslave psql -f updates/schema-change/25.slave.sql
echo 'UPDATE replication_control SET current_schema_sequence = 25;' | mbslave psqlRelease 2017-05-25 (24)Run the upgrade scripts:mbslave psql -f updates/schema-change/24.slave.sql
echo 'UPDATE replication_control SET current_schema_sequence = 24;' | mbslave psqlTips and TricksSingle Database SchemaMusicBrainz uses a number of schemas by default. If you are embedding the MusicBrainz database into
an existing database for your application, it’s convenient to merge them all into a single schema.
That can be done by changing your config like this:[schemas]
musicbrainz=musicbrainz
statistics=musicbrainz
cover_art_archive=musicbrainz
wikidocs=musicbrainz
documentation=musicbrainzAfter this, you only need to create the “musicbrainz” schema and import all the tables there.Full Import Schema UpgradeYou can use the schema mapping feature to do zero-downtime upgrade of the database with full
data import. You can temporarily map all schemas to e.g. “musicbrainz_NEW”, import your new
database there and then rename it:echo 'BEGIN; ALTER SCHEMA musicbrainz RENAME TO musicbrainz_OLD; ALTER SCHEMA musicbrainz_NEW RENAME TO musicbrainz; COMMIT;' | mbslave psql -S