Tuning Primer Kurulumu ve Kullanımı

Tuning Primer Kurulumu ve Kullanımı

Tuning Primer bir Mysql Tuner Alternatifi , aşağıdaki komutları sırası ile dosyasını indirip çalıştırabilirsiniz. Mysql Tuner kadar olmasada yeterli bilgiler mevcut ve kullanmaya değer.

[root@ayhanarda ~]# cd /usr/local/bin

[root@ayhanarda bin]# wget https://launchpadlibrarian.net/78745738/tuning-primer.sh

Şimdi sıra çalıştırmaya geldi.

[root@ayhanarda bin]# tuning-primer.sh

Çalıştırıldığında mysql in conf u ile elde ettiği değerleri en iyi optimizasyon için karşılaştırarak size öneriler sunuyor.

Mysql in versiyonundan ne kadar süredir servis verdiğine , açık olduğu son süre içinde kaç query ye cevap verdiğine, anlık bağlantı sayısına , slow query olup olmadığına , cache size ınızın yeterli olup olmadığına , max connections değerinizin anlık değerinizi karşılayıp karşılamadığına , memory kullanımınıza , join lerinize , temp alanınıza , tablo lock sayınıza kadar ölçüp biçip size öneriler sunuyor. Örneğin ben çaqlıştırdımda çıktısı aşağıdaki gibi oldu.

Ancak öncesinde 48 saat kadar mysql servisinizin açık olması daha doğru sonuçlar almanızı sağlayacaktır.

MySQL Version 10.0.34-MariaDB x86_64

Uptime = 1 days 18 hrs 21 min 54 sec
Avg. qps = 1402
Total Questions = 213875408
Threads Connected = 34

SLOW QUERIES
The slow query log is NOT enabled.
Current long_query_time = 10.000000 sec.
You have 8 out of 213875496 that take longer than 10.000000 sec. to complete
Your long_query_time seems to be fine

WORKER THREADS
Current thread_cache_size = 200
Current threads_cached = 103
Current threads_per_sec = 0
Historic threads_per_sec = 0
Your thread_cache_size is fine

MAX CONNECTIONS
Current max_connections = 200
Current threads_connected = 35
Historic max_used_connections = 137
The number of used connections is 68% of the configured maximum.
Your max_connections variable seems to be fine.

No InnoDB Support Enabled!

MEMORY USAGE
Max Memory Ever Allocated : 13.54 G
Configured Max Per-thread Buffers : 8.38 G
Configured Max Global Buffers : 7.79 G
Configured Max Memory Limit : 16.18 G
Physical Memory : 23.36 G
Max memory limit seem to be within acceptable norms

KEY BUFFER
Current MyISAM index space = 1.53 G
Current key_buffer_size = 1.00 G
Key cache miss rate is 1 : 99348
Key buffer free ratio = 54 %
Your key_buffer_size seems to be too high.
Perhaps you can use these resources elsewhere

QUERY CACHE
Query cache is enabled
Current query_cache_size = 800 M
Current query_cache_used = 800 M
Current query_cache_limit = 100 M
Current Query cache Memory fill ratio = 100.00 %
Current query_cache_min_res_unit = 4 K
MySQL won’t cache query results that are larger than query_cache_limit in size

SORT OPERATIONS
Current sort_buffer_size = 1 M
Current read_rnd_buffer_size = 768 K
Sort buffer seems to be fine

JOINS
/usr/local/bin/tuning-primer.sh: line 402: export: `2097152′: not a valid identifier
Current join_buffer_size = 40.00 M
You have had 576657 queries where a join could not use an index properly
You have had 1303 joins without keys that check for key usage after each row
join_buffer_size >= 4 M
This is not advised
You should enable “log-queries-not-using-indexes”
Then look for non indexed joins in the slow query log.

OPEN FILES LIMIT
Current open_files_limit = 138451 files
The open_files_limit should typically be set to at least 2x-3x
that of table_cache if you have heavy MyISAM usage.
Your open_files_limit value seems to be fine

TABLE CACHE
Current table_open_cache = 69120 tables
Current table_definition_cache = 65960 tables
You have a total of 59378 tables
You have 65487 open tables.
The table_cache value seems to be fine

TEMP TABLES
Current max_heap_table_size = 256 M
Current tmp_table_size = 1.46 G
Of 17855233 temp tables, 32% were created on disk
Effective in-memory tmp_table_size is limited to max_heap_table_size.
Perhaps you should increase your tmp_table_size and/or max_heap_table_size
to reduce the number of disk-based temporary tables
Note! BLOB and TEXT columns are not allow in memory tables.
If you are using these columns raising these values might not impact your
ratio of on disk temp tables.

TABLE SCANS
Current read_buffer_size = 1 M
Current table scan ratio = 309 : 1
read_buffer_size seems to be fine

TABLE LOCKING
Current Lock Wait ratio = 1 : 1582
You may benefit from selective use of InnoDB.
If you have long running SELECT’s against MyISAM tables and perform
frequent updates consider setting ‘low_priority_updates=1’

Ayhan ARDA

innodb_log_file_size değişikliği

InnoDb Log File Size Değiştirme

Bu işlem , Innodb de kritik olabilecek bir işlem , dolayısı ile once shutdown mode unun 1 olup olmadığına bakıyoruz , mysql e login olup sorgumuzu çalıştıralım.

mysql> show variables like ‘innodb_fast_shutdown%’;

+———————-+——-+
| Variable_name | Value |
+———————-+——-+
| innodb_fast_shutdown | 2 |
+———————-+——-+
1 row in set (0.00 sec)

Görüldüğü üzere değerimiz 2 , bunu sağlıklı işlem yapabilmek için 1 yapalım.

mysql> SET GLOBAL innodb_fast_shutdown=1;

Tekrar bir önceki komuut çalıştırırsak değerin 1 e döndüğünü görebiliriz.

Şimdi mysql i stop edelim.

[root@ayhanarda root]# service mysql stop

şimdi log dosyalarımızı silmeyelimde farklı bir yere atalım , ne olur ne olmaz.

[root@ayhanarda root]# cd /var/lib/mysql/
[root@ayhanarda mysql]# mv ib_logfile* /tmp/

şimdi my.cnf de ilgili değeri değiştirelim.

[root@ayhanarda mysql]# nano /etc/my.cnf

innodb_log_file_size = 750M
(bunu kendi yapınıza göre ayarlayın , ben 24 gb ram li üzerinde 2000 mysql veritabanı koşan sunucuda çalıştırıyorum , yapacağınız değeri bulmak için mysqltuner kullanmanız faydalı olabilir)

Şimdi mysql i start edelim.

[root@ayhanarda root]# service mysql start

şimdi mysql dizininde iken ls -al | grep ib_* derseniz 2 adet log dosyasının belirlediğiniz değere ayarlandığını görebilirsiniz ya da yine mysql sorgusu ile tüm innodb_log değerlerini görebilirsiniz.

[root@ayhanarda mysql]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 15108
Server version: 10.0.34-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input statement.

MariaDB [(none)]> show variables like ‘innodb_log%’;
+——————————-+———–+
| Variable_name | Value |
+——————————-+———–+
| innodb_log_arch_dir | ./ |
| innodb_log_arch_expire_sec | 0 |
| innodb_log_archive | OFF |
| innodb_log_block_size | 512 |
| innodb_log_buffer_size | 8388608 |
| innodb_log_checksum_algorithm | innodb |
| innodb_log_compressed_pages | ON |
| innodb_log_file_size | 786432000 |
| innodb_log_files_in_group | 2 |
| innodb_log_group_home_dir | ./ |
+——————————-+———–+
10 rows in set (0.00 sec)

Ayhan ARDA

WHM/cPanel Tabanlı Sunucularda Tüm Kullanıcıların Cron larını Listeleme

WHM/cPanel Tabanlı Sunucularda Tüm Kullanıcıların Cron larını Listeleme

Binlerce kullanıcılı bir Cpanel kurulu sunucu yönettiğimizi düşünelim , bazen sunucularda öngörmediğimiz durumlar periyodik olarak gerçekleşebilir ve bu da akla bir cron tanımı olabileceği şüphesi uyandırır , böyle durumlarda belli komutlar ile elde ettiğiniz veriler sonucu bazı kullanıcılar üzerinde yoğunlaşırsınız ve bu durumda yapılan işlemlerden biri de o kullanıcın zamanlanmış görevlerini incelemektir , bu hengamenin içinde nasıl tüm kullanıcıların cron tanımlarını tek seferde görebiliriz diye düşünürken aşağıdaki komutla bunu yapabileceğimizi düşündüm , umarım faydalı olur.

for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l; done

Ayhan ARDA

The system received an error from the “MySQL” database “mysql”: ER_PASSWORD_NO_MATCH (Can’t find any matching row in the user table) hatası ve çözümü

Genellikle cpanel de mysql veritabanı ve kullanıcısı oluşturmaya çalışırken aşağıdaki hatayı alabilirsiniz.

The system received an error from the “MySQL” database “mysql”: ER_PASSWORD_NO_MATCH (Can’t find any matching row in the user table)

Bu durumda yapmanız gereken şey my.cnf dosyanızda skip-name-resolve satırını kapatmanız.

nano /etc/my.cnf

skip-name-resolve

#skip-name-resolve

service mysql restart

Tekrar mysql oluşturduğunuzda bu hatayı almayacaksınız.

Ayhan ARDA

cutycapt: cannot connect to X server hatası ve çözümü

cutycapt: cannot connect to X server hatası ve çözümü

Bir url listesinin screenshot larını almam gerekti ve bunun için çözüm ararken cutycapt denemeye karar vermiştim ancak bir bsit bir linux vps te x screen olmadığı için ssh tan komutu çalıştırdığımda “cutycapt: cannot connect to X server” hatası aldım. Tabi cahillik olsa gerek hızlıc bir çok deneysel çözüm denedim ancak hatadan kurtulmanın en kolay çözümü benim için xvfb kurmaktan geçti.

root@ayhanarda:/home/arda# cutycapt –url=http://www.ayhanarda.com/ –out=ayhanarda.png
cutycapt: cannot connect to X server

root@ayhanarda:/home/arda# apt-get install xvfb

Yukarıdaki komut ubuntu debian türevleri için , eğer centos redhat kullanıyor iseniz yum install xvfb kullanabilirsiniz. Tabi artık cutycat ı kullanma komutumuz da değişiyor , şimdi artık aşağıdaki komut örneğini kullanabilirsiniz.

root@ayhanarda:/home/arda# xvfb-run –server-args=”-screen 0, 1280x1200x24″ cutycapt –url=http://www.hostrazzi.com –out=hostrazzi.png

bash: column: command not found hatası ve çözümü

Bazen linux te birden fazla dosyayı birleştirip tek dosyada göstermek isteriz ve bunu genelde paste komutu ile yaparız ancak bu komut sütün ayrımı yapmaksızın işlem yapıyor , yani bir dosyadaki satır sayısı az ise sonraki dosyadaki satır sayısı fazla ise onları anlamsız şekilde birleştiriyor , bu durumda column ile ilgili bir komut kullanmamız gerekmekte ancak bu default kurulu gelmiyor ve dolayısı ile komuta eklediğinizde bash: column: command not found hatası alabiliyorsunuz.

Kurulumu için aşağıdaki komutu kullanabilirsiniz.

apt-get install bsdmainutils

Sonrasında komutunuzu tekrar kullanabilirsiniz , hatta dosya merge etme ya da birleştirme ile ilgili örnek komutu aşağıda bulabilirsiniz.

paste dosya1.txt dosya2.txt dosya3.txt dosya4.txt dosya5.txt | column -s $’\t’ -t > nutanix-ayhan.arda.txt

Ayhan ARDA

nutanix

Curl ile Nutanix Vm Listesi Çekme

Nutanix vm lerini Prism Central ile görebilmekteyiz lakin birden fazla nutanix iniz var ise her seferinde bu vm hangi nutanix te diye aramaktan ise tek bir komut ile çekebilirsiniz. Bunun birden fazla yolu var , cmdlet ile çekebilirsiniz , ncli ile çekebilirsiniz , ben bu yazıda curl ile nasıl çekilir onun bilgisini aktaracağım çünkü gün içinde çoğunlukla linux lerde bash arayüzündeyim. Merak konusu olur ise diğer yöntemleri yazabilirim.

Komutumuz aşağıdaki gibi olmalı , curl kurulu olmalı vs hiç demiyorum , kurulu olduğunu varsayıyorum , ama jq kurulumu yapar iseniz komut sağlıklı çalışacaktır. Jq nun amacı json dosyasını gerçek bir json gibi çekebilmek ya da görüntüleyebilmek içindir, böylece grep ile filtreleme yapar iken gerçekten satır aralamış olursunuz. Jq kurmak için muhtemelen ubuntu kullanıyor iseniz apt-get install jq komutu yeterli olacaktır.

root@ayhanarda.com:/home# curl –user admin:SIFREM –insecure -H “Content-Type: application/json” -H “Accept: application/json” https://NUTANIX_IP:9440/PrismGateway/services/rest/v2.0/vms/ > hamveri-ayhanarda.txt && jq ‘.’ hamveri-ayhanarda.txt | grep name
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 33516 0 33516 0 0 9842 0 –:–:– 0:00:03 –:–:– 9843
“name”: “hostrazzi.com-server1”,
“name”: “hostrazzi.com-server2”,
“name”: “hostrazzi.comelkserver”,
“name”: “hostrazzi.com-snmp”,
“name”: “fbi-tor-server”,
“name”: “nsa-hello-server”,
“name”: “emc2-gpu-server”,
“name”: “hostrazzi-sniff-server”,
“name”: “ayhanarda.com-server”,

Ayhan ARDA

proxy_fcgi error Connection reset by peer: Error dispatching request to hatası ve çözümü

Web sitenizde Service Unavailable hatası alıp loglarda aşağıdaki durumu görüyor iseniz,

[Thu Sep 07 15:00:55.194125 2016] [proxy_fcgi:error] [pid 3073:tid 139922543388416] (104)Connection reset by peer: [client x.x.x.x:47400] AH01075: Error dispatching request to :, referer: http://xxx.xxx/odeme/
[Thu Sep 07 15:01:04.991963 2016] [proxy_fcgi:error] [pid 3158:tid 139922526603008] (104)Connection reset by peer: [client x.x.x.x:47436] AH01075: Error dispatching request to :, referer: http://xxx.xxx/odeme/
[Thu Sep 07 15:05:34.736200 2016] [proxy_fcgi:error] [pid 3072:tid 139922694457088] (104)Connection reset by peer: [client x.x.x.x:48660] AH01075: Error dispatching request to :, referer: http://xxx.xxx/odeme/

Audit loglarınızda da loglar aşağıdaki gibi ise,

type=ANOM_ABEND msg=audit(1504783865.871:28198): auid=4294967295 uid=10160 gid=1004 ses=4294967295 pid=65221 comm=”php-fpm” reason=”memory violation” sig=11
type=ANOM_ABEND msg=audit(1504784074.897:28941): auid=4294967295 uid=10266 gid=1004 ses=4294967295 pid=66368 comm=”php-fpm” reason=”memory violation” sig=11
type=ANOM_ABEND msg=audit(1504784147.758:29233): auid=4294967295 uid=10266 gid=1004 ses=4294967295 pid=66823 comm=”php-fpm” reason=”memory violation” sig=11

bir ImageMagick bug ı ile karşı karşıyasınız demektir.

Sunucuzda aşağıdaki komutu çalıştırarak sorunu giderebilirsiniz.

rpm -e ImageMagick

Eğer bu yöntem işe yaramaz ise ,örneği Plesk kullandığınızı düşünelim , Ayarlar ve Php ayarları bölümünden Imagick in tikini kaldırıp tekrar deneyebilirsiniz. Sorun giderilmiş olacaktır. Multiphp kullanabiliyor iseniz php versiyon değiştirmeyi de deneyebilirsiniz.

Ayhan ARDA

Vesta panel kurulu sunucunun dns çözümleyememesi sorunu ve çözümü

Sunucunuz herhangi bir ip yi pingleyebiliyor ama isim çözemiyor durumda ise , /etc/resolv.conf dosyanızda ki dns serverlar erişilebilir durumda ise , iptables kullanıyor iseniz muhtemelen resolv.conf dosyanızda yazan ip lere doğru 53 portunun gidişine izin vermeniz gerekecektir.

Vesta iptables kural dizisini aşağıdaki şekilde görebilirsiniz.

nano $VESTA/data/firewall/rules.conf

Kural değiştirdikten sonra update etmek için aşağıdaki komutu kullanabilirsiniz.

vupdatefirewall

Örneğin resolv.conf dosyanızda google ın 8.8.8.8 ve 8.8.4.4 dns leri var , bu durumda aşağıdaki komutlar çalıştırabilirsiniz.

/sbin/iptables A OUTPUT p udp d 8.8.8.8 dport 53 m state state NEW,ESTABLISHED j ACCEPT

/sbin/iptables A INPUT  p udp s 8.8.8.8 sport 53 m state state ESTABLISHED     j ACCEPT

/sbin/iptables A OUTPUT p tcp d 8.8.4.4 dport 53 m state state NEW,ESTABLISHED j ACCEPT

/sbin/iptables A INPUT  p tcp s 8.8.4.4 sport 53 m state state ESTABLISHED     j ACCEPT

Bunu her seferinde tek tek yapmamak için küçük bir bash script kullanabilirsiniz. Örneği aşağıdaki gibidir.

#!/bin/bash
Firewall="/sbin/iptables"
 
# Ayhan ARDA - http://www.ayhanarda.com
DNS_SUNUCU=$(cat /etc/resolv.conf  | grep -v '^#' | grep nameserver | awk '{print $2}')
 
for ip in $DNS_SUNUCU
do
        echo "(tcp, udp port 53) '$ip' adresleri için izinler veriliyor"
        $Firewall -A OUTPUT -p udp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $Firewall -A INPUT  -p udp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
        $Firewall -A OUTPUT -p tcp -d $ip --dport 53 -m state --state NEW,ESTABLISHED -j ACCEPT
        $Firewall -A INPUT  -p tcp -s $ip --sport 53 -m state --state ESTABLISHED     -j ACCEPT
done

Ayhan ARDA

scp: .ssh/authorized_keys: No such file or directory hatası ve çözümü

bash: /home/user/.ssh/authorized_keys: No such file or directory hatası ve çözümü
scp: .ssh/authorized_keys: No such file or directory

Muhtemelen bu hatayı şifresiz erişmek istediğiniz sunucuya scp ile key gönderirken alıyorsunuz ya da key i bir şekilde o sunucuya aktardınız ve authorized_keys dosyasına yazmak istediğinizde karşılaştınız.

Şifresiz erişmek istediğiniz sunucuya ssh ile erişin ve aşağıdaki komutları sıra ile çalıştırın , böylece gerekli izin hakları verilmiş şekilde authorized_keys dosyanız oluşturulacaktır.

root@ayhanarda:~# mkdir ~/.ssh
root@ayhanarda:~# chmod 700 ~/.ssh
root@ayhanarda:~# touch ~/.ssh/authorized_keys
root@ayhanarda:~# chmod 600 ~/.ssh/authorized_keys

Ayhan ARDA

A start job is running for raise network interfaces timeout süresi değiştirme

Ubuntu’da karşılaşılan bu durum ile ilgili timeout süresini değiştirmek ister iseniz aşağıdaki dosyayı açınız.

nano/lib/systemd/system/networking.service

Default değeri 5 dakika olarak gelir.

TimeoutStartSec=5min

Bu değeri örneğin 10 saniyeye çekelim. (Ki zaten cloud-init ten veri alabilir durumda ise hiç beklemeyecektir.

TimeoutStartSec=10sec

Ayhan ARDA