DB miqrasiyası: MySQL backup və restore

DB miqrasiyası WordPress, Laravel, custom tətbiq - hər şeyin əsasıdır. mysqldump klassik üsuldur, lakin böyük DB-lər üçün xüsusi yanaşmalar var.

Sadə mysqldump

Bir DB

mysqldump -u root -p database_name > backup.sql

Bütün DB-lər

mysqldump -u root -p --all-databases > all-backup.sql

Sıxılma

mysqldump -u root -p db | gzip > backup.sql.gz

Restore

SQL faylı

mysql -u root -p database_name < backup.sql

Sıxılmış

gunzip < backup.sql.gz | mysql -u root -p db

Cədvəl strukturu yalnız

mysqldump --no-data db > schema.sql

Data yalnız

mysqldump --no-create-info db > data.sql

Müəyyən cədvəllər

mysqldump db table1 table2 > tables.sql

phpMyAdmin ilə

Export

  1. Database seçin
  2. "Export" tab
  3. "Custom" - format SQL, compression gzip
  4. "Go" - fayl endirilir

Import

  1. Database seçin
  2. "Import" tab
  3. SQL faylı seçin
  4. "Go"

Limit

phpMyAdmin upload limit-i 50 MB - böyük DB üçün mysqldump istifadə edin.

Böyük DB miqrasiyası

SSH üzərindən birbaşa

mysqldump db | ssh user@new-server "mysql new_db"

Heç bir intermediate fayl - DB birbaşa köçür.

Compression

mysqldump db | gzip | ssh user@new "gunzip | mysql new_db"

InnoDB böyük cədvəllər

--single-transaction

Cədvəlləri kilidləməz - production-da sayt işləməyə davam edir.

mysqldump --single-transaction db > backup.sql

Master-slave replication

0 downtime miqrasiya

Yeni serveri köhnəyə slave et - data sürətlə replicate olunur. DNS dəyişəndə yeni master olur.

WordPress DB miqrasiya

WP-CLI export

wp db export backup.sql

Yeni serverdə import

wp db import backup.sql

URL dəyişikliyi

wp search-replace "http://old.com" "https://new.com"

Charset problemləri

utf8 vs utf8mb4

Köhnə MySQL utf8 (3-byte) - emoji-ləri qəbul etmir. Yeni serverdə utf8mb4 (4-byte) istifadə edin.

Konversiya

ALTER DATABASE db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
ALTER TABLE posts CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Foreign key constraints

Import zamanı pozulur

Constraint-ləri müvəqqəti söndürün:

SET FOREIGN_KEY_CHECKS = 0;
-- import
SET FOREIGN_KEY_CHECKS = 1;

Backup test etmək

Yeni DB-yə restore

Backup-ı yeni adlı DB-yə restore edin, cədvəllər var, data düzgün - production-a tətbiq edin.

Şifrə backup

Plain text-də şifrələr

SQL faylda DB istifadəçi şifrələri açıq mətndədir - faylı təhlükəsiz saxlayın.

Automated daily backup

#!/bin/bash
DATE=$(date +%F)
mysqldump --all-databases | gzip > /backup/mysql-$DATE.sql.gz
find /backup -name "mysql-*.sql.gz" -mtime +7 -delete

Cloud DB sync

rclone + B2

rclone sync /backup b2:db-backups

Hostinq.az MySQL backup

Hostinq.az-da MySQL avtomatik gündəlik backup götürülür - 7 gün retention. JetBackup ilə bir kliklə restore.

Hostinq.az hosting - DB miqrasiya pulsuz xidmət.

Paylaş: