How do I copy the database from one node over to another node?

Introduction

When we deploy new nodes or have to completely redo one from the ground up we could make a copy of an existing database and have a copy of that be transferred to our new node to mitigate all the time and server resources it would take to sync the database from epoch 0.

Step 1 - Stop our source node

Let's start by stopping our node from where we will make source the database

sudo systemctl stop cnode.service

Step 2 - Move over to Database and do some preparation

We need to change over to our db folder under our cardano node

cd db			#Or wherever you have chosen to store your files and folders
ls

You should see something like this:

OUTPUT:

immutable  ledger  lock  protocolMagicId  shelley_trans_epoch  volatile

Step 3 - Remove the contents of the ledger directory

rm -rf ledger/*		#Remove everything in the ledger dir using the options of -rf (recursively, force)

Step 4 - Restart the node

sudo systemctl start cnode.service

Let the database sync again before we stop the node again.

How do we know when the database is synced on the blockchain? To answer that you can follow the steps by Damien Ostrelich of EDEN pools in his YouTube tutorial:

Or you can copy paste his instructions here:

cd ../logs
tail -f node0.json

The output shows the db syncing in real time.

But we want to filter the output to show us only those lines that cnoptain the "contents" parameter

tail -f node0.json | grep "contents"

The lines on output will now only show those lines that contain the "contents" parameter (usually highlighted in red). The contents parameter is an indicator of the amount of db synced and we need to wait till the subsequent indicator after the "contents" word in the line reaches 100 (100%). See video above to see this in real time.

Step 5 - Stop the node (again) and take a snapshot

Once the node sync contents are 100% we stop the node

sudo systemctl stop cnode.service

Compress a copy of your database (this will take some time)

cd ..
tar -czvf db_snapshot.tar.gz db/

Once the snapshot (the compressed file completed) we restart the node

sudo systemctl start cnode.service

Step 6 - Copy the compressed database over to your new node

This step can be done to your liking. Either by transferring using an app like FileZilla to download the file and reupload to your new server. Or, you can do the transfer from the command line and login to the new server using ssh and do a direct server to server transfer. We leave this step up to you.

Step 7 - Stop your destination node

sudo systemctl disable cnode.service
sudo systemctl stop cnode.service

Step 8 - Rebuild node software as if you are updating the node upgrade

This is the common procedure of upgrading your node software and binaries. You do this as you would any other normal upgrade and instructions on this are skipped since this is covered multiple times in answers on CardanoFAQ.

Step 9 - Replace database after Cardano node is updated and upgraded

Decompress (extract) the db_database.tar.gz file you uploaded into the directory holding the db directory. First we backup the existing database in case we need to roll back for whatever reason.

cp -r db/ db-backup/

Remove the database

rm -r db

Extract the database tar file

tar -xzvf db_snapshot.tar.gz

This will recreate the db folder with all of its contents

Step 10 - Restart the cnode service

systemctl enable cnode.service
systemctl start cnode.service
systemctl status cnode.service

Step 11 - Check to see the database is syncing to the network

Here we can open our gLiveView utility and just check that it is syncing and working again.

That should be it!

 


Links used in this answer:

Damien Ostrelich's YouTube tutorial on this issue: https://youtu.be/4CxYezEvFnY


This answer was published 02 Jan 2021