Last updated on 21 Aralık 2018
MySQL veritabanı yedeğini almanın en kolay yolu mysqldump komutunu kullanmaktır. Yedekleme işlemini otomatik hale getirmek için ise crontab kullanabiliriz. Bu işlem için ise genellikle crontab’a aşağıdaki komutu ekleriz.
00 2 * * * root mysqldump -u root -pPASSWORD --all-databases > /var/mysqldump
Burada mysqldump komutuna şifreyi -p parametresi ile geçiyoruz. Bu şekilde komut çalışırken giriş yapmış herhangi bir kullanıcı ps aux komutu ile işlem tablosuna bakarak şifreyi görebilir. Buradaki hata girdisine verilmiş cevabı da okuyabilirsiniz.
Çözüm olarak öncelikle yedek alacağınız kullanıcının şifresini aşağıdaki formatta bir dosyaya kayıt ediyoruz.
[mysqldump] password=PASSWORD
Dosyayı /root/mysqldump.cnf olarak kayıt edebilirsiniz. Aşağıdaki komut ile dosyayı sadece root kullanıcısının okuyabileceği şekilde yetkilerini ayarlıyoruz.
[bash]chmod 400 /var/mysqldump.cnf[/bash]
crontab‘a eklediğimiz komutu aşağıdaki şekilde değiştiriyoruz. –defaults-extra-file parametresi ilk parametre olması gerekiyor.
00 2 * * * root mysqldump --defaults-extra-file=/var/mysqldump.cnf -u root --all-databases > /var/mysqldump
MySQL veritabanı yedeklerinizi alırken root kullanıcı kullanmak yerine yetkileri kısıtlanmış bir kullanıcı oluşturup onu kullanmanız daha güvenli olacaktır. Bunun için MySQL sunucusuna bağlanarak aşağıdaki şekilde kullanıcıyı oluşturup yedekleme için gerekli yetkileri verebilirsiniz.
$ mysql -uroot -p mysql> GRANT SELECT ON *.* TO 'bck'@'localhost' IDENTIFIED BY [PASSWORD]; mysql> GRANT LOCK TABLES ON *.* TO 'bck'@'localhost'; mysql> GRANT RELOAD ON *.* TO 'bck'@'localhost'; mysql> GRANT CREATE, INSERT, DROP ON mysql.ibbackup_binlog_marker TO 'bck'@'localhost'; mysql> GRANT CREATE, INSERT, DROP ON mysql.backup_progress TO 'bck'@'localhost'; mysql> GRANT CREATE, INSERT, DROP ON mysql.backup_history TO 'bck'@'localhost'; mysql> GRANT REPLICATION CLIENT ON *.* TO 'bck'@'localhost'; mysql> GRANT SUPER ON *.* TO 'bck'@'localhost'; mysql> GRANT CREATE TEMPORARY TABLES ON mysql.* TO 'bck'@'localhost'; mysql> FLUSH PRIVILEGES;
Bununla birlikte crontab komutumuzu aşağıdaki şekilde değiştirmemiz gerekiyor.
00 2 * * * root mysqldump --defaults-extra-file=/var/mysqldump.cnf -u bck --all-databases > /var/mysqldump
İlk Yorumu Siz Yapın