# Instalação e Customização MariaDB Docker

# Mariabackup tutorial — Using Mariabackup for hot physical backups of MariaDB

<div class="gp gq gr gs gt e" id="bkmrk-link%3A%C2%A0-https%3A%2F%2Fmediu"><article><div class="e"><div class="e"><section><div><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx"><div><div><div class="speechify-ignore v ct"><div class="speechify-ignore bd e"><div class="v iq ir is it iu iv iw ix iy iz ja"><div class="v j ja"><div class="ji v j"><div class="v j jj" style="text-align: justify;"><div class="v j"><div><div aria-describedby="4" aria-labelledby="4" class="bi" role="tooltip"><div class="ba" style="text-align: justify;" tabindex="-1">Link: </div></div></div></div><div class="jl bi" style="text-align: justify;">[https://medium.com/@ngza5tqf/mariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861](https://medium.com/@ngza5tqf/mariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861)</div><button class="yh yl ak v cf j ym yn yo"></button></div></div></div><div class="v j jm" style="text-align: justify;"><div class="v y"><span data-testid="storyPublishDate">Jan 18, 2026</span></div></div></div><div class="v ct jp jq jr js jt ju jv jw jx jy jz ka kb kc kd ke" style="text-align: justify;"><div class="au bt p fu fv j"><div class="ku e"><div class="v j kv kw">  
</div></div><div><div aria-describedby="6" aria-labelledby="6" class="bi" role="tooltip"><div class="ba" tabindex="-1"><button aria-label="responses" class="ak lb lr ls v j fx lt lu"><svg class="lv" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div></div><div class="v j kf kg kh ki kj kk kl km kn ko kp kq kr ks kt"><div class="au bt"><div><div aria-describedby="7" aria-labelledby="7" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span data-dd-action-name="Susi presentation tracker bookmark_footer">[<span class=""><svg aria-label="Add to list bookmark button" class="dy lx" fill="none" height="25" viewbox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg"><path d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z" fill="currentColor"></path></svg></span>](https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fc5106b9dd861&operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---header_actions--c5106b9dd861---------------------bookmark_footer------------------)</span></div></div></div></div><div class="fh ly cr"><div class="e y"><div class="v cf"><div class="lz ma mb mc md me cm bd"><div class="v"><span data-dd-action-name="Susi presentation tracker post_audio_button">[<div><div aria-describedby="53" aria-labelledby="53" class="bi" role="tooltip"><div class="ba" tabindex="-1"><button aria-label="Listen" class="z fx ac fl af ag ah mf aj ak al fb mg mh lu mi mj mk ml mm l mn mo mp mq mr ms mt n mu mv mw" data-testid="audioPlayButton"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M3 12a9 9 0 1 1 18 0 9 9 0 0 1-18 0m9-10C6.477 2 2 6.477 2 12s4.477 10 10 10 10-4.477 10-10S17.523 2 12 2m3.376 10.416-4.599 3.066a.5.5 0 0 1-.777-.416V8.934a.5.5 0 0 1 .777-.416l4.599 3.066a.5.5 0 0 1 0 .832" fill="currentColor" fill-rule="evenodd"></path></svg></button></div></div></div>](https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2Fplans%3Fdimension%3Dpost_audio_button%26postId%3Dc5106b9dd861&operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---header_actions--c5106b9dd861---------------------post_audio_button------------------)</span></div></div></div></div></div><div aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu" class="bi"><div><div aria-describedby="9" aria-labelledby="9" class="bi" role="tooltip"><div class="ba" tabindex="-1"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" class="z fx ac fl af ag ah mf aj ak al fb mg mh lu mi mj mk ml mm l mn mo mp mq mr ms mt n mu mv mw" data-testid="headerSocialShareButton"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" fill="currentColor" fill-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></div></div></div></div></div>Mariabackup is MariaDB’s native tool for creating hot physical backups without interrupting database operations. Unlike logical backups with mysqldump, Mariabackup copies the actual data files while your database continues serving requests. This makes it the preferred backup method for production MariaDB databases where downtime is not an option. This tutorial covers everything from basic usage to advanced incremental backup strategies for [MariaDB backup](https://databasus.com/mysql-backup) operations.

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx"><figure class="nz oa ob oc od oe nw nx paragraph-image"><div class="of og fw oh bd oi" role="button" tabindex="0"><span class="gb gc gd ai ge gf gg fp gh speechify-ignore">Press enter or click to view image in full size</span><div class="nw nx ny"><picture><source sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" srcset="https://miro.medium.com/v2/resize:fit:640/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/format:webp/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 1400w" type="image/webp"><source data-testid="og" sizes="(min-resolution: 4dppx) and (max-width: 700px) 50vw, (-webkit-min-device-pixel-ratio: 4) and (max-width: 700px) 50vw, (min-resolution: 3dppx) and (max-width: 700px) 67vw, (-webkit-min-device-pixel-ratio: 3) and (max-width: 700px) 65vw, (min-resolution: 2.5dppx) and (max-width: 700px) 80vw, (-webkit-min-device-pixel-ratio: 2.5) and (max-width: 700px) 80vw, (min-resolution: 2dppx) and (max-width: 700px) 100vw, (-webkit-min-device-pixel-ratio: 2) and (max-width: 700px) 100vw, 700px" srcset="https://miro.medium.com/v2/resize:fit:640/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 640w, https://miro.medium.com/v2/resize:fit:720/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 720w, https://miro.medium.com/v2/resize:fit:750/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 750w, https://miro.medium.com/v2/resize:fit:786/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 786w, https://miro.medium.com/v2/resize:fit:828/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 828w, https://miro.medium.com/v2/resize:fit:1100/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 1100w, https://miro.medium.com/v2/resize:fit:1400/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg 1400w">![](https://miro.medium.com/v2/resize:fit:700/1*ZztzqE3GnEGjI2vYL1NwuA.jpeg)</source></source></picture></div></div><figcaption class="ok fj ol nw nx om on bb b bc u dy" data-selectable-paragraph="">Mariabackup tutorial</figcaption></figure></div></div></div></div>## Understanding Mariabackup

Mariabackup is a fork of Percona XtraBackup, specifically optimized for MariaDB. It creates consistent physical backups by copying InnoDB data files and capturing transaction logs during the backup process. The tool then applies these logs during a preparation phase to ensure backup consistency.

## How Mariabackup works

The backup process happens in three distinct phases. First, Mariabackup copies InnoDB tablespace files while the database runs normally. During this copy phase, it also captures all changes happening in the redo log. After the file copy completes, Mariabackup briefly acquires a global lock to capture non-InnoDB tables and the binary log position. Finally, during the prepare phase, Mariabackup applies the captured redo log entries to make the backup consistent.

This approach allows backups to complete without blocking database operations. Applications continue reading and writing data throughout most of the backup process. The brief lock at the end typically lasts only seconds, even for large databases.

## Mariabackup vs mysqldump

Both tools create valid backups, but they serve different use cases.

**Mariabackup characteristics:**

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- **Backup type**: Physical (file copy)
- **Hot backup**: Yes
- **Backup speed**: Fast
- **Restore speed**: Fast
- **Incremental backups**: Yes
- **Point-in-time recovery**: Yes
- **Cross-version restore**: Same major version only
- **Storage size**: Larger (raw files)

</div></div></div></div>**mysqldump characteristics:**

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- **Backup type**: Logical (SQL statements)
- **Hot backup**: Partial (InnoDB only with — single-transaction)
- **Backup speed**: Slow for large databases
- **Restore speed**: Slow (executes SQL statements)
- **Incremental backups**: No
- **Point-in-time recovery**: Yes (with binary logs)
- **Cross-version restore**: Any compatible version
- **Storage size**: Smaller (compressed SQL)

</div></div></div></div>For databases under 10GB, mysqldump works fine and offers better portability. For larger databases or systems requiring minimal downtime, Mariabackup is the better choice. Many production environments use both: Mariabackup for fast daily backups and mysqldump for portable weekly archives.

## Installing Mariabackup

Mariabackup comes bundled with MariaDB Server packages. If you have MariaDB installed, you likely already have Mariabackup available.

## Installation on Debian/Ubuntu

Install the mariadb-backup package:

```
sudo apt-get update<br></br>sudo apt-get install mariadb-backup
```

Verify the installation:

```
mariabackup --version
```

## Installation on RHEL/CentOS

Use yum or dnf to install:

```
sudo yum install MariaDB-backup
```

Or on newer systems:

```
sudo dnf install MariaDB-backup
```

## Installation on Docker

MariaDB Docker images include Mariabackup. Access it through docker exec:

```
docker exec mariadb mariabackup --version
```

For Docker-based backups, mount a volume for backup storage:

```
docker exec mariadb mariabackup --backup \<br></br>  --target-dir=/backup \<br></br>  --user=root \<br></br>  --password=your_password
```

## Version compatibility

Mariabackup version must match your MariaDB server version. A Mariabackup from MariaDB 10.6 cannot backup a MariaDB 10.11 server. Always use the Mariabackup that ships with your MariaDB installation.

Check your MariaDB version:

```
mariadb --version
```

Ensure Mariabackup matches:

```
mariabackup --version
```

## Creating your first backup

The basic Mariabackup command requires a target directory, username and password. The backup process creates a complete copy of your database files.

## Basic backup command

Create a full backup:

```
mariabackup --backup \<br></br>  --target-dir=/backup/full-$(date +%Y%m%d) \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

The `--target-dir` must be an empty directory or non-existent (Mariabackup creates it). Never reuse a target directory from a previous backup.

## Backup user permissions

Create a dedicated backup user with minimal required privileges:

```
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'secure_password';<br></br>GRANT RELOAD, PROCESS, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'backup_user'@'localhost';<br></br>FLUSH PRIVILEGES;
```

For MariaDB 10.5 and later, you can use the BACKUP\_ADMIN privilege instead:

```
CREATE USER 'backup_user'@'localhost' IDENTIFIED BY 'secure_password';<br></br>GRANT RELOAD, PROCESS, LOCK TABLES, BINLOG MONITOR, BACKUP_ADMIN ON *.* TO 'backup_user'@'localhost';<br></br>FLUSH PRIVILEGES;
```

## Backup directory structure

After a successful backup, your target directory contains:

```
/backup/full-20260118/<br></br>├── ibdata1<br></br>├── ib_logfile0<br></br>├── ib_logfile1<br></br>├── mysql/<br></br>├── performance_schema/<br></br>├── your_database/<br></br>├── xtrabackup_checkpoints<br></br>├── xtrabackup_info<br></br>└── xtrabackup_logfile
```

The `xtrabackup_checkpoints` file contains backup metadata including the LSN (Log Sequence Number) range. This information is essential for incremental backups.

## Preparing backups for restoration

Raw Mariabackup output is not directly restorable. The prepare phase applies redo log entries to make data files consistent. This step is mandatory before restoration.

## Preparing a full backup

Run the prepare command on your backup directory:

```
mariabackup --prepare --target-dir=/backup/full-20260118
```

During preparation, Mariabackup:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">1. Reads the captured redo log entries
2. Applies committed transactions to data files
3. Rolls back uncommitted transactions
4. Creates clean, consistent data files

</div></div></div></div>The prepare phase modifies the backup directory in place. After preparation, the backup is ready for restoration but can no longer be used as a base for incremental backups.

## Preparation output

A successful prepare shows:

```
InnoDB: Starting shutdown...<br></br>InnoDB: Shutdown completed<br></br>completed OK!
```

If you see errors during preparation, the backup may be corrupted. Never restore from a backup that fails preparation.

## Restoring from backup

Restoration requires stopping MariaDB, replacing the data directory and fixing permissions. Always test restoration procedures before you need them in an emergency.

## Full restoration procedure

Stop the MariaDB service:

```
sudo systemctl stop mariadb
```

Remove or move the existing data directory:

```
sudo mv /var/lib/mysql /var/lib/mysql.old<br></br>sudo mkdir /var/lib/mysql
```

Copy the backup files to the data directory:

```
sudo mariabackup --copy-back --target-dir=/backup/full-20260118
```

Fix file ownership:

```
sudo chown -R mysql:mysql /var/lib/mysql
```

Start MariaDB:

```
sudo systemctl start mariadb
```

## Alternative: move-back option

If you don’t need to preserve the backup, use `--move-back` instead of `--copy-back`:

```
sudo mariabackup --move-back --target-dir=/backup/full-20260118
```

This moves files instead of copying, which is faster and uses less disk space. However, your backup directory becomes empty after this operation.

## Verifying restoration

Connect to MariaDB and verify your data:

```
mariadb -u root -p -e "SHOW DATABASES;"<br></br>mariadb -u root -p -e "SELECT COUNT(*) FROM your_database.your_table;"
```

Check the error log for any issues:

```
sudo tail -100 /var/log/mysql/error.log
```

## Incremental backups

Incremental backups capture only changes since the last backup, reducing backup time and storage requirements. They work by recording the LSN at each backup and only copying pages modified after that LSN.

## Creating an incremental backup

First, create a full backup as the base:

```
mariabackup --backup \<br></br>  --target-dir=/backup/base \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

Create the first incremental backup:

```
mariabackup --backup \<br></br>  --target-dir=/backup/inc1 \<br></br>  --incremental-basedir=/backup/base \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

Create subsequent incremental backups based on the previous one:

```
mariabackup --backup \<br></br>  --target-dir=/backup/inc2 \<br></br>  --incremental-basedir=/backup/inc1 \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

## Preparing incremental backups

Incremental backups require a multi-step preparation process. First, prepare the base backup with the `--apply-log-only` option:

```
mariabackup --prepare --apply-log-only --target-dir=/backup/base
```

The `--apply-log-only` flag prevents the rollback phase, which would make the backup unusable for applying incremental changes.

## Get Nazar Egorov’s stories in your inbox

Join Medium for free to get updates from this writer.

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="ud ue uf ug v j cs"><div class="cp e fj">  
</div><div class="uv ry uw ux rx uy v"><div class="uz v cs"><div class="v uz fg ff bl va vb db lr vc vd ve vf vg vh vi"></div></div><div class="au bt so bx"><div class="us ut uu"><button class="bb b bc u vn ra vo vp vq vr vs ez fa vt vu vv fe ff fg fh bi fi fj">Subscribe</button></div></div></div><div class="qm e"><div class="wl wm wn v wo bx fw"> [x] <span class="j wh wi ff fg wj fh vn ak v vo wk cf" data-checkbox="true"><svg class="vo" height="11" viewbox="0 0 11 11" width="11" xmlns="http://www.w3.org/2000/svg"><path d="m0 6.313 3.704 3.705.904.904.66-1.095 5.296-8.795L8.85 0 3.554 8.795l1.563-.191-3.704-3.705z"></path></svg></span></div><div class="e">  
</div></div></div></div></div></div></div>Remember me for faster sign in

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="ud ue uf ug v j cs"><div class="qm e"><div class="e">  
</div></div><div class="qy e"><div id="bkmrk-"></div></div></div></div></div></div></div>Apply the first incremental backup:

```
mariabackup --prepare --apply-log-only \<br></br>  --target-dir=/backup/base \<br></br>  --incremental-dir=/backup/inc1
```

Apply the second incremental backup:

```
mariabackup --prepare --apply-log-only \<br></br>  --target-dir=/backup/base \<br></br>  --incremental-dir=/backup/inc2
```

For the final incremental backup, run prepare without `--apply-log-only`:

```
mariabackup --prepare --target-dir=/backup/base
```

This final preparation completes the rollback phase and makes the backup restorable.

## Incremental backup strategy

A common production strategy combines weekly full backups with daily incremental backups:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- **Sunday**: Full backup
- **Monday-Saturday**: Incremental backups based on previous day

</div></div></div></div>This approach provides daily recovery points while minimizing storage and backup time. Recovery requires applying all incremental backups in sequence, so keep the chain reasonably short to limit restore complexity.

## Streaming backups

Mariabackup supports streaming backup output directly to another server or compression tool. This eliminates the need for temporary local storage.

## Streaming to a file

Create a compressed backup archive:

```
mariabackup --backup \<br></br>  --stream=xbstream \<br></br>  --user=backup_user \<br></br>  --password=your_password | gzip > /backup/backup_$(date +%Y%m%d).xbstream.gz
```

## Streaming to a remote server

Send backups directly to a remote server via SSH:

```
mariabackup --backup \<br></br>  --stream=xbstream \<br></br>  --user=backup_user \<br></br>  --password=your_password | \<br></br>  ssh backup-server "cat > /backup/backup_$(date +%Y%m%d).xbstream"
```

## Extracting streamed backups

Extract the xbstream archive before preparation:

```
mkdir /backup/extracted<br></br>cd /backup/extracted<br></br>xbstream -x < /backup/backup_20260118.xbstream.gz
```

Then prepare and restore as usual.

## Partial backups

Mariabackup can backup specific databases or tables, useful when you only need to protect certain data or have limited storage.

## Backing up specific databases

Use the `--databases` option to backup selected databases:

```
mariabackup --backup \<br></br>  --target-dir=/backup/partial \<br></br>  --databases="production inventory" \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

## Backing up specific tables

Backup individual tables with the `--tables` option:

```
mariabackup --backup \<br></br>  --target-dir=/backup/tables \<br></br>  --tables="production.orders production.customers" \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

## Partial backup limitations

Partial backups have restrictions:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Cannot restore to a running server (requires full data directory replacement)
- InnoDB system tablespace (ibdata1) is always included
- Foreign key relationships may cause issues if related tables are excluded

</div></div></div></div>For most use cases, full backups with selective restoration provide more flexibility than partial backups.

## Encrypted backups

Mariabackup supports AES encryption to protect backup files at rest. Encryption happens during the backup process, so unencrypted data never touches disk.

## Creating encrypted backups

Generate an encryption key:

```
openssl rand -base64 32 > /etc/mysql/backup.key<br></br>chmod 600 /etc/mysql/backup.key
```

Create an encrypted backup:

```
mariabackup --backup \<br></br>  --target-dir=/backup/encrypted \<br></br>  --encrypt=AES256 \<br></br>  --encrypt-key-file=/etc/mysql/backup.key \<br></br>  --user=backup_user \<br></br>  --password=your_password
```

## Decrypting backups

Decrypt before preparation:

```
mariabackup --decrypt=AES256 \<br></br>  --encrypt-key-file=/etc/mysql/backup.key \<br></br>  --target-dir=/backup/encrypted
```

Then prepare and restore normally.

## Key management

Store encryption keys separately from backup files. If an attacker gains access to your backups but not the keys, your data remains protected. Consider using key management services like HashiCorp Vault or AWS KMS for production environments.

## Automated backups with Databasus

Manual backup scripts work for simple setups, but production environments benefit from dedicated backup management tools. Databasus is a free, open source backup solution that automates MariaDB backups with scheduling, multiple storage destinations and team notifications.

## Installing Databasus

Install Databasus using Docker:

```
docker run -d \<br></br>  --name databasus \<br></br>  -p 4005:4005 \<br></br>  -v ./databasus-data:/databasus-data \<br></br>  --restart unless-stopped \<br></br>  databasus/databasus:latest
```

Or with Docker Compose:

```
services:<br></br>  databasus:<br></br>    container_name: databasus<br></br>    image: databasus/databasus:latest<br></br>    ports:<br></br>      - "4005:4005"<br></br>    volumes:<br></br>      - ./databasus-data:/databasus-data<br></br>    restart: unless-stopped
```

Start the service:

```
docker compose up -d
```

Access the web interface at `http://localhost:4005` and create your account.

## Configuring MariaDB backups

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">1. **Add your database**: Click “New Database” and select MariaDB as the database type
2. **Enter connection details**: Provide your MariaDB host, port, database name and authentication credentials
3. **Select storage**: Choose from local storage, S3, Google Cloud Storage, Dropbox, SFTP or other supported destinations
4. **Configure schedule**: Set hourly, daily, weekly, monthly or custom cron-based backup intervals
5. **Add notifications** (optional): Configure Slack, Discord, Telegram or email alerts for backup status
6. **Create backup**: Databasus validates your configuration and begins the backup schedule

</div></div></div></div>Databasus handles compression, encryption and retention automatically, removing the complexity of backup management while providing enterprise-grade reliability.

## Backup automation scripts

For environments where you prefer script-based automation, here’s a production-ready backup script.

## Full backup script

Create `/usr/local/bin/mariadb-backup.sh`:

```
#!/bin/bash<br></br>set -e
```

```
BACKUP_BASE="/backup/mariadb"<br></br>DATE=$(date +%Y%m%d_%H%M%S)<br></br>BACKUP_DIR="$BACKUP_BASE/full-$DATE"<br></br>LOG_FILE="/var/log/mariadb-backup.log"<br></br>RETENTION_DAYS=7log() {<br></br>    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"<br></br>}log "Starting full backup to $BACKUP_DIR"mariabackup --backup \<br></br>  --target-dir="$BACKUP_DIR" \<br></br>  --user=backup_user \<br></br>  --password="$(cat /etc/mysql/backup.password)" \<br></br>  2>> "$LOG_FILE"log "Preparing backup"mariabackup --prepare --target-dir="$BACKUP_DIR" 2>> "$LOG_FILE"log "Backup completed successfully"# Cleanup old backups<br></br>find "$BACKUP_BASE" -maxdepth 1 -type d -name "full-*" -mtime +$RETENTION_DAYS -exec rm -rf {} \;log "Cleanup completed, removed backups older than $RETENTION_DAYS days"
```

Make it executable and schedule with cron:

```
chmod +x /usr/local/bin/mariadb-backup.sh
```

Add to crontab for daily 2 AM backups:

```
0 2 * * * /usr/local/bin/mariadb-backup.sh
```

## Incremental backup script

Create `/usr/local/bin/mariadb-incremental.sh`:

```
#!/bin/bash<br></br>set -e
```

```
BACKUP_BASE="/backup/mariadb"<br></br>DATE=$(date +%Y%m%d_%H%M%S)<br></br>DAY_OF_WEEK=$(date +%u)<br></br>LOG_FILE="/var/log/mariadb-backup.log"log() {<br></br>    echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"<br></br>}# Sunday (day 7) = full backup, other days = incremental<br></br>if [ "$DAY_OF_WEEK" -eq 7 ]; then<br></br>    BACKUP_DIR="$BACKUP_BASE/base"<br></br>    rm -rf "$BACKUP_DIR"<br></br>    <br></br>    log "Starting weekly full backup"<br></br>    <br></br>    mariabackup --backup \<br></br>      --target-dir="$BACKUP_DIR" \<br></br>      --user=backup_user \<br></br>      --password="$(cat /etc/mysql/backup.password)" \<br></br>      2>> "$LOG_FILE"<br></br>else<br></br>    # Find the most recent backup directory<br></br>    LAST_BACKUP=$(ls -td "$BACKUP_BASE"/*/ 2>/dev/null | head -1)<br></br>    BACKUP_DIR="$BACKUP_BASE/inc-$DATE"<br></br>    <br></br>    log "Starting incremental backup based on $LAST_BACKUP"<br></br>    <br></br>    mariabackup --backup \<br></br>      --target-dir="$BACKUP_DIR" \<br></br>      --incremental-basedir="$LAST_BACKUP" \<br></br>      --user=backup_user \<br></br>      --password="$(cat /etc/mysql/backup.password)" \<br></br>      2>> "$LOG_FILE"<br></br>filog "Backup completed: $BACKUP_DIR"
```

## Monitoring and verification

Backups are worthless if they don’t restore. Regular verification catches problems before they become emergencies.

## Backup verification script

Create a script that tests restoration to a temporary instance:

```
#!/bin/bash<br></br>set -e
```

```
BACKUP_DIR="/backup/mariadb/full-latest"<br></br>TEST_DATA_DIR="/tmp/mariadb-test"<br></br>TEST_PORT=3307# Clean up previous test<br></br>rm -rf "$TEST_DATA_DIR"<br></br>mkdir -p "$TEST_DATA_DIR"# Copy backup to test directory<br></br>mariabackup --copy-back --target-dir="$BACKUP_DIR" --datadir="$TEST_DATA_DIR"# Fix permissions<br></br>chown -R mysql:mysql "$TEST_DATA_DIR"# Start test instance<br></br>mariadbd --datadir="$TEST_DATA_DIR" --port=$TEST_PORT --socket=/tmp/mysql-test.sock &<br></br>TEST_PID=$!sleep 10# Verify databases exist<br></br>mariadb -P $TEST_PORT -S /tmp/mysql-test.sock -e "SHOW DATABASES;"# Run table checks<br></br>mariadb -P $TEST_PORT -S /tmp/mysql-test.sock -e "CHECK TABLE production.orders;"# Cleanup<br></br>kill $TEST_PID<br></br>rm -rf "$TEST_DATA_DIR"echo "Backup verification completed successfully"
```

## Monitoring backup health

Track these metrics to ensure backup reliability:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- **Backup duration**: Sudden increases indicate performance issues
- **Backup size**: Unexpected changes may signal data problems
- **Last successful backup**: Alert if older than expected
- **Preparation success**: Failed preparation means unusable backup

</div></div></div></div>Set up alerts for backup failures. A missed backup is better discovered immediately than during a crisis.

## Troubleshooting common issues

Even well-configured backups encounter problems. Here are solutions to common Mariabackup issues.

## Lock wait timeout

Error: `Lock wait timeout exceeded`

This happens when Mariabackup cannot acquire the global lock. Reduce lock time by:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Running backups during low-traffic periods
- Killing long-running transactions before backup
- Using `--lock-ddl-per-table` option (MariaDB 10.4+)

</div></div></div></div>## Insufficient disk space

Error: `No space left on device`

Mariabackup requires free space equal to your database size plus redo logs. Solutions:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Use streaming backups to compress on-the-fly
- Clean up old backups before starting new ones
- Use a dedicated backup volume with adequate space

</div></div></div></div>## Redo log overwritten

Error: `The log was only partially backed up`

The redo log filled and wrapped around during backup. Fix by:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Increasing `innodb_log_file_size` in MariaDB configuration
- Running backups more frequently
- Reducing database write load during backups

</div></div></div></div>## Permission denied errors

Error: `Permission denied`

Mariabackup needs read access to data files and write access to the target directory. Verify:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Backup user has correct MySQL privileges
- System user running Mariabackup can read `/var/lib/mysql`
- Target directory is writable

</div></div></div></div>## Best practices

Following these practices ensures reliable, maintainable backup operations.

## The 3–2–1 backup rule

Implement the 3–2–1 strategy:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- **3 copies** of your data: production database, local backup and remote backup
- **2 different media types**: local disk and cloud storage
- **1 offsite location**: different physical location from production

</div></div></div></div>This protects against hardware failures, site disasters and ransomware attacks.

## Test restoration regularly

Schedule monthly restoration tests:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">1. Select a random backup from the previous week
2. Restore to a test environment
3. Verify data integrity and completeness
4. Document restoration time
5. Update runbooks based on findings

</div></div></div></div>## Document everything

Create runbooks covering:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Backup schedules and retention policies
- Step-by-step restoration procedures
- Contact information for escalations
- Recovery time objectives and test results

</div></div></div></div>Train multiple team members on backup and restoration. Single points of failure in knowledge are as dangerous as single points of failure in infrastructure.

## Secure your backups

Backups contain all your production data. Protect them accordingly:

<div style="text-align: justify;"><div class="hi hj hk hl hm"><div class="v cf"><div class="cm bd gu gv gw gx">- Encrypt backups at rest
- Restrict access to backup storage
- Audit backup access logs
- Store encryption keys separately from backups

</div></div></div></div>## Conclusion

Mariabackup provides fast, reliable hot backups for MariaDB databases of any size. Its ability to backup without blocking operations makes it essential for production systems where downtime costs money. Start with simple full backups, add incremental backups as your database grows and implement encryption for sensitive data.

Remember that creating backups is only half the job. Regular restoration testing, monitoring and documentation complete a reliable backup strategy. When disaster strikes, your preparation determines whether recovery takes minutes or becomes a crisis.

</section></div></div></article></div><div class="v cf" id="bkmrk-database-mariadb" style="text-align: justify;"><div class="cm bd gu gv gw gx"><div class="qw qx v jm"><div class="qy v">[<div class="ra fw db rb gz rc rd bb b bc u bg fp">Database</div>](https://medium.com/tag/database?source=post_page-----c5106b9dd861---------------------------------------)</div><div class="qy v">[<div class="ra fw db rb gz rc rd bb b bc u bg fp">Mariadb</div>](https://medium.com/tag/mariadb?source=post_page-----c5106b9dd861---------------------------------------)</div></div></div></div><div class="e" id="bkmrk--1" style="text-align: justify;">  
</div><footer class="re rf rg rh ri v j rj rk c" id="bkmrk--2"><div class="e y"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="v ct rl"><div class="v j kv"><div class="rm e"><div><div class="v j kv kw">  
</div></div></div><div class="at v"><div><div aria-describedby="12" aria-labelledby="12" class="bi" role="tooltip"><div class="ba" tabindex="-1"><button aria-label="responses" class="ak lb lr ls v j fx lt lu"><svg class="lv" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="M18.006 16.803c1.533-1.456 2.234-3.325 2.234-5.321C20.24 7.357 16.709 4 12.191 4S4 7.357 4 11.482c0 4.126 3.674 7.482 8.191 7.482.817 0 1.622-.111 2.393-.327.231.2.48.391.744.559 1.06.693 2.203 1.044 3.399 1.044.224-.008.4-.112.486-.287a.49.49 0 0 0-.042-.518c-.495-.67-.845-1.364-1.04-2.057a4 4 0 0 1-.125-.598zm-3.122 1.055-.067-.223-.315.096a8 8 0 0 1-2.311.338c-4.023 0-7.292-2.955-7.292-6.587 0-3.633 3.269-6.588 7.292-6.588 4.014 0 7.112 2.958 7.112 6.593 0 1.794-.608 3.469-2.027 4.72l-.195.168v.255c0 .056 0 .151.016.295.025.231.081.478.154.733.154.558.398 1.117.722 1.659a5.3 5.3 0 0 1-2.165-.845c-.276-.176-.714-.383-.941-.59z"></path></svg></button></div></div></div></div></div><div class="v j"><div class="rv e bx"><div><div aria-describedby="13" aria-labelledby="13" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span data-dd-action-name="Susi presentation tracker bookmark_footer">[<span class=""><svg aria-label="Add to list bookmark button" class="dy lx" fill="none" height="25" viewbox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg"><path d="M18 2.5a.5.5 0 0 1 1 0V5h2.5a.5.5 0 0 1 0 1H19v2.5a.5.5 0 1 1-1 0V6h-2.5a.5.5 0 0 1 0-1H18zM7 7a1 1 0 0 1 1-1h3.5a.5.5 0 0 0 0-1H8a2 2 0 0 0-2 2v14a.5.5 0 0 0 .805.396L12.5 17l5.695 4.396A.5.5 0 0 0 19 21v-8.5a.5.5 0 0 0-1 0v7.485l-5.195-4.012a.5.5 0 0 0-.61 0L7 19.985z" fill="currentColor"></path></svg></span>](https://medium.com/m/signin?actionUrl=https%3A%2F%2Fmedium.com%2F_%2Fbookmark%2Fp%2Fc5106b9dd861&operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---footer_actions--c5106b9dd861---------------------bookmark_footer------------------)</span></div></div></div></div><div class="rv e bx"><div aria-describedby="postFooterSocialMenu" aria-labelledby="postFooterSocialMenu" class="bi"><div><div aria-describedby="14" aria-labelledby="14" class="bi" role="tooltip"><div class="ba" tabindex="-1"><button aria-controls="postFooterSocialMenu" aria-expanded="false" aria-label="Share Post" class="z fx ac fl af ag ah mf aj ak al fb mg mh lu mi" data-testid="footerSocialShareButton"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M15.218 4.931a.4.4 0 0 1-.118.132l.012.006a.45.45 0 0 1-.292.074.5.5 0 0 1-.3-.13l-2.02-2.02v7.07c0 .28-.23.5-.5.5s-.5-.22-.5-.5v-7.04l-2 2a.45.45 0 0 1-.57.04h-.02a.4.4 0 0 1-.16-.3.4.4 0 0 1 .1-.32l2.8-2.8a.5.5 0 0 1 .7 0l2.8 2.79a.42.42 0 0 1 .068.498m-.106.138.008.004v-.01zM16 7.063h1.5a2 2 0 0 1 2 2v10a2 2 0 0 1-2 2h-11c-1.1 0-2-.9-2-2v-10a2 2 0 0 1 2-2H8a.5.5 0 0 1 .35.15.5.5 0 0 1 .15.35.5.5 0 0 1-.15.35.5.5 0 0 1-.35.15H6.4c-.5 0-.9.4-.9.9v10.2a.9.9 0 0 0 .9.9h11.2c.5 0 .9-.4.9-.9v-10.2c0-.5-.4-.9-.9-.9H16a.5.5 0 0 1 0-1" fill="currentColor" fill-rule="evenodd"></path></svg></button></div></div></div></div></div></div></div></div></div></div></footer><div class="rw e" id="bkmrk--3" style="text-align: justify;"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="v iz ix iv rx ry"><div class="rz sa sb sc sd se sf sg sh si v ct"><div class="au bt">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:48:48/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e sj sk gb g ae sl">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---post_author_info--c5106b9dd861---------------------------------------)</div></div><div class="v cs ca">  
</div></div></div></div></div>## <span class="hi su">Written by Nazar Egorov</span>

<div class="rw e" id="bkmrk-13-followers-%C2%B71-foll" style="text-align: justify;"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="v iz ix iv rx ry"><div class="v cs ca"><div class="sp sq sr ss st e"><div class="qy v jb"><div class="e bx"><span class="pw-follower-count bb b bc u dy">[13 followers](https://medium.com/@ngza5tqf/followers?source=post_page---post_author_info--c5106b9dd861---------------------------------------)</span></div><div class="bb b bc u dy v qu"><span aria-hidden="true" class="ti e"><span class="bb b bc u dy">·</span></span>[1 following](https://medium.com/@ngza5tqf/following?source=post_page---post_author_info--c5106b9dd861---------------------------------------)</div></div><div class="qm e">  
</div></div></div><div class="au bt"><div class="v"><button class="yh yl ak v cf j yr ku ys"><span class="bb b bc u bg bd"><span class="bi yp">Follow</span></span></button></div></div></div></div></div></div>## No responses yet

<div class="tj e" id="bkmrk--4" style="text-align: justify;"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="v j ct"><div class="v tl"><div><div aria-describedby="15" aria-labelledby="15" class="bi" role="tooltip"><div class="ba" tabindex="-1">[<svg aria-label="Shield with a checkmark" height="25" viewbox="0 0 25 25" width="25" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M11.987 5.036a.754.754 0 0 1 .914-.01c.972.721 1.767 1.218 2.6 1.543.828.322 1.719.485 2.887.505a.755.755 0 0 1 .741.757c-.018 3.623-.43 6.256-1.449 8.21-1.034 1.984-2.662 3.209-4.966 4.083a.75.75 0 0 1-.537-.003c-2.243-.874-3.858-2.095-4.897-4.074-1.024-1.951-1.457-4.583-1.476-8.216a.755.755 0 0 1 .741-.757c1.195-.02 2.1-.182 2.923-.503.827-.322 1.6-.815 2.519-1.535m.468.903c-.897.69-1.717 1.21-2.623 1.564-.898.35-1.856.527-3.026.565.037 3.45.469 5.817 1.36 7.515.884 1.684 2.25 2.762 4.284 3.571 2.092-.81 3.465-1.89 4.344-3.575.886-1.698 1.299-4.065 1.334-7.512-1.149-.039-2.091-.217-2.99-.567-.906-.353-1.745-.873-2.683-1.561m-.009 9.155a2.672 2.672 0 1 0 0-5.344 2.672 2.672 0 0 0 0 5.344m0 1a3.672 3.672 0 1 0 0-7.344 3.672 3.672 0 0 0 0 7.344m-1.813-3.777.525-.526.916.917 1.623-1.625.526.526-2.149 2.152z" fill-rule="evenodd"></path></svg>](https://policy.medium.com/medium-rules-30e5502c4eb4?source=post_page---post_responses--c5106b9dd861---------------------------------------)</div></div></div></div></div><div class="to tp tq tr ts e"><div><div class="bb b bc u bg"><div class="xo"><div class="xw e"><div class="xx v j"><div class="e fw">![](https://miro.medium.com/v2/resize:fill:32:32/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e bv bw gb g ae sl">  
</div></div><div class="bj v cr cs cf">  
</div></div></div></div></div></div></div></div></div></div>Write a response

<div class="tj e" id="bkmrk-what-are-your-though" style="text-align: justify;"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="to tp tq tr ts e"><div><div class="bb b bc u bg"><div class="xo"><div class="xw e"><div class="xx v j"><div class="bj v cr cs cf">  
</div></div><div class="db bl v cs xp xq">What are your thoughts? <div class="v cs fw"><div class="ct xr dy v xs vz xt"><div class="v"><div><div aria-describedby="28" aria-labelledby="28" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="Bold (⌘B)" class="xy xz ya yb bl ly cf yc yd ye" role="button" tabindex="0"><svg height="21" width="21"><path d="M10.308 17.993h-5.92l.11-.894.783-.12c.56-.11.79-.224.79-.448V5.37c0-.225-.113-.336-.902-.448H4.5l-.114-.894h6.255c4.02 0 5.58 1.23 5.58 3.13 0 1.896-1.78 3.125-3.79 3.463v.11c2.69.34 4.25 1.56 4.25 3.57 0 2.35-2.01 3.69-6.37 3.69l.02.01h-.02zm-.335-12.96H8.967V10.5h1.23c1.788 0 2.79-1.23 2.79-2.683 0-1.685-1.004-2.803-3.006-2.803v.02zm-.223 6.36h-.783v5.588l1.225.23h.22c1.67 0 3.01-1.004 3.01-2.792 0-2.122-1.566-3.016-3.69-3.016h.018z" fill-rule="evenodd"></path></svg></span></div></div></div><div><div aria-describedby="29" aria-labelledby="29" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="Italic (⌘I)" class="xy xz ya yb bl ly cf yc yd ye" role="button" tabindex="0"><svg height="21" width="21"><path d="M9.847 18.04c-.533 0-2.027-.64-1.92-.853l2.027-7.68-.64-.214-1.387 1.494-.427-.427c.534-1.173 1.707-2.667 2.774-2.667.533 0 2.24.534 2.133.854l-2.133 7.786.533.214 1.6-1.067.427.427c-.64 1.066-1.92 2.133-2.987 2.133m2.347-11.733c-.96 0-1.387-.64-1.387-1.387 0-1.067.747-1.92 1.493-1.92.854 0 1.387.64 1.387 1.493-.107 1.067-.747 1.814-1.493 1.814" fill-rule="evenodd"></path></svg></span></div></div></div></div><div class="xu so v xs vz xt"><div class="xv"><button class="bb b dz u bg yf yg yh wi lx lt vs ez fa fb yi yj yk fe ff fg fh bi fi fj" data-testid="CancelResponseButton">Cancel</button></div><button class="bb b dz u vn yf vo vp vq vr vs ez fa vt vu vv fe ff fg fh bi fi fj" data-testid="ResponseRespondButton" disabled="disabled">Respond</button></div></div></div></div></div></div></div></div></div></div></div></div>## More from Nazar Egorov

<div class="tt tu tv tw tx e bs" id="bkmrk-nazar-egorov-postgre" style="text-align: justify;"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="yt yu dq dr ds qm e">  
</div><div class="wo v kv jm yv yw yx yy yz za zb zc zd ze zf zg zh zi zj"><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL backup verification — How to test and validate your PostgreSQL backups"><div class="abx aby abz aca bz">![PostgreSQL backup verification — How to test and validate your PostgreSQL backups](https://miro.medium.com/v2/resize:fit:679/format:webp/1*wyEiQ4tgUleLGu5jSHsguQ.jpeg)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="86" aria-labelledby="86" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---author_recirc--c5106b9dd861----0---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div></div></div><div><div aria-describedby="87" aria-labelledby="87" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Nazar Egorov

## PostgreSQL backup verification — How to test and validate your PostgreSQL backups

### A backup that can’t be restored is not a backup. Many teams discover their backups are corrupted, incomplete or otherwise unusable only…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Jan 20</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="217" aria-labelledby="217" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>1</div></div></div></div>](https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048?source=post_page---author_recirc--c5106b9dd861----0---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="88" aria-labelledby="88" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---author_recirc--c5106b9dd861----0-----------------explicit_signal----4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/mariadb-docker-setup-running-mariadb-in-docker-containers-complete-guide-998d3d7b1547" role="link" tabindex="0"><div class="abv"><div aria-label="MariaDB Docker setup — Running MariaDB in Docker containers complete guide"><div class="abx aby abz aca bz">![MariaDB Docker setup — Running MariaDB in Docker containers complete guide](https://miro.medium.com/v2/resize:fit:679/format:webp/1*cIOEq77UeIvHV1l81Mrvqw.jpeg)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="90" aria-labelledby="90" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---author_recirc--c5106b9dd861----1---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div></div></div><div><div aria-describedby="91" aria-labelledby="91" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Nazar Egorov

## MariaDB Docker setup — Running MariaDB in Docker containers complete guide

### Running MariaDB in Docker simplifies deployment, makes environments reproducible, and allows you to spin up databases in seconds. Whether…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/mariadb-docker-setup-running-mariadb-in-docker-containers-complete-guide-998d3d7b1547" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Feb 1</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div></div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="92" aria-labelledby="92" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---author_recirc--c5106b9dd861----1-----------------explicit_signal----4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-wal-archiving-explained-understanding-write-ahead-logs-for-backup-and-recovery-29f512781c50" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL WAL archiving explained — Understanding Write-Ahead Logs for backup and recovery"><div class="abx aby abz aca bz">![PostgreSQL WAL archiving explained — Understanding Write-Ahead Logs for backup and recovery](https://miro.medium.com/v2/resize:fit:679/format:webp/1*6PX3hnN4OtQFTuKSsCLDDg.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="94" aria-labelledby="94" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---author_recirc--c5106b9dd861----2---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div></div></div><div><div aria-describedby="95" aria-labelledby="95" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Nazar Egorov

## PostgreSQL WAL archiving explained — Understanding Write-Ahead Logs for backup and recovery

### Write-Ahead Logs are PostgreSQL’s insurance policy against data loss. Every transaction gets written to WAL before it touches your actual…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-wal-archiving-explained-understanding-write-ahead-logs-for-backup-and-recovery-29f512781c50" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Jan 14</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="218" aria-labelledby="218" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>18</div></div></div></div>](https://medium.com/@ngza5tqf/postgresql-wal-archiving-explained-understanding-write-ahead-logs-for-backup-and-recovery-29f512781c50?source=post_page---author_recirc--c5106b9dd861----2---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="96" aria-labelledby="96" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---author_recirc--c5106b9dd861----2-----------------explicit_signal----4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-encryption-how-to-encrypt-your-postgresql-database-backups-448707297cf2" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL backup encryption — How to encrypt your PostgreSQL database backups"><div class="abx aby abz aca bz">![PostgreSQL backup encryption — How to encrypt your PostgreSQL database backups](https://miro.medium.com/v2/resize:fit:679/format:webp/1*jYs0OPqYLZUhFuvlHAv8SQ.jpeg)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="98" aria-labelledby="98" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---author_recirc--c5106b9dd861----3---------------------4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</div></div></div></div></div><div><div aria-describedby="99" aria-labelledby="99" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Nazar Egorov

## PostgreSQL backup encryption — How to encrypt your PostgreSQL database backups

### Unencrypted backups are a security liability. A database backup contains everything — user credentials, payment details, personal…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-encryption-how-to-encrypt-your-postgresql-database-backups-448707297cf2" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Jan 21</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div></div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="100" aria-labelledby="100" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---author_recirc--c5106b9dd861----3-----------------explicit_signal----4ca0ada0_4df9_453d_8df0_c8a71e125b49--------------)</span></div></div></div></div></div></div></div></div></article></div></div></div><div class="tk bd ty do dp afa afb afc">  
</div><div class="v ry rx iv ix iz">[<div class="e fj">See all from Nazar Egorov</div>](https://medium.com/@ngza5tqf?source=post_page---author_recirc--c5106b9dd861---------------------------------------)</div></div></div><div class="tk bd ty afi afj afk afl afm">  
</div><div class="v cf"><div class="cm bd gu gv gw gx"><div class="afn afo e">  
</div></div></div></div>## Recommended from Medium

<div class="tt tu tv tw tx e bs" id="bkmrk-postgresql-backup-st"><div class="v cf"><div class="cm bd gu gv gw gx"><div class="afn afo e"><div class="nz oa ob oc od e" style="text-align: justify;"><div class="wo v kv jm yv yw yx yy yz za zb zc zd ze zf zg zh zi zj"><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/postgresql-blogs/postgresql-backup-strategies-acad0db78622" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL Backup Strategies"><div class="abx aby abz aca bz">![PostgreSQL Backup Strategies](https://miro.medium.com/v2/resize:fit:679/format:webp/1*W6E3iwRpj12gBD8cVyJjAg.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div><div aria-describedby="102" aria-labelledby="102" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="fw">![PostgreSQL Blogs](https://miro.medium.com/v2/resize:fill:20:20/1*V1SfmItVp3itBFetEgMTRw.png)<div class="wj e acn aco gb g gn go">  
</div></div>](https://medium.com/postgresql-blogs?source=post_page---read_next_recirc--c5106b9dd861----0---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div><div class="su e fp">  
</div></div></div></div></div></div></div></div>## PostgreSQL Backup Strategies

### Database engineers are divided into two types: those who take backups, and those who haven’t lost data yet.” We all know this old saying…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/postgresql-blogs/postgresql-backup-strategies-acad0db78622" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><div class="ri v"><div class=""><div><div aria-describedby="105" aria-labelledby="105" class="bi" role="tooltip"><div class="ba" tabindex="-1"><svg fill="none" height="16" viewbox="0 0 64 64" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m39.637 40.831-5.771 15.871a1.99 1.99 0 0 1-3.732 0l-5.771-15.87a2.02 2.02 0 0 0-1.194-1.195L7.298 33.866a1.99 1.99 0 0 1 0-3.732l15.87-5.771a2.02 2.02 0 0 0 1.195-1.194l5.771-15.871a1.99 1.99 0 0 1 3.732 0l5.771 15.87a2.02 2.02 0 0 0 1.194 1.195l15.871 5.771a1.99 1.99 0 0 1 0 3.732l-15.87 5.771a2.02 2.02 0 0 0-1.195 1.194" fill="#FFC017"></path></svg></div></div></div></div></div><span class="e fp">Jan 2</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="219" aria-labelledby="219" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>32</div></div></div></div>](https://medium.com/postgresql-blogs/postgresql-backup-strategies-acad0db78622?source=post_page---read_next_recirc--c5106b9dd861----0---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="106" aria-labelledby="106" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---read_next_recirc--c5106b9dd861----0-----------------explicit_signal----e474be26_2d3d_4563_beef_98fd766fea16--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@borhadeshardul/mastering-postgresql-autovacuum-tuning-for-peak-performance-a8a7d46c4675" role="link" tabindex="0"><div class="abv"><div aria-label="Mastering PostgreSQL Autovacuum: Tuning for Peak Performance"><div class="abx aby abz aca bz">![Mastering PostgreSQL Autovacuum: Tuning for Peak Performance](https://miro.medium.com/v2/resize:fit:679/format:webp/1*g0ctNdbNmTAtSWfgSqiS7A.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="108" aria-labelledby="108" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Borhadeshardul](https://miro.medium.com/v2/resize:fill:20:20/0*0LLIkQ4TGaWPRl4H)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@borhadeshardul?source=post_page---read_next_recirc--c5106b9dd861----1---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div></div><div><div aria-describedby="109" aria-labelledby="109" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Borhadeshardul

## Mastering PostgreSQL Autovacuum: Tuning for Peak Performance

### When it comes to PostgreSQL performance, autovacuum is one of the most critical and often misunderstood features. It silently keeps your…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@borhadeshardul/mastering-postgresql-autovacuum-tuning-for-peak-performance-a8a7d46c4675" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Oct 22, 2025</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="220" aria-labelledby="220" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>4</div></div></div></div><div><div aria-describedby="110" aria-labelledby="110" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="response-filled-16px-desc" fill="#6B6B6B" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.344 11.458A5.28 5.28 0 0 0 14 7.526C14 4.483 11.391 2 8.051 2S2 4.483 2 7.527c0 3.051 2.712 5.526 6.059 5.526a6.6 6.6 0 0 0 1.758-.236q.255.223.554.414c.784.51 1.626.768 2.512.768a.37.37 0 0 0 .355-.214.37.37 0 0 0-.03-.384 4.7 4.7 0 0 1-.857-1.958v.014z" fill="#6B6B6B"></path></svg>1</div></div></div></div>](https://medium.com/@borhadeshardul/mastering-postgresql-autovacuum-tuning-for-peak-performance-a8a7d46c4675?source=post_page---read_next_recirc--c5106b9dd861----1---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="111" aria-labelledby="111" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---read_next_recirc--c5106b9dd861----1-----------------explicit_signal----e474be26_2d3d_4563_beef_98fd766fea16--------------)</span></div></div></div></div></div></div></div></div></article></div></div></div></div><div class="wo v kv jm yv yw yx yy yz za zb zc zd ze zf zg zh zi zj"><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc" style="text-align: justify;"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@philmcc/wal-and-vacuum-monitoring-the-two-metrics-that-predict-every-outage-b8cadeac65c0" role="link" tabindex="0"><div class="abv"><div aria-label="WAL and Vacuum Monitoring: The Two Metrics That Predict Every Outage"><div class="abx aby abz aca bz">![WAL and Vacuum Monitoring: The Two Metrics That Predict Every Outage](https://miro.medium.com/v2/resize:fit:679/format:webp/0*fPu7lGH1XAEFdy_k.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="113" aria-labelledby="113" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Philip McClarence](https://miro.medium.com/v2/resize:fill:20:20/0*slpZPUnxPkeJsRWy)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@philmcc?source=post_page---read_next_recirc--c5106b9dd861----0---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div></div><div><div aria-describedby="114" aria-labelledby="114" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Philip McClarence

## WAL and Vacuum Monitoring: The Two Metrics That Predict Every Outage

### Every PostgreSQL outage post-mortem I have read — and I have read a lot of them — eventually traces back to one of two things: the disk…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@philmcc/wal-and-vacuum-monitoring-the-two-metrics-that-predict-every-outage-b8cadeac65c0" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Mar 7</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="222" aria-labelledby="222" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>1</div></div></div></div>](https://medium.com/@philmcc/wal-and-vacuum-monitoring-the-two-metrics-that-predict-every-outage-b8cadeac65c0?source=post_page---read_next_recirc--c5106b9dd861----0---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="115" aria-labelledby="115" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---read_next_recirc--c5106b9dd861----0-----------------explicit_signal----e474be26_2d3d_4563_beef_98fd766fea16--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc" style="text-align: justify;"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL backup verification — How to test and validate your PostgreSQL backups"><div class="abx aby abz aca bz">![PostgreSQL backup verification — How to test and validate your PostgreSQL backups](https://miro.medium.com/v2/resize:fit:679/format:webp/1*wyEiQ4tgUleLGu5jSHsguQ.jpeg)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="117" aria-labelledby="117" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Nazar Egorov](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@ngza5tqf?source=post_page---read_next_recirc--c5106b9dd861----1---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div></div><div><div aria-describedby="118" aria-labelledby="118" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Nazar Egorov

## PostgreSQL backup verification — How to test and validate your PostgreSQL backups

### A backup that can’t be restored is not a backup. Many teams discover their backups are corrupted, incomplete or otherwise unusable only…

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><span class="e fp">Jan 20</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="223" aria-labelledby="223" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>1</div></div></div></div>](https://medium.com/@ngza5tqf/postgresql-backup-verification-how-to-test-and-validate-your-postgresql-backups-367ef0f61048?source=post_page---read_next_recirc--c5106b9dd861----1---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="119" aria-labelledby="119" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---read_next_recirc--c5106b9dd861----1-----------------explicit_signal----e474be26_2d3d_4563_beef_98fd766fea16--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc" style="text-align: justify;"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@kgabeci/postgresql-performance-tuning-that-actually-matters-a850853ed171" role="link" tabindex="0"><div class="abv"><div aria-label="PostgreSQL Performance Tuning That Actually Matters"><div class="abx aby abz aca bz">![PostgreSQL Performance Tuning That Actually Matters](https://miro.medium.com/v2/resize:fit:679/format:webp/1*3xt9HnB3FxfStmmbWQNGtQ.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="121" aria-labelledby="121" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw">![Kevin Gabeci](https://miro.medium.com/v2/resize:fill:20:20/1*PdahAsKQKcE_-7cg40XCCQ.png)<div class="gn bu e acn aco gb g ae go">  
</div></div>](https://medium.com/@kgabeci?source=post_page---read_next_recirc--c5106b9dd861----2---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div></div><div><div aria-describedby="122" aria-labelledby="122" class="e" role="tooltip">  
</div></div></div></div></div></div></div></div></div>Kevin Gabeci

## PostgreSQL Performance Tuning That Actually Matters

### The 20% of config changes that solve 80% of performance problems.

<div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@kgabeci/postgresql-performance-tuning-that-actually-matters-a850853ed171" role="link" tabindex="0"><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="acw e acx acy acz ada adb hi">  
</div><div class="sj v ct y"><div class="v j aet"><div class="ri v"><div class=""><div><div aria-describedby="123" aria-labelledby="123" class="bi" role="tooltip"><div class="ba" tabindex="-1"><svg fill="none" height="16" viewbox="0 0 64 64" width="16" xmlns="http://www.w3.org/2000/svg"><path d="m39.637 40.831-5.771 15.871a1.99 1.99 0 0 1-3.732 0l-5.771-15.87a2.02 2.02 0 0 0-1.194-1.195L7.298 33.866a1.99 1.99 0 0 1 0-3.732l15.87-5.771a2.02 2.02 0 0 0 1.195-1.194l5.771-15.871a1.99 1.99 0 0 1 3.732 0l5.771 15.87a2.02 2.02 0 0 0 1.194 1.195l15.871 5.771a1.99 1.99 0 0 1 0 3.732l-15.87 5.771a2.02 2.02 0 0 0-1.195 1.194" fill="#FFC017"></path></svg></div></div></div></div></div><span class="e fp">Mar 3</span><div class=""><div class="fw aer dl v j"><div class="gb vz aes v j aet"><div class="fk dl aeu e db">  
</div></div>[<div><div aria-describedby="224" aria-labelledby="224" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="clap-filled-static-desc" fill="none" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="m3.672 10.167 2.138 2.14h-.002c1.726 1.722 4.337 2.436 5.96.81 1.472-1.45 1.806-3.68.76-5.388l-1.815-3.484c-.353-.524-.849-1.22-1.337-.958-.49.261 0 1.56 0 1.56l.78 1.932L6.43 2.866c-.837-.958-1.467-1.108-1.928-.647-.33.33-.266.856.477 1.598.501.503 1.888 1.957 1.888 1.957.17.174.083.485-.093.655a.56.56 0 0 1-.34.163.43.43 0 0 1-.317-.135s-2.4-2.469-2.803-2.87c-.344-.346-.803-.54-1.194-.15-.408.406-.273 1.065.11 1.447.345.346 2.31 2.297 2.685 2.67l.062.06c.17.175.269.628.093.8-.193.188-.453.33-.678.273a.9.9 0 0 1-.446-.273S2.501 6.84 1.892 6.23c-.407-.406-.899-.333-1.229 0-.525.524.263 1.28 1.73 2.691.384.368.814.781 1.279 1.246m8.472-7.219c.372-.29.95-.28 1.303.244V3.19l1.563 3.006.036.074c.885 1.87.346 4.093-.512 5.159l-.035.044c-.211.264-.344.43-.74.61 1.382-1.855.963-3.478-.248-5.456L11.943 3.88l-.002-.037c-.017-.3-.039-.71.203-.895" fill="#6B6B6B" fill-rule="evenodd"></path></svg>53</div></div></div></div><div><div aria-describedby="124" aria-labelledby="124" class="v" role="tooltip"><div class="ba" tabindex="-1"><div class="v j fm"><svg aria-labelledby="response-filled-16px-desc" fill="#6B6B6B" height="16" viewbox="0 0 16 16" width="16" xmlns="http://www.w3.org/2000/svg"><path d="M12.344 11.458A5.28 5.28 0 0 0 14 7.526C14 4.483 11.391 2 8.051 2S2 4.483 2 7.527c0 3.051 2.712 5.526 6.059 5.526a6.6 6.6 0 0 0 1.758-.236q.255.223.554.414c.784.51 1.626.768 2.512.768a.37.37 0 0 0 .355-.214.37.37 0 0 0-.03-.384 4.7 4.7 0 0 1-.857-1.958v.014z" fill="#6B6B6B"></path></svg>1</div></div></div></div>](https://medium.com/@kgabeci/postgresql-performance-tuning-that-actually-matters-a850853ed171?source=post_page---read_next_recirc--c5106b9dd861----2---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div><div class="v j aev aew"><span data-dd-action-name="Susi presentation tracker explicit_signal">[<div><div aria-describedby="125" aria-labelledby="125" class="bi" role="tooltip"><div class="ba" tabindex="-1"><span aria-label="I'm not interested in this story" class="aex aey aez"><svg fill="none" height="24" viewbox="0 0 24 24" width="24" xmlns="http://www.w3.org/2000/svg"><path d="m1.89 14.768 1.124-9a1.875 1.875 0 0 1 1.861-1.643H21a1.125 1.125 0 0 1 1.125 1.125v8.25A1.125 1.125 0 0 1 21 14.625h-4.268l-3.646 7.293a.38.38 0 0 1-.336.207 3.375 3.375 0 0 1-3.375-3.375v-1.875H3.75a1.874 1.874 0 0 1-1.86-2.107Zm14.985-.893H21a.375.375 0 0 0 .375-.375V5.25A.375.375 0 0 0 21 4.875h-4.125zm-13.969 1.87a1.13 1.13 0 0 0 .844.38h6a.375.375 0 0 1 .375.375v2.25a2.625 2.625 0 0 0 2.398 2.616l3.602-7.204V4.875H4.875a1.125 1.125 0 0 0-1.117.985l-1.125 9a1.13 1.13 0 0 0 .273.884Z" fill="#6B6B6B" stroke="#6B6B6B" stroke-width="0.25"></path></svg></span></div></div></div>](https://medium.com/m/signin?operation=register&redirect=https%3A%2F%2Fmedium.com%2F%40ngza5tqf%2Fmariabackup-tutorial-using-mariabackup-for-hot-physical-backups-of-mariadb-c5106b9dd861&source=---read_next_recirc--c5106b9dd861----2-----------------explicit_signal----e474be26_2d3d_4563_beef_98fd766fea16--------------)</span></div></div></div></div></div></div></div></div></article></div></div><div class="zk zl zm st zn zo zp ss zq zr zs zt zu zv zw zx zy zz aba abb abc"><div class="abd abe abf abg abh ea e"><article class="ea" data-testid="post-preview"><div class="ea ri e"><div class="bd ea"><div class="ea e"><div class="fw ea abi abj abk abl abm abn abo abp abq abr abs abt abu" data-href="https://medium.com/@knouzoussama/customizing-storage-paths-in-laravel-lumen-75d362fddd85" role="link" tabindex="0"><div class="abv" style="text-align: justify;"><div aria-label="Customizing storage paths in Laravel / Lumen"><div class="abx aby abz aca bz">![Customizing storage paths in Laravel / Lumen](https://miro.medium.com/v2/resize:fit:679/format:webp/1*C3CsQA8BbUyrR5I3nlyvWQ.png)</div></div></div><div class="abw v cf cs"><div class="v cs wk bd ace acf acg ach"><div class="aci acj ack acl acm v j"><div class="qz e"><div class="e"><div><div aria-describedby="127" aria-labelledby="127" class="e" role="tooltip"><div class="ba" tabindex="-1">[<div class="e fw" style="text-align: justify;">![ucama](https://miro.medium.com/v2/resize:fill:20:20/1*dmbNkD5D-u45r44go_cf0g.png)</div>](https://medium.com/@knouzoussama?source=post_page---read_next_recirc--c5106b9dd861----3---------------------e474be26_2d3d_4563_beef_98fd766fea16--------------)</div></div></div></div></div><div></div></div></div></div></div></div></div></div></article></div></div></div></div></div></div></div>