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 PageNext Page »