MySQL Backup cand serverul este in rescue mode

AlexH

Merg pe strada catre Mine...
Membru personal
Administrative
Freelancer
SEO Expert
Cei care aveti servere dedicate la oneprovider in special, ati patit cel putin odata ca serverul sa fie in rescue mode, fara optiunea de boot normal si iti cere sa faci reinstall.

Cand se intampla asta daca nu ai backup la bazele de date, iti poti lua adio, pentru ca procesul pentru in incepator este foarte complicat sa faca backup la bazele de date.

Acest script care trebuie rulat in consola care in principiu ar trebui sa faca:

1. face si seteaza chroot environment
2. porneste serverul de mysql
3. face backup la toate bazele de date in folderul /home/backup/rescuemode

Folderul de backup se poate schimba dupa cum doriti.
Un mic avantaj este ca face un chroot environment now pentru fiecare rulare, asta pentru a evita probleme.

Nu este testat si sper sa nu aveti nevoie . Daca aveti nevoie de ajutor sau eventuale probleme ma anuntati si vom incerca sa rezolvam problema.
Trebuie sa setati datele cu user root si paola root de la mysql.
Cod:
MYSQL_USER="your_mysql_user"
MYSQL_PASSWORD="your_mysql_password"


Acesta este codul sh care trebuie sa-l rulati.

Cod:
#!/bin/bash

# Define MySQL root user and password
MYSQL_USER="your_mysql_user"
MYSQL_PASSWORD="your_mysql_password"

# Define the backup directory
BACKUP_DIR="/home/backup/rescuemode"

# Generate a unique CHROOT_PATH
CHROOT_PATH="/tmp/chroot_$(date +%s)"

# Function to start MySQL inside the chroot environment
start_mysql() {
    chroot $CHROOT_PATH /bin/bash -c "systemctl start mysql"
}

# Function to back up all databases inside the chroot environment
backup_databases() {
    local databases
    databases=$(chroot $CHROOT_PATH /bin/bash -c "mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -Ev '(Database|information_schema|performance_schema|mysql)'")

    for db in $databases; do
        chroot $CHROOT_PATH /bin/bash -c "mysqldump -u$MYSQL_USER -p$MYSQL_PASSWORD --databases $db > $BACKUP_DIR/$db-$(date +%F).sql"
    done
}

# Main script
# Create chroot environment
mkdir -p $CHROOT_PATH
debootstrap --arch=amd64 bionic $CHROOT_PATH

# Mount essential directories
mount -t proc none $CHROOT_PATH/proc
mount -t sysfs none $CHROOT_PATH/sys
mount -o bind /dev $CHROOT_PATH/dev

# Copy host system's resolv.conf
cp /etc/resolv.conf $CHROOT_PATH/etc/resolv.conf

# Chroot into the environment
chroot $CHROOT_PATH

# Install MySQL and configure it
apt update
apt install -y mysql-server

# Start MySQL
start_mysql

# Run the backup script
backup_databases

# Exit the chroot environment
exit

# Unmount chroot environment
chroot $CHROOT_PATH /bin/bash -c "systemctl stop mysql"
umount $CHROOT_PATH/proc
umount $CHROOT_PATH/sys
umount $CHROOT_PATH/dev

# Remove the chroot environment directory
rm -r $CHROOT_PATH

echo "Backup completed in $BACKUP_DIR/backup-$(date +%F).tar.gz"
 
Am uitat sa mentionez cu se ruleaza.

1. apt install nano (daca nu aveti instalat acest editor)
2. nano dbrescuemode.sh
3. paste la codul de mai sus
4. ctrl + x pentru a inchide si apoi y pentru sa confirma salvarea
5. facem scriptul executabil folosind comanda chmod +x dbrescuemode.sh
6. rulam scriptul sudo ./dbrescuemode.sh
7. accesam folderul de backup pentru a descarca bazele de date


Acum trebuie sa copiem datele penoul server daca avem.
comanda este aceasta:
scp -r /home/backup/rescuemode/* root@ip:22 /home/backup/rescuemode
Daca doriti sa le descarcati pe calculator atunci folositi winscp.
1. descarcati si instalati winscp
2. deschideti programul si login cu datele de login de la rescue mode care sunt diferite fata de login normal la server
3. mergeti in folderul unde sunt salvate bazele de date si la transferati in calculator.
 
Ultima editare:
Loading...
Back
Sus