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