Ubuntu üzerinde MySQL otomatik yedekleme


13

Mysql veritabanıyla bir Ubuntu sunucum var. Başka bir sunucuda (örneğin ovh) gece boyunca bu veritabanının otomatik bir yedeğini ayarlamak istiyorum.

Bunun için en iyi aracın ne olacağını bilmiyorum. Birinin tavsiyeleri varsa ...

Şimdiden teşekkürler.

Yanıtlar:


29

Bu görevi otomatikleştirmenin en kolay yolu MySQL Dökümleri ve bir cronjob kombinasyonu olacaktır. Bu konuda ve diğer internet sitelerinde bu konuda birçok bilgi bulabilirsiniz, ancak tamamlama uğruna:

Mysqldump.sh dosyası oluşturma

Bir cron işinde zamanlayacağımız mysql dökümü komutunu içerir (ortamınıza uyacak şekilde kullanıcı, şifre ve yolu değiştirin):

mysqldump -u root -p<mysql_root_password> --all-databases | gzip > /desired/backup/folder/mysqldb_`date +%F`.sql.gz

Düzenleme: Betiğin yedeklemeyi uzak bir yerde saklamasını istiyorsanız, karşılık gelen aygıtı bağlamanız veya betiğin bağlama yolunu paylaşmanız ve kullanmanız yeterlidir.

Komut dosyasını test edin

Komut dosyasının yürütme izinlerine sahip olduğundan emin olun:

chmod +x /path/to/mysqldump.sh

Komut dosyasını yürütün:

sh /path/to/mysqldump.sh

Ve düzgün çalıştığını test edin (Yedekleme dosyası belirtilen yedekleme klasöründe oluşturulacaktır).

Yeni bir cron işi oluşturma ve planlama

Komut istemine şunu yazın

sudo crontab -e

Ve aşağıdaki satırı dosyanın altına ekleyin:

30 23 * * * /path/to/mysqldump.sh

Bu komut dosyasını her gün 23: 30'da çalıştıracaktır.

Bu basit komut dosyasını genişlet

Bu basit yedekleme yöntemini geliştirmek için yapabileceğiniz birçok şey var:

  • Başka bir sisteme yedekleme
  • Disk alanını izleyin
  • E-posta raporlaması
  • ...

Yani burada bitmiyor ve deney yapmayın! :-)

Yedekleme araçlarını veya bulut tabanlı yedekleme hizmetlerini kullanın

Yukarıdaki yöntem en kolay yöntemlerden biri olmasına rağmen ve özel ihtiyaçlarınıza uyacak şekilde genişletilebilse de, başka alternatifler olduğunu belirtmek gerekir:

  • Yedeklemelerinizin E-posta bildirimi, sıkıştırma, şifreleme, döndürme ve türünü (örn. artımlı) yapılandırma işlemini kolaylaştırabilecek açık kaynaklı bir uygulama olan AutoMySQLBackup gibi yedekleme araçları. Mai 2018'e gelince, APunt aracılığıyla Ubuntu Sunucusu için kullanılabilir.
  • birkaç veritabanı sunucusunu yönetiyorsanız ve tüm yedeklemelerini merkezi olarak yönetmek istiyorsanız ilginç olabilecek, BackupBird, myRepono, Bitcan vb. bulut tabanlı yedekleme hizmetleri.

Lütfen yukarıda belirtilen çözümlerin ve hizmetlerin hiçbiriyle ilgili olmadığımı ve bunları yalnızca referans olarak listelediğimi unutmayın, bu yüzden bunları kendi sorumluluğunuzda kullanın.

Yararlı Linkler / Referanslar:

Cron -> https://en.wikipedia.org/wiki/Cron

MySQL Dökümü -> https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html


4
Kullan date +%F- otomatik olarak kullanıcının yerel ayarına uygun yıl + ay + tarih kombinasyonunu seçer (örneğin, alacağım YYYY-MM-DD).
muru

Oh evet, çok daha iyi. Cevabı düzenleyeceğim :-)
Eduardo López

+1 İyi cevap: burada tam olarak ne gerekli, ne daha fazla, ne daha az.
Jos

2
Bu işlemi yapmak için sudo kullanmanız gerekiyorsa (a) çağırın sudo crontab -eve komut dosyasını yürütülebilir hale getirmeyi unutmayın:chmod +x /path/to/mysqldump.sh
zinon

zinon - İpuçları için teşekkürler! Cevabı güncelledim.
Eduardo López

0

MySQL veritabanlarının yedeklenmesini otomatikleştirmenin birkaç yolu vardır:

  1. Bash betiği
  2. Automysqlbackup kullanma
  3. Üçüncü bölüm araçları

Bash betiği

# Backup storage directory 
backup_folder=/var/backups

# Notification email address 
recipient_email=<username@mail.com>

# MySQL user
user=<user_name>

# MySQL password
password=<password>

# Number of days to store the backup 
keep_day=30 

sqlfile=$backup_folder/all-database-$(date +%d-%m-%Y_%H-%M-%S).sql
zipfile=$backup_folder/all-database-$(date +%d-%m-%Y_%H-%M-%S).zip 

# Create a backup 
sudo mysqldump -u $user -p$password --all-databases > $sqlfile 

if [ $? == 0 ]; then
  echo 'Sql dump created' 
else
  echo 'mysqldump return non-zero code' | mailx -s 'No backup was created!' $recipient_email  
  exit 
fi 

# Compress backup 
zip $zipfile $sqlfile 

if [ $? == 0 ]; then
   echo 'The backup was successfully compressed' 
else
   echo 'Error compressing backup' | mailx -s 'Backup was not created!' $recipient_email 
   exit 
fi 

rm $sqlfile 

echo $zipfile | mailx -s 'Backup was successfully created' $recipient_email 

# Delete old backups 
find $backupfolder -mtime +$keep_day -delete
  • Artıları:
    • tamamen ücretsiz
    • bir yedeği otomatikleştirmek için ihtiyacınız olan her şeyi bir bash betiğine ekleyebilirsiniz
  • Eksileri:
    • karmaşık bir yedekleme işlemi yapmak için bash betikleri hakkında iyi bir bilgiye sahip olmak gerekir
    • buluta gönderilecek yedeklemeleri yapılandırmak zor

Automysqlbackup

sudo apt-get install automysqlbackup
wget https://github.com/sixhop/AutoMySQLBackup/archive/master.zip

mkdir /opt/automysqlbackup
mv AutoMySQLBackup-master.zip 
cd /opt/automysqlbackup
tar -zxvf AutoMySQLBackup-master.zip

./install.sh

sudo nano /etc/automysqlbackup/automysqlbackup.conf

CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
CONFIG_backup_dir='/var/backup/db'
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password='my_password'
CONFIG_mysql_dump_host='localhost'
CONFIG_db_names=('my_db')
CONFIG_db_exclude=('information_schema')
CONFIG_mail_address='mail@google.com'
CONFIG_rotation_daily=6
CONFIG_rotation_weekly=35
CONFIG_rotation_monthly=150

automysqlbackup /etc/automysqlbackup/automysqlbackup.conf
  • Artıları:
    • bedava
    • yedekleme işleminin birkaç bölümü komut dosyasına zaten eklenmiş
  • Eksileri:
    • bir klasörü yalnızca yedek depolama yeri olarak belirtebilirsiniz (güvenli değildir)
    • eski yedeklemenin dosyalarını kaldırma fırsatı yoktur

Üçüncü taraf aracı

Hazır bir şeye ihtiyacınız varsa, birçok seçenekle kullanımı kolay SqlBak kullanabilirsiniz .

  • Artıları:

    • bedava
    • kullanımı kolay
    • desteklenen birçok depolama bulutu var
    • farklı bildirim türleri var
    • Bulutlardan otomatik olarak silinen eski yedeklemeler var
    • birçok DBMS sunucusu için tek bir web arayüzü
    • farklı DBMS (MySQL, PostgreSQL, MS SQL Server)
  • Eksileri:

    • artımlı yedekleme yapma fırsatı henüz yok
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.