mysqldump: Got error: 1556: You can’t use locks with log tables. when using LOCK TABLES hatası
mysqldump ile backup alırken aşağıdaki hata ile karşılaşıyorsanız tabloları lock etmesini kaldırıp devam edebilirsiniz veya mysql veritabanını yedeklemezsiniz.
mysqldump: Got error: 1556: You can't use locks with log tables. when using LOCK TABLES
lock etmesini kaldırmak için dump parametreleri arasına –lock-tables=0 eklemelisiniz.
--lock-tables=0
Posted in Linux, MySQL, Veritabanları on December 6th, 2012 by Kürşad DARA | | 0 Comments
Innodb veritabanları için ibdata1’in dosyasının boyutunu küçültme (shrink edilmesi )
Innodb veritabanı kullanıyorsanız bir süre sonra ibdata1 dosyanızın çok fazla büyüdüğünü göreceksiniz.
Bu dosyanın büyümesi performans ve disk kullanımı açısından problem yaratacaktır. MySQL üstünde bu dosyanın küçültülmesi ile ilgili direk bir komut yok. O yüzden biraz çetrefilli bir yöntemle bu dosyanın boyutunu küçültmek gerekiyor.
Kısaca;
1. MySQL sunucuyu durdurun,
2. MySQL data dizinini komple yedekleyin,
3. MySQL sunucuyu tekrar başlatın,
4. Veritabanının yedeğini mysqldump ile alın,
5. Veritabanlarını silin,
6. MySQL sunucuyu tekrar durdurun,
7. ibdata1, ib_logfile0 ve ib_logfile1 dosyalarını silin,
8. MySQL sunucuyu tekrar çalıştırın,
9. Aldığınız yedeği tekrar yükleyin ( import )
bu adımlarla bu işlemi yapıyoruz.
Detaylara gelirsek;
1. MySQL sunucuyu durdurun.
2. MySQL data dizininin tamamını yedekleyin. Böylece herhangi bir sorun halinde geri dönmemiz kolay olacaktır.
3. MySQL sunucuyu tekrar başlatın.
4. Öncelikle veritabanının yedeğini alıyoruz.
/usr/bin/mysqldump --opt --routines --triggers --all-databases > all.sql
Yedeğin sağlık ve hatasız bir şekilde alındığından emin olun.
5. Veribanlarını drop ile silin.
6. MySQL sunucuyu tekrar durdurun.
7. MySQL data dizininde bulunan ibdata1, ib_logfile0 ve ib_logfile1 dosyalarını silin.
8. MySQL sunucuyu tekrar başlatın. MySQL sunucusunu çalıştırmadan önce. Konfigürasyon dosyanıza ( my.cnf )
innodb_file_per_table
parametresini ekleyin. Böylece artık her tablo için daha küçük bir ibd oluşmasını sağlayacaktır. Bu sayede ilerde çok büyüyen tabloları dump ve restore edip downtime yaşanmadan bu işlemleri yapabilir olursunuz.
Detaylı bilgi için : http://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html
9. Şimdi mysqldump ile aldığımız dosyayı tekrar import edip veritabanlarını tekrar yükleyin.
/usr/bin/mysql < all.sql
Posted in Linux, MySQL on November 21st, 2012 by Kürşad DARA | | 0 Comments
mysqldump ve mydumper performans karşılaştırması.
mydumper multi thread çalışan bir mysql dump uygulaması.
Ben mysqldump ile mydumper performanslarını test ettim. Sonuçlar aşağıda.
Önce 1.5 milyon kayıtlı bir veritabanı üstünde test ettim.
mysql> SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''; +-----------------+ | SUM(TABLE_ROWS) | +-----------------+ | 1522578 | +-----------------+
[root@localhost backup]# time /usr/bin/mysqldump--opt --verbose --max_allowed_packet=500M --single_transaction --net_buffer_length=100M -t --skip-add-locks --skip-extended-insert --skip-comments > mysqldump.sql real 0m9.933s user 0m6.114s sys 0m0.598s [root@localhost backup]# time mydumper -B -o /root/backup/ real 0m5.406s user 0m2.555s sys 0m0.353s
Gördüğünüz gibi mysqldump yaklaşık 2 katı daha fazla sürüyor.
Şimdi kayıt sayısı 25 milyon olan bir veritabanı üstünde test edelim.
mysql> SELECT SUM(TABLE_ROWS) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = ''; +-----------------+ | SUM(TABLE_ROWS) | +-----------------+ | 28570568 | +-----------------+
[root@localhost backup]# time /usr/bin/mysqldump--opt --verbose --max_allowed_packet=500M --single_transaction --net_buffer_length=100M -t --skip-add-locks --skip-extended-insert --skip-comments > mysqldump.sql real 3m24.774s user 1m44.076s sys 0m12.374s [root@localhost backup]# time mydumper -B -o /root/backup/ real 1m58.312s user 0m44.470s sys 0m5.543s
Evet sonuç yine değişmedi. mydumper mysqldump’tan daha hızlı.
Mydumper : www.mydumper.org
Posted in Linux, MySQL, Web Development on July 31st, 2012 by Kürşad DARA | | 0 Comments