🚀 Panduan Portabel Percona 8.0 (Podman)
1. Script: startmysql.sh (Tanpa InnoDB Config)
Gunakan $USER agar script otomatis mengenali siapa pun yang menjalankan script ini.
Bash
#!/bin/bash
# Nama File: startmysql.sh
CONTAINER_NAME="psmysql"
# Menggunakan $HOME agar otomatis menyesuaikan nama user server
DB_DATA_DIR="$HOME/mysql"
IMAGE_NAME="docker.io/percona/percona-server:8.0.44"
echo "--- Menjalankan Percona Server ---"
# Inisialisasi folder
mkdir -p "$DB_DATA_DIR"
# Paksa UID 1001 (default Percona) tanpa perlu tahu nama user host
podman unshare chown -R 1001:1001 "$DB_DATA_DIR"
podman rm -f $CONTAINER_NAME >/dev/null 2>&1 || true
podman run -d \
--name $CONTAINER_NAME \
--restart unless-stopped \
-p 3306:3306 \
-v "$DB_DATA_DIR":/var/lib/mysql:Z \
-e TZ=Asia/Jakarta \
-e MYSQL_ROOT_PASSWORD="SecretRootPassword" \
-e MYSQL_ROOT_HOST="%" \
$IMAGE_NAME \
--max_connections=151 \
--default-authentication-plugin=mysql_native_password \
--sql-mode="" \
--innodb_strict_mode=OFF \
--character-set-server=utf8mb4 \
--collation-server=utf8mb4_general_ci \
--default-time-zone="+07:00"
echo "✅ Database berhasil dijalankan di $DB_DATA_DIR"
2. Script: startbackup.sh (Universal)
Menggunakan variabel $HOME dan $USER agar tidak gagal saat pindah server.
Bash
#!/bin/bash
# Nama File: startbackup.sh
CONTAINER_NAME="psmysql"
DATA_DIR="$HOME/mysql"
BACKUP_BASE_DIR="$HOME/backups"
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
TARGET_DIR="/backups/backup_$TIMESTAMP"
mkdir -p "$BACKUP_BASE_DIR"
# Memberikan izin ke container tanpa hardcode nama user
podman unshare chown -R 1001:1001 "$BACKUP_BASE_DIR"
echo "--- Memulai Backup Fisik ---"
podman run --rm \
--network container:$CONTAINER_NAME \
-v "$DATA_DIR":/var/lib/mysql:ro,Z \
-v "$BACKUP_BASE_DIR":/backups:z \
docker.io/percona/percona-xtrabackup:8.0 \
xtrabackup --backup \
--host=127.0.0.1 \
--user=root \
--password="SecretRootPassword" \
--target-dir="$TARGET_DIR"
# Kembalikan akses ke user yang sedang login saat ini
sudo chown -R $USER:$USER "$BACKUP_BASE_DIR"
echo "✅ Backup selesai: $BACKUP_BASE_DIR/backup_$TIMESTAMP"
3. Script: startrestore.sh (Solusi Error 13)
Ini adalah versi yang memperbaiki error pada gambar Anda dengan menggunakan sudo chown -R $USER:$USER agar tidak peduli siapa nama user-nya.
Bash
#!/bin/bash
# Nama File: startrestore.sh
set -e
CONTAINER_NAME="psmysql"
DATA_DIR="$HOME/mysql"
BACKUP_BASE_DIR="$HOME/backups"
IMAGE_XTRABACKUP="docker.io/percona/percona-xtrabackup:8.0"
echo "--- Proses Restore Database ---"
# Pilih folder backup
cd "$BACKUP_BASE_DIR"
PS3="Pilih nomor folder backup: "
select SELECTED in *; do
if [ -n "$SELECTED" ]; then
FULL_PATH="$BACKUP_BASE_DIR/$SELECTED"
break
fi
done
# SOLUSI ERROR 13: Ambil alih kepemilikan folder secara universal
sudo chown -R $USER:$USER "$FULL_PATH"
sudo chmod -R 777 "$FULL_PATH"
echo "1. Prepare Data (Applying Logs)..."
# Gunakan user 0:0 agar xtrabackup bisa mkdir #innodb_redo di dalam container
podman run --rm --user 0:0 -v "$FULL_PATH:/backup:rw,z" $IMAGE_XTRABACKUP \
xtrabackup --prepare --target-dir=/backup
echo "2. Cleanup & Copy-back..."
podman rm -f $CONTAINER_NAME >/dev/null 2>&1 || true
sudo rm -rf "$DATA_DIR"
mkdir -p "$DATA_DIR"
podman run --rm --user 0:0 \
-v "$FULL_PATH:/backup:ro,z" \
-v "$DATA_DIR":/var/lib/mysql:rw,z \
$IMAGE_XTRABACKUP \
xtrabackup --copy-back --target-dir=/backup --datadir=/var/lib/mysql
# Final Touch: Set izin ke UID 1001 agar Percona bisa start
podman unshare chown -R 1001:1001 "$DATA_DIR"
echo "✅ Restore selesai. Sekarang jalankan ./startmysql.sh"
No comments:
Post a Comment