Centos Linux MYSQL ve Web Dosyaları Yedekleme

VPS ( Virtual Private Server | Özel Sanal Sunucu ) kullanıyorsanız üzerinde de Cpanel, WHM, Vesta, Plesk vb. bir yönetim paneli bulunmuyor ise yedekleme işlemleri biraz zor olabilir. Yedekleme yapabilmek için genellikle manuel işlemler mevcut. MYSQL kullandığımızı düşünürsek PHPMyAdmin üzerinden tüm veritabanını indirmek, PHP kullandığımızı da düşünürsek FTP vb. bir bağlantı ile bağlanıp dosyaları maneul olarak yedeklemek uzun bir senaryo.

Peki biz her gece uyurken yedekler otomatik olarak alınsa ? Daha rahat ve güzel olmaz mı ? 🙂 Okumaya devam et “Centos Linux MYSQL ve Web Dosyaları Yedekleme”

MYSQL Ufak İpuçları – vol.4

Dördüncü seri olarak birkaç ip ucu ile devam edelim.
Birinci seri için BURADAN ulaşabilirsiniz.
İkinci seri içi BURADAN ulaşabilirsiniz.
Üçüncü seri için BURADAN ulaşabilirsiniz.

Değişik MYSQL ip uçları ve sorguları yazmak hoşunuza gidiyor ise seriyi takip etmenizi öneririm. Çok fazla değişik sayılmazlar, Google’da arama yaparsanız mutlaka karşınıza çıkacaktır.

MYSQL Veritabanımızda hangi tabloda kaç sütun / kolon olduğunu merak ediyorsak ( bunu niye merak ettiysek 😀 ) aşağıdaki komut işimizi görecektir.

SELECT TABLE_NAME TABLO_ADI, Count(*) SUTUN_SAYISI
FROM information_schema.`COLUMNS`
WHERE table_schema = 'VERI_TABANI_ADI'
GROUP BY TABLE_NAME
ORDER BY SUTUN_SAYISI DESC

Bu sorgunun nerede işe yaracağını düşünüyorsanız geliştirmekte olduğunuz sistemde normalizasyon yapmak istediğinize birkaç analiz yapmanız gerekebilir. Bu sorgu onlardan biri.

MYSQL serisi diyip durduk araya biraz MSSQL de serpiştirelim;

MSSQL de Veritabanımızda kaç adet satır var ? :

SELECT sc.name +'.'+ ta.name TABLO_ADI, SUM(pa.rows) SATIR_SAYISI
FROM sys.tables ta
INNER JOIN sys.partitions pa
ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc
ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
GROUP BY sc.name,ta.name
ORDER BY SUM(pa.rows) DESC

 

MSSQL de veritabanımızda toplam kaç adet satır var dersek de tabi ki yukarıdaki sorguyu biraz değiştirip tekrar sorgulatıyoruz 🙂

SELECT SUM(pa.rows) TOPLAM_SATIR
FROM sys.tables ta
INNER JOIN sys.partitions pa
ON pa.OBJECT_ID = ta.OBJECT_ID
INNER JOIN sys.schemas sc
ON ta.schema_id = sc.schema_id
WHERE ta.is_ms_shipped = 0 AND pa.index_id IN (1,0)
ORDER BY SUM(pa.rows) DESC

 

Bu seriyi daha fazla uzatmadan 2 buçuk örnekle bırakıyorum 🙂

MYSQL Ufak İpuçları – vol.3

Üçüncü seri olarak birkaç ip ucu ile devam edelim.
Birinci seri için BURADAN ulaşabilirsiniz.
İkinci seri içi BURADAN ulaşabilirsiniz.

Nasipse 4. seriyi de yayınlarım yakın bir zamanda 🙂

İlk olarak şöyle bir yapalım. Bir tablomuz var ve diğer bir tabloya aktaracağız. Arayüz kullanırken bu işlemler bir kaç tık yaparak sonuca hızlıca ulaşabiliriz fakat ya arayüzümüz yoksa. ! Çözüm tabi ki var. Komut satırından devam. Arayüz ne yapıyor sanıyorsunuz 🙂

Örnek olarak eski kullanıcı tablosundaki belirli bir sorgunun cevabını yeni bir tabloya aktarmamız gerekiyor;
# INSERT INTO YENI_KULLANICI_TABLOSU ( ADI,SOYADI,MESLEK, ESKI_ID,EMAIL, ADRES ) SELECT ADI,SOYADI,MESLEK, ESKI_ID,EMAIL, ADRES FROM ESKI_KULLANICI_TABLOSU WHERE YAS > 23 AND KAYIT_TARIHI > ‘2018-01-01’  ORDER BY ID DESC LIMIT 1000

Where şartımıza göre yukarıdaki sorgumuz ESKI_KULLANICI_TABLOSU‘dan  YENI_KULLANICI_TABLOSU‘na aktarım yapacaktır. Bu işlemi bir yazılım dili ile de yapabiliriz. Fakat şöyle düşünün; Önce yazılımın çalışacağı PLATFORM’a tüm bilgiyi çekeceğiz ve sonra tekrar geriye INSERT edeceğiz. Bu şekilde daha hızlı olmasını sağlayabilirsiniz. Tabi ki bir veritabanından farklı bir veritabanına aktarım yapmak isterseniz bu sorgu biraz yetersiz gelebilir. 🙂 O zaman kolları sıvayıp bir aktarım / transfer mekanizması yazmanız gerekebilir.

Veritabanınızdaki toplam satır sayısını merak ediyorsanız aşağıdaki sorguyu kullanabilirsiniz.
# SELECT SUM( TABLE_ROWS )
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = ‘VERI_TABANI_ADI‘;

Yine bir merak sorusu ile devam edelim. Merak ettiğimiz ise veritabanımızdaki tabloların MB ( megabayt ) cinsinden boyutlarını sorgulayalım.
# SELECT
table_schema as `Database`,
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
ORDER BY (data_length + index_length) DESC;

Bu sorgular sürekli kullanılan sorgular değildir. Genellikle kriz anlarında yani veritabanı çökmeye yakın anlarında hangi tablo çatlamış, hangi tablo diskte fazla yer kaplıyor, hangi tablo neden bu kadar şişmiş durumlarını kontrol edebilmek içindir. Sorguları genişletip daha farklı sonuçlar alabilirsiniz ve geleceğinizi yakından görüp kriz anlarını öncesinde çözebilirsiniz.

Bir sonraki seride görüşmek üzere. 🙂

 

MYSQL Ufak İpuçları – vol.2

İkinci seri olarak birkaç ip ucu ile devam edelim.
Birinci seri için BURADAN ulaşabilirsiniz.

  • Eski bir tabloda otomatik ID yok ise aşağıdaki komut ile ekleyebilirsiniz;
    • ALTER TABLE `TABLO_ADI` ADD `SUTUN_ADI` INT NOT NULL AUTO_INCREMENT AFTER `HANGI_SUTUNDAN_SONRA`, ADD PRIMARY KEY (`SUTUN_ADI`);
  • Var olan bir Mysql kullanıcısı şifre değiştirme;
    • UPDATE SET USER PASSWORD=PASSWORD(‘YENI_SIFRE‘) WHERE USER=’KULLANICI_ADI‘;
      FLUSH PRIVILEGES;
    • Yetki durumuna göre de şifre değiştirme işlemi yapabilirsiniz;
      • GRAN ALL PRIVILEGES ON DATABASEADI.* TO ‘KULLANICI_ADI‘@’SOURCE_IP‘ IDENTIFIED BY ‘YENI_SIFRE’ with GRANT OPTION;
      • Source IP / Kaynak IP olarak kullanıcı hangi IP den izinli olup olmadığını belirtebilirsiniz. Her yerden bağlanmasını isterseniz “%” ( Yüzde ) işareti koymanız gerekir.

Ek olarak Centos 7 üzerinde MYSQL portuna firewall tarafından izin vermeyi de ekliyorum. Belki lazım olur 🙂

Her yerden izin vermek istediğimizde;
# firewall-cmd –permanent –add-port=3306/tcp
Bu komutun aynısı farklı port açma işlemlerinde de kullanabilirsiniz. Örn : http : 80, https : 443,  ftp : 21, ssh : 22, telnet : 23, dns : 53, ntp : 123 vb.

Özel IP adreslerine izin vermek istediğimizde;
firewall-cmd –permanent –zone=public –add-rich-rule=’ rule family=”ipv4″ source address=”KAYNAK_IP” service name=”mysql” accept’

Bu komuttan sonra işe yaraması için firewall-cmd –reload yapmanız veya servisi tekrar başlatmanız önerilir. En kötü sunucuyu yeniden başlatın 🙂

Yukarıdaki örnekler basit örneklerdir. Fakat sunucu ve arka plan işlemleri ile uğraşanların hemen hemen her konfigürasyonunda kullanmış oldukları, ihtiyaç doğrultusunda keep.google.com gibi yerlerde hızlı ulaşabilmek için saklıyorlardır. En azından ben o şekilde saklıyorum 🙂