mySQL Too many open files hatası
MySQL loglarında aşağıdaki hatayla karşılaşabilirsiniz.
121117 23:21:03 InnoDB: Operating system error number 24 in a file operation. InnoDB: Error number 24 means 'Too many open files'.
Çözüm için my.cnf dosyanıza;
innodb_open_files=24000 open-files-limit=96000
Burada dikkat edilecek nokta open-files-limit parametresinin değeri innodb_open_files parametresinin yaklaşık 4-5 katı olarak set etmeniz.
MySQL i yeniden başlattığınızda sorun çözülecektir.
Detay için : http://dev.mysql.com/doc/refman/5.1/en/server-options.html#option_mysqld_open-files-limit
Posted in Linux, MySQL on November 17th, 2012 by Kürşad DARA | | 0 Comments
[Warning] IP address ‘xxx.xxx.xxx.xxx’ could not be resolved: Name or service not known hatası
MySQL log dosyasında aşağıdaki gibi bir hata alıyorsanız. Çözümü basit.
[Warning] IP address 'xxx.xxx.xxx.xxx' could not be resolved: Name or service not known
Muhtelemen sisteminizde username@xxx.xxx.xxx.xxx şeklinde bir kullanıcınız var.
Ve eğer MySQL skip-name-resolve parametresi ile açılmamış ise girdiğiniz xxx.xxx.xxx.xxx ipsinin dns kaydını sorgulayacaktır.
Bu açıdan my.cnf dosyanıza skip-name-resolve parametresi girip bu sorunu çözebilirsiniz.
skip-name-resolve
Tercihim skip-name-resolve kullanmaktan yana. Böylece MySQL dns sorgulaması ile uğraşmamış olur.
Posted in Linux, MySQL on November 17th, 2012 by Kürşad DARA | | 0 Comments
InnoDB en ideal log file size belirleme.
InnoDB kullandığınız yerlerde en ideal log file size ayarlamak için aşağıdaki gibi bir test yapabilirsiniz.
Bu işlem mySQL’de InnoDB veritabanlarının 1 dakikada aşağı yukarı ne kadar log yazdığını görüyoruz.
Bu işlemi veritabanının en yoğun zamanlarında yapmanız önerilir.
Öncelikle istediğimiz veriyi alabilmemiz için pager komutu ile sequenceleri yakalıyoruz.
mysql> pager grep sequence PAGER set to 'grep sequence'
Sonra aşağıdaki gibi show innodb status çıktısını 1 dakika aralıklarla çalıştırıp başlangıç ve bitişte ne kadar log yazmış onu buluyoruz.
mysql> show engine innodb status\G select sleep(60); show engine innodb status\G Log sequence number 156081984562 1 row in set (0.00 sec) 1 row in set (59.99 sec) Log sequence number 156092992419 1 row in set (0.00 sec)
Daha sonra pager i tekrar sıfırlıyoruz.
mysql> pager Default pager wasn't set, using stdout.
Şimdi aradaki farklı Mb cinsinden buluyoruz.
mysql> select ( 156092992419 - 156081984562 ) / 1024 / 1024 as mb; +-------------+ | mb | +-------------+ | 10.49791050 | +-------------+ 1 row in set (0.00 sec)
Buradan anladığımız dakikada 10 mb veri yazılmış.
Saatlik bazda bakarsak 60*10=600MB.
innodb_log_file_size parametresini 600-700 Mb arası yapabiliriz.
Yukarıda yaptığımız testi mySQL 5.0 dan sonra SHOW GLOBAL STATUS komutu ile görebiliriz.
Bu komut çıktısındaki Innodb_os_log_written parametresinden de elde edebiliriz.
mysql> SHOW GLOBAL STATUS like '%Innodb_os_log_written%'; +-----------------------+-----------+ | Variable_name | Value | +-----------------------+-----------+ | Innodb_os_log_written | 632924672 | +-----------------------+-----------+ 1 row in set (0.00 sec)
Posted in Linux, MySQL on November 16th, 2012 by Kürşad DARA | | 0 Comments
myisam ve innodb veritabanları için key_buffer_size ve innodb_buffer_pool_size hesaplayan query
İşinize yarayabilir.
Myisam için;
SELECT CONCAT(ROUND(KBS/POWER(1024, IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), SUBSTR(' KMG',IF(PowerOf1024<0,0, IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_key_buffer_size FROM (SELECT LEAST(POWER(2,32),KBS1) KBS FROM (SELECT SUM(index_length) KBS1 FROM information_schema.tables WHERE engine='MyISAM' AND table_schema NOT IN ('information_schema','mysql')) AA ) A, (SELECT 2 PowerOf1024) B;
mysql> SELECT CONCAT(ROUND(KBS/POWER(1024, -> IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.4999), -> SUBSTR(' KMG',IF(PowerOf1024<0,0, -> IF(PowerOf1024>3,0,PowerOf1024))+1,1))inn -> recommended_key_buffer_size FROM -> (SELECT LEAST(POWER(2,32),KBS1) KBS -> FROM (SELECT SUM(index_length) KBS1 -> FROM information_schema.tables -> WHERE engine='MyISAM' AND -> table_schema NOT IN ('information_schema','mysql')) AA ) A, -> (SELECT 2 PowerOf1024) B; +-----------------------------+ | recommended_key_buffer_size | +-----------------------------+ | 2095M | +-----------------------------+ 1 row in set (43.45 sec)
InnoDB için;
SELECT CONCAT(ROUND(KBS/POWER(1024, IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), SUBSTR(' KMG',IF(PowerOf1024<0,0, IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables WHERE engine='InnoDB') A, (SELECT 2 PowerOf1024) B;
mysql> SELECT CONCAT(ROUND(KBS/POWER(1024, -> IF(PowerOf1024<0,0,IF(PowerOf1024>3,0,PowerOf1024)))+0.49999), -> SUBSTR(' KMG',IF(PowerOf1024<0,0, -> IF(PowerOf1024>3,0,PowerOf1024))+1,1)) recommended_innodb_buffer_pool_size -> FROM (SELECT SUM(data_length+index_length) KBS FROM information_schema.tables -> WHERE engine='InnoDB') A, -> (SELECT 2 PowerOf1024) B; +-------------------------------------+ | recommended_innodb_buffer_pool_size | +-------------------------------------+ | 93089M | +-------------------------------------+ 1 row in set (35.77 sec)
Kaynak : http://dba.stackexchange.com/questions/1/what-are-the-main-differences-between-innodb-and-myisam/2194#2194
Posted in Linux, MySQL on November 16th, 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
ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log hatası
MySQL’de replikasyon yaptığım slave sunucuda bazı işlemler yapmam gerekti. Sonrasında;
mysql> CHANGE MASTER TO MASTER_HOST='xx.xx.xx.xx', MASTER_USER='slave_user' ,MASTER_PASSWORD='xxx' ,MASTER_LOG_FILE='mysql-bin.001788' ,MASTER_LOG_POS=549864673; ERROR 1201 (HY000): Could not initialize master info structure; more error messages can be found in the MySQL error log
hatasını aldım.
Tabii ki yapmak gereken çok basit
mysql> flush slave; Query OK, 0 rows affected (0.00 sec)
sonrasında problemsiz devam edebilirsiniz.
Posted in Linux, MySQL on June 22nd, 2012 by Kürşad DARA | | 0 Comments
ERROR 1598 (HY000) at line 16: Binary logging not possible. Message: Transaction level ‘READ-UNCOMMITTED’ in InnoDB is not safe for binlog mode ‘STATEMENT’ hatası
Replikasyon kullandığınız bir mySQL veritabanında aşağıdaki hatayı alıyorsanız :
ERROR 1598 (HY000) at line 16: Binary logging not possible. Message: Transaction level 'READ-UNCOMMITTED' in InnoDB is not safe for binlog mode 'STATEMENT'
mysql> show variables like "binlog_format%"; +---------------+-----------+ | Variable_name | Value | +---------------+-----------+ | binlog_format | STATEMENT | +---------------+-----------+ 1 row in set (0.00 sec) mysql> SET GLOBAL binlog_format="MIXED"; Query OK, 0 rows affected (0.00 sec)
kalıcı olarak bu ayarın durması içinde my.cnf dosyasına
binlog_format = "MIXED"
ekleyin ki sonrasında mySQL i restart ettiğinizde tekrar bu ayarlarla ugraşmayın.
Detaylı bilgi için : http://dev.mysql.com/doc/refman/5.1/en/binary-log-setting.html
Posted in Genel, Linux, MySQL on April 13th, 2012 by Kürşad DARA | | 0 Comments
Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’ hatası
mysql slave sunucu da show slave status dediğinizde aşağıdaki hatayı alıyorsanız :
Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: ‘Could not find first log file name in binary log index file’
Öncelikle slave sunucu da
stop slave;
sonrasında master sunucu da
mysql> flush logs; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000005 | 106 | | | +------------------+----------+--------------+------------------+
Buradan log file ismini ve position alıp daha sonra
slave sunucu da
mysql> CHANGE MASTER TO MASTER_LOG_FILE=’mysql-bin.000005′, MASTER_LOG_POS=106; mysql> start slave;
bu kadar.
Posted in Linux, MySQL on April 13th, 2012 by Kürşad DARA | | 0 Comments
Insert sorgularında duplicate hatasının ignore edilmesi.
mysql> insert ignore into veritabani1.table1 select * from veritabani2.table2 where x=226; Query OK, 87571 rows affected (4 min 58.31 sec) Records: 111439 Duplicates: 23868 Warnings: 0
Posted in Linux, MySQL on March 21st, 2012 by Kürşad DARA | | 0 Comments
mySQL veritabanında veritabanı ve tabloların ne kadar yer kapladığını görmek.
Veritabanlarının diskte kapladığı boyutu görmek için :
mysql> SELECT table_schema 'Veritabanı Adı', sum( data_length + index_length ) / 1024 / 1024 'Veritabanı Boyutu (MB)', sum( data_free )/ 1024 / 1024 'Boş Alan (MB)' FROM information_schema.TABLES GROUP BY table_schema; +--------------------------+------------------------+------------------+ | Veritabanı Adı | Veritabanı Boyutu (MB) | Boş Alan (MB) | +--------------------------+------------------------+------------------+ | info | 0.25235367 | 24540.01247025 | | information_schema | 0.00878906 | 0.00000000 | | kursad_test | 3379.31728363 | 0.00000000 | | mysql | 0.68885231 | 0.00037384 | | performance_schema | 0.00000000 | 0.00000000 | +--------------------------+------------------------+------------------+ 5 rows in set, 0 warnings (3.33 sec)
Tabloların diskte kapladığı boyutu görmek için :
mysql> SELECT concat(table_schema,'.',table_name), concat(round(table_rows/1000000,2),'M') rows, concat(round(data_length/(1024*1024*1024),2),'G') DATA, concat(round(index_length/(1024*1024*1024),2),'G') idx, concat(round((data_length+index_length)/(1024*1024*1024),2),'G') total_size, round(index_length/data_length,2) idxfrac FROM information_schema.TABLES ORDER BY data_length+index_length DESC LIMIT 20; +-------------------------------------+-------+-------+-------+------------+---------+ | concat(table_schema,'.',table_name) | rows | DATA | idx | total_size | idxfrac | +-------------------------------------+-------+-------+-------+------------+---------+ | mysql.help_topic | 0.00M | 0.00G | 0.00G | 0.00G | 0.05 | | mysql.help_keyword | 0.00M | 0.00G | 0.00G | 0.00G | 0.18 | | mysql.db | 0.00M | 0.00G | 0.00G | 0.00G | 0.26 | | mysql.help_relation | 0.00M | 0.00G | 0.00G | 0.00G | 1.95 | | mysql.help_category | 0.00M | 0.00G | 0.00G | 0.00G | 0.14 | | mysql.tables_priv | 0.00M | 0.00G | 0.00G | 0.00G | 4.81 | | mysql.proxies_priv | 0.00M | 0.00G | 0.00G | 0.00G | 7.39 | | mysql.user | 0.00M | 0.00G | 0.00G | 0.00G | 0.75 | | mysql.proc | 0.00M | 0.00G | 0.00G | 0.00G | 13.13 | | mysql.columns_priv | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.procs_priv | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.event | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.host | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.func | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.time_zone_transition_type | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.time_zone_transition | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.time_zone_name | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.time_zone_leap_second | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.time_zone | 0.00M | 0.00G | 0.00G | 0.00G | NULL | | mysql.plugin | 0.00M | 0.00G | 0.00G | 0.00G | NULL | +-------------------------------------+-------+-------+-------+------------+---------+ 20 rows in set (0.00 sec)
Bu sorguları değiştirip veritabanı ve tablo bazlı sonuçlarda elde edebilirsiniz.
Posted in Genel, MySQL on March 19th, 2012 by Kürşad DARA | | 0 Comments
« Previous Page — Next Page »