Nedenini araştırdığımda şunu buldum :
https://bugs.launchpad.net/percona-server/+bug/1589334
mysqldump komutuna –no-tablespaces parametresini girdiğimizde ise her şey eskisi gibi güzel oldu.
]]>
Windows 10 üzerinde openvpn ile 1 den fazla ayrı vpn’e bağlanmamız gerekiyordu. Ancak ilk bağlandığına düzgünce bağlanırken, ikincisine bağlanırken bu hatayı almaya başladım. Yani diyor ki, “VPN’e bağlanacak yeterli sayıda TAP-windows ethernet adapter bulamadığından şikayetçiyim, 1 tane varmış onu da ilk connection için kullanmış belli ki, yeni eklemeniz gerekiyor.”
Genelde C:/Program Files/TAP-Windows/bin klasöründe olan “addtap” adlı dosyayı Administrator olarak çalıştırıp kendinize yeni bir TAP-windows ethernet adapter eklemeniz gerekiyor.
Umarım işe yarar 
Rsync’i backup almak için kullanmaktayız. Buradaki güzelliğimiz şöyle, sadece değişen dosyaları backup almak istiyoruz, ancak diğer dosyalarımız da link olarak backup aldığımız klasörün içerisinde hazır bulunsun istiyoruz. Böylelikle, backupı geri yüklemek, klasörü silip, backup olarak aldığımız klasörü kopyalamak kadar basit olabilsin.
Hard link temel olarak , dosyanın diskte bulunan kısmını işaret eden pointer ın adıdır. Yani normal 1 dosya oluşturup adına a.txt verdiğimizi hayal edelim. Burada, a.txt ye ait veriler diskte bir yerde bulunmakta, ve bu disk alanını işaret eden a.txt ismi ise bir hardlinktir. ve aynı disk bloğuna 1’den fazla hard-link verebiliriz. Yani hem a.txt hem b.txt dediğmiz şey aynı veriyi içerebilir. Bu durumda 2 pointer (2 hard-link) ama tek dosyamız olacaktır. hard-link in kısayoldan veya symbolic linkten tek farkı ise, bu şeyin bir link değil tamı tamamına gerçek bir dosya olarak davranmasıdır. a.txt ve b.txt aynı disk alanını gösteren 2 hardlink ise, burada a.txt yi silerseniz bile, işletim sistemi, bu veri alanına işaret eden başka bir hard link olduğu için veriye sizi b.txt üzerinden halen eriştirebilir halde tutacaktır. Yani a.txt yi sildiğinizde aynı veriye b.txt den halen erişebilir olmaktasınız.
Bu şekilde aldığınız backuplar cümbür cemaat tüm kasörü aynen backup almış gibi olmanızı sağlar, ancak disk alanı olarak bunu harcamanıza gerek olmaz. Sadece değişen dosyalarınız cp komutu ile kopyalanır, diğerleri ln komutu ile hardlink yapılır. bu harclink yapılanlar disk alanı harcamaz. Sadece df -i komutuyla gördüğünüz INode harcarlar. (yani disk pointer’ı harcarlar). Yani zararı yoktur (dosyayı kopyalasaydık hem INode hem disk alanı harcayacaktık), kârı çok büyüktür (özellikle büyük dosyalarda disk alanından çok kâr ederiz), ek olarak da bütün backup klasörümüz gerçekten o anki halinin copy paste’i gibi kullanılabilir haldedir. Yani base directorynizi 2-3 gün sonra bile silseniz, hiç canınız acımaz.
aşağıda /local-backup/ dizinimiz yedeklerimizin gün gün bulunduğu ana klasörümüz olacak. /var/www/ana_dizin/ de yedeği alınacak ve üzerinde zaman zaman birşeylerin değişeceği ana dizinimiz olacak. Bu dosyayı backuper.sh olarak alıp cronjobunuza ekleyebilirsiniz.
basedir=$(ls -t /local-backup/| head -1) /usr/bin/rsync -avtb --delete --link-dest=../$basedir /var/www/ana_dizin/ /local-backup/`date +%F`/
basedir ile başlayan satır, oluşan en güncel backup dizinini bulacak, bir alt satırdaki komut ile de rsync ile buraya hardlink verecek şekilde backupı alacaksınız.
Bu kodda bulunan `date +%F` kısmı sadece Y-m-d formatında tarihi verdiğinden bu backup scriptini günde 1 kere çalıştırmanız makul olacak, aksi halde üzerine yazacaktır. Ancak siz orada `date +%F` kısmını `date +%Y-%m-%d:%H:%M:%S` şeklinde saniyeye kadar değişken hale getirebilirsiniz.
Görüşmek üzere.
]]>
Önsöz : Genelde Virtualbox üzerinde kurduğumuz Ubuntu’lar ile ilgili dosya işlemlerini macosx’imde bulunan kod editörleri ile yapmak istiyordum. Bu sebeple kendime böyle bir ortam kurmam gerekti. Bu işlemi yaparken virtualboxımda 2 adet ethernet interface tanımlıyorum. İlk interface’i NAT olarak ayarlıyorum, 2. ethernet interface’ini ise, ipsi hiç değişmeyecek olan (ve değişmesine ihtiyaç da olmayan) host only adapter ile yapıyorum. Böylece İlgili NFS paylaşımını sadece host-only yapmış oluyorum ve networkte güvende oluyorum. ilgili virtualbox internete NAT üzerinden çıkıyor ve benim 2. interface’im sadece bana özel olmuş oluyor. Bu kısımda siz ihtiyacınıza göre bir ayar yapabilirsiniz.
Aslında olur. Ancak ben web uygulaması için performans kaybı veya yavaşlık yaşamak istemiyorum ve ortak klasörde bu sefer ubuntu tarafında yavaşlıklar yaşıyorum ve bunu gerçekten istemeyeceğim boyutta yaşamaktaydım.
Öncelikle Bu işlemleri yaptığım işletim sistemlerini belirteyim
Host : MacOsx 10.11.4 (El Capitan)
Client : Ubuntu 14.04.4 LTS
Aşağıdaki komut ile bu işlemi yapıyoruz.
apt-get install nfs-common
sudo nano /etc/exports
ile açtığımız dosyaya aşağıdaki (veya benzer) bir satır ekliyoruz. Benim örneğimde /usr/local/share/web/custom adlı dizini NFS üzerinden yayına açıyoruz.
/usr/local/share/web/custom -alldirs -mapall=emre:admin -network 192.168.56.0 -mask 255.255.255.0
Burada, -mappall parametresinde benim macosx üzerindeki user ve grubum yer almakta. -network ile belirttiğim parametrede host-only adaptörümüzün ilgili IP range’i yer almakta.
Son olarak, macosx te default olarak var olan Nfsd uygulamasını restart ediyoruz.
sudo nfsd disable sudo nfsd enable
1. maddede gerekli olan nfs-common paketini kurduktan sonra
İlgili klasörü ubuntuda nereye map etmek istiyorsak, buraya bir klasör oluşturuyoruz. Ben /home/web/custom adlı bir yere oluşturacağım.
mkdir -p /home/web/custom
sudo nano /etc/fstab
ile ilgili dosyayı açıyoruz ve içerisine yukarıdaki ayarlara istinaden şu satırı ekliyoruz.
192.168.56.1:/usr/local/share/web/custom /home/web/custom nfs defaults 0 0
ve daha sonra
mount -a
komutu ile mount işlemini tamamladım.
Şimdi macosx üzerinde bir dosya oluşturalım ve ubuntu üzerinde de görebildiğinizden emin olalım.
Ben bir web uygulaması çalıştıracağım için yetkilerle ilgili problem yaşamak istemediğimden dolayı, macostaki dosyalarımın hepsini, ubuntudaki www-data user’ına map etmek istiyordum. Bunu normalde parametrelerle yapabileceğimiz gibi, ben yaşadığım birkaç problemden sonra şöyle bir trick buldum.
Ubuntu üzerinde denemek için oluşturduğumuz ilgili dosyanın user ve grubuna bakalım. ls -l komutu ile baktığımızda ilglii user ve grup idlerini görebiliriz.
Ubuntu üzerinde önceden apt-get install nginx ile nginx kurunca kendiliğinden oluşan www-data user ve grubu olduğundan dolayı, /etc/passwd dosyasına gittim ve www-data ya ait id yi bu id ile değiştirdim. Aynı şeyi /etc/group dosyasında www-data user’ının grubunu da değiştirerek tamamladım.
Artık macosxte oluşturduğum yeni bir dosyanın, ubuntu tarafında www-data user ve grubuyla oluştuğunu görüyorum.
Böylece artık editör üzerinde taklalar atmaktan (remote sunucu ayarları vb..) kurtarıp, doğru düzgün bir ayar ile workbench imizi güzelce kurabiliyoruz. Veyahut da versiyon kontrol sistemleri üzerinden sürekli git push – pull lar beklemek zorunda kalmıyoruz. Güle güle kullanıyoruz.
]]>ss : socket statistics demektir. Yani socketler ile ilgili istatistiki bilgi verir. ss komutu ile network ile ilgili bilgilere ulaşabiliyoruz.
Kullanılabileceği Parametreler :
-V, --version output version information -n, --numeric don't resolve service names -- servis isimlerini çözmeden işlem yap -r, --resolve resolve host names -- host isimlerini çöz -a, --all display all sockets -- tüm socketleri göster -l, --listening display listening sockets -- takip edilen (listen) socketleri göster -o, --options show timer information -- zamanlayıcı bilgilerini göster -e, --extended show detailed socket information -- detaylı socket bilgilerini göster -m, --memory show socket memory usage -- memory (ram) kullanımını göster -p, --processes show process using socket -- socket kullanan işlemi (process) göster -i, --info show internal TCP information -- iç TCP bilgilendirmesini göster -s, --summary show socket usage summary -- socket kullanım özetini göster -b, --bpf show bpf filter socket information -- bpf filtreli socket bilgilendirmesi (bpf nedir? : https://www.kernel.org/doc/Documentation/networking/filter.txt ) -4, --ipv4 display only IP version 4 sockets -- sadece IPV4 socketleri göster -6, --ipv6 display only IP version 6 sockets -- sadece IPV6 socketleri göster -0, --packet display PACKET sockets -- sadece Packet socketleri göster -t, --tcp display only TCP sockets -- sadece TCP socketleri göster -u, --udp display only UDP sockets -- sadece UDP socketleri göster -d, --dccp display only DCCP sockets -- sadece DCCP socketleri göster -w, --raw display only RAW sockets -- sadece RAW socketleri göster -x, --unix display only Unix domain sockets -- sadece Unix socketleri göster -f, --family=FAMILY display sockets of type FAMILY -- değer olarak vereceğiniz veri tipindeki socketleri göster. (Örn : -f "test" ile test tipindeki socketi gösterir)]]>
Kendimize ait domainlerimiz üzerinden ücretsiz olarak mail hesabına sahip olmamız mümkün. Normalde Google’de ücretli olan bu hizmet şimdilik Yandex üzerinde ücretsiz. https://kurum.yandex.com.tr/domains_add/ adresinden domaininizi ekleyip 1000 Tane mail hesabına kadar domaininize sorgusuz sualsiz mail hesabı açabilirsiniz.
İlk önce domaninizi tanımlamalısınız, daha sonra ise, domaininize birkaç DNS kaydı eklemeniz gerekiyor. (MX kaydınızı yandexe yönlendireceksiniz, ve domainin sizin olduğunu ispatlayacaksınız. 1 dosya upload etmenizi felan istiyor)
bunları yaparken alan adını yandex’e devretmek zorunda değilsiniz. (bu , tüm domaini bütünüyle buraya yönlendirip, DNS management ihtiyaçlarını da buradan kullanmanızı gerektirir. Aynı zamanda ücretsiz bir managed DNS olarak da burayı kullanabilirsiniz yani isterseniz.)
Bundan sonra google for work ile yapabildiğimiz
Biz de kendi domainimize ait maillerimizi yandex üzerinden kullanmaya başladık. Size de tavsiye ederiz.
Şurada bir kardeşimiz (o da yazılımcı) daha güzelce bir yazı yazmış, bu mevzu ilginizi çektiyse oradan devam : http://ahmetcigsar.com/nasil-yapilir/yandex-kurumsal-mail-kurulumu/
]]>PHP 5.5 üzerinde hazır halde gelen opcache temel olarak, filesystem üzerinde bulunan php dosyalarını her requestte okumamak için tasarlanmış bir otomatik low level cache mekanizmasıdır. Php nin 5.5 sürümünü kullanıyorsanız, ve özellikle kapatmadıysanız, muhtemelen siz de bu özelliği kullanabilirsiniz / veya zaten bilmeden kullanıyorsunuzdur.
PHP interpreted bir dil olduğu için, (yazılan kodlar, çalışma anında makine diline çevrildiğinden) ilgili dosyalar normalde her çalıştırdığınızda veya sitenize her request geldiğinizde tekrar tekrar bu dosyaları load eder. Düşünün bir siteniz var ve anasayfasını ekrana basmak için 10 adet php dosyasına ihtiyacınız var. Sitenize de aynı anda(örneğin 1 saniye içinde) 100 kişi giriyor. Opcache olmadığında, bu 10 dosyayı her 100 giriş için toplamda diskten 1000 kere okuma işlemi yapması gerekiyor. Halbuki opcache üzerinde bir ayar ile bir dosyayı okuduğunda 10 saniye boyunca cachelemesini belirtebilirsinz. Bu demektir ki, 100 kişi x 10 saniye x 10 dosya = sisteminizin 10.000 kere okuma yapması gereken halde, sadece 10 kere diskten okuma işlemi yapacaksınız. Tabi, yapacağınız bir dosya değişikliğinin sitenize yansıması için bu sefer 10 saniye beklemek zorunda kalacağınızı da hatırlatmak isteriz.
Default değerleri görebileceğiniz tüm opcacahe konfigürasyon listesi için buyrunuz : http://php.net/manual/en/opcache.configuration.php
Opcache ile tam olarak ne kazandık?
Tam olarak io kazandık, (diskten okuma yapma işlemlerimizi, sitemizin yoğunluğuna göre %100 e yaklaşan bir değere kadar azaltabiliriz.)
Dezavantajları neler?
Developer ortamında, insan bir şeyi denerken hemen dosyayı kaydedip yaptığı değişikliği anında görmek isteyebilir. Hatta refleks olarak böyle davranır yazılımcılar. Bu durumda, local ortam için bir miktar handikap oluşturabilir, veya en güzeli, local ortam için opcache i disable etmek olabilir. (php.ini içinde opcache.enable=0 yazacaksınız) Aksi halde zırt pırt fpm restart etmek zorunda kalabilirsiniz.
Başka başka?
Opcache; büyük bir projede, aynı dosyalar ile çok fazla takıldıktan sonra, yazılımınızın yeni bir versiyonuna ait benzer sayıda çok dosya daha geldiğinde, ve artık bu dosyaları kullanmaya başladığında, sanırım eski dosyaları halen aklında tutmaya çalışmasından dolayı, yeni dosyalarınızı okurken io’su sanki opcache açık değilmişçesine artmaya ve overflow olmaya başlıyor. (bu da load vb konularında probleme sebebiyet verebiliyor. ). Çalışmamazlık durumu oluşmuyor ancak code ve dosya sayısı büyüklüğünüze göre sizi olumsuz etkiliyor. Bu noktada codebase üzerinde çok fazla değişme/yeni release yayına alma gibi aksiyonlarda php-fpm inizi restart etmenizde yarar var. (reload kurtarmıyor malesef)
]]>Bunu http://www.php.net/manual/en/function.spl-autoload-register.php#95456 linkindeki yazıdan da görebilirsiniz.
Bir örnek de vermeye çalışacağım ilerleyen zamanlarda.
]]>Mandrill, cloud tabanlı bir email gönderim hizmetidir. API’lerini kullanarak milisaniyeler seviyesinde mail gönderebilirsiniz.
Nasıl kullanılır?
https://mandrillapp.com/api/docs/ bağlantısına gidip, Restful apilerini kullanmaya başlayabilirsiniz.
Niye Böyle bir mail hizmeti kullanayım?
Eğer, mail gönderimi ve mail hizmetleri , yapacağınız işin asıl konusu değilse ve/veya Mail gönderimi konularında kendi mail hizmetinizin imkanları dahilinde bir çok iş sizin üzerinize kalıyorsa, burada mandrill gibi bir mail gönderim hizmetini tercih edebilirsiniz.
Mandrill’in Avantajları neler?
Mandrill üzerinde Hesap oluşturduktan sonra, email bazlı multi tanent yapılar için (örneğin bir web sitesi yapan ajans iseniz, her müşterinizin sitesi için aynı email hizmetini veriyorsanız) her müşterinize ayrı hesaplar açmak yerine , kendinize ait bir hesap üzerinden onlara ait alt hesaplar oluşturup, ayrıca yönetebilmektesiniz. Spam, Hard-bounce, soft-bounce, vb.. gibi mail gönderilememesi durumlarını kapsayabilecek çözümler geliştirebilirsiniz. Bunları otomatize edip, mail başarımınızı yükseklere çıkarabilirsiniz.
Mail içeriklerinde Mandrill’in kendi geliştirdiği bir template dilini, veya da dünya çapında kullanılan handlebars’ı tercih edebilirsiniz. Böylece mail içeriklerini de alıcıya özel olarak dinamik hale getirme imkanınız bulunuyor.
Mandrill’de de olan klasik özellikler?
Raporlama, mail kaç kere açıldı/okundu, vırt zırt. Klasik raporlamalar, falan filan..
Dezavantajları Neler?
Çok dezavantaj mı bilemem, ancak arayüz vb konusu yerine, API konusuna ağırlık verildiğini görüyoruz. Ayrıca zaten mandrill’in daha fonksiyonel ve arayüzle donatılmış hali de yine aynı firmaya ait olan MailChimp.
Spamı çok kaçırırsanız, bir de reputasyonunuz düşüp saatlik mail gönderim limitiniz inanılmaz düşük seviyelere (10-20 gibi) gelebiliyor. Bunun da çeşitli uyarıları geliyor, ancak burada önemli olan sizin bu spam vb senaryolarınızda kurgunuzu belirlemiş olmanız gerekiyor.
Mandrill Kupon Kodu : (6 ay için +50000 aylık mail gönderimi)
kayıt olduğunuzda aylık 12000 mail gönderim hakkı tanıyan mandrill, kayıt olurken girebileceğiniz aşağıdaki kupon kodu ile ilk 6 ay için +50000 gönderim hakkı daha veriyor.
Mandrill Kupon Kodu : PRAGMATIC
Güle güle kullanın.
]]>
İzlenmesi gereken adımlar :
Mysql’i durdurun.
/etc/init.d/mysqld stop
Şimdi, skip-grant özelliği ile tekrar başlatıyoruz:
mysqld_safe --skip-grant-tables
Şimdi Mysql’e passwordsüz bağlanacağız. (ayrı bir konsolda)
mysql -u root
Aşağıdaki komutları sırası ile verelim ve yeni şifremizi belirleyelim.
mysql> use mysql;
mysql> update user set password=PASSWORD("yeni_sifremiz") where User='root';
mysql> flush privileges;
mysql> quit;
Mysql’i yeniden durduralım
/etc/init.d/mysqld stop
Şimdi de normal bir şekilde başlatalım
/etc/init.d/mysqld start
İşlem tamamdır 