Ana içeriğe geç

Ubuntu Veritabanı - MySQL

MySQL hızlı, çok iş parçacıklı, çok kullanıcılı ve sağlam bir SQL veritabanı sunucusudur. Görev açısından kritik, ağır yüklü üretim sistemleri ve toplu konuşlandırılmış yazılımlar için tasarlanmıştır.

Kurulum

MySQL'i kurmak için, bir terminal isteminden aşağıdaki komutu çalıştırın:

sudo apt install mysql-server

Kurulum tamamlandıktan sonra MySQL sunucusu otomatik olarak başlatılmalıdır. Mevcut durumunu systemd ile hızlı bir şekilde kontrol edebilirsiniz:

sudo service mysql status

● mysql.service - MySQL Community Server
   Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2019-10-08 14:37:38 PDT; 2 weeks 5 days ago
 Main PID: 2028 (mysqld)
    Tasks: 28 (limit: 4915)
   CGroup: /system.slice/mysql.service
           └─2028 /usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid

Oct 08 14:37:36 db.example.org systemd[1]: Starting MySQL Community Server...
Oct 08 14:37:38 db.example.org systemd[1]: Started MySQL Community Server.

MySQL hizmetinin ağ durumu terminal komut isteminde komut çalıştırılarak da kontrol edilebilir :

sudo ss -tap | grep mysql

Bu komutu çalıştırdığınızda, aşağıdakine benzer bir şey görmelisiniz:

LISTEN    0         151              127.0.0.1:mysql             0.0.0.0:*       users:(("mysqld",pid=149190,fd=29))
LISTEN    0         70                       *:33060                   *:*       users:(("mysqld",pid=149190,fd=32))

Sunucu düzgün çalışmıyorsa, yeniden başlatmak için aşağıdaki komutu yazabilirsiniz:

sudo service mysql restart

Sorun gidermek için aşağıdaki komutu girerek sistem log kayıtlarına ulaşabilirsiniz.

sudo journalctl -u mysql

Yapılandırma

Temel ayarlar için /etc/mysql/ dizinindeki dosyaları yapılandırabilirsin. Örneğin log dosyası, port numarası veya örneğin ağ bağlantısını değiştirmek için /etc/mysql/mysql.conf.d/mysqld.cnf dosyasını düzenleyebilirsin.

192.168.0.5 adresini kendi IP adresiniz ile değiştirin ip address show

bind-address            = 192.168.0.5

Bir yapılandırma değişikliği yaptıktan sonra, MySQL arka plan programının yeniden başlatılması gerekecektir:

sudo systemctl restart mysql.service

Veritabanı Motorları

Ubuntu paketleri tarafından sağlanan MySQL'in varsayılan yapılandırması mükemmel şekilde işlevsel ve iyi performans gösterse de, devam etmeden önce göz önünde bulundurmak isteyebileceğiniz şeyler vardır.

MySQL, verilerin farklı şekillerde depolanmasına izin vermek için tasarlanmıştır. Bu yöntemler, veritabanı veya depolama motorları olarak adlandırılır. İlgileneceğiniz iki ana motor var: InnoDB ve MyISAM.

Depolama motorları son kullanıcıya şeffaftır. MySQL, yüzey altında işleri farklı şekilde ele alır, ancak hangi depolama motorunun kullanıldığına bakılmaksızın, veritabanıyla aynı şekilde etkileşime gireceksiniz.

Her motorun kendine özgü avantajları ve dezavantajları vardır.

Veritabanı motorlarını bir tablo düzeyinde karıştırmak ve eşleştirmek mümkün ve avantajlı olsa da, bunu yapmak, kaynakları bir motora ayırmak yerine iki motor arasında böldüğünüz için yapabileceğiniz performans ayarının etkinliğini azaltır.

  • MyISAM, ikisinden daha eskidir. Belirli koşullar altında InnoDB'den daha hızlı olabilir ve salt okunur bir iş yükünü destekler. Bazı web uygulamaları MyISAM çevresinde ayarlanmıştır (ancak bu, InnoDB altında yavaşlayacakları anlamına gelmez). MyISAM ayrıca büyük miktarlarda metin verisinin çok hızlı aramasına izin veren FULLTEXT veri türünü destekler. Ancak MyISAM yalnızca yazım için tüm tabloyu kilitleyebilir. Bu, bir tabloyu aynı anda yalnızca bir işlemin güncelleyebileceği anlamına gelir. Tablo ölçeklerini kullanan herhangi bir uygulama gibi, bu bir engel olabilir. Ayrıca, bir çökmeden sonra verilerin kurtarılmasını zorlaştıran günlük kaydı da yoktur.

  • InnoDB, veritabanı işlemlerinin güvenilir bir şekilde işlenmesini garanti eden, ACID uyumlu olacak şekilde tasarlanmış daha modern bir veritabanı motorudur . Yazma kilitleme, bir tablo içinde satır düzeyinde gerçekleşebilir. Bu, tek bir tabloda aynı anda birden fazla güncellemenin yapılabileceği anlamına gelir. Veri önbelleğe alma, veritabanı motoru içindeki bellekte de işlenir ve dosya bloğu yerine daha verimli satır düzeyinde önbelleğe almaya izin verir. ACID uyumluluğunu karşılamak için tüm işlemler ana tablolardan bağımsız olarak günlüğe kaydedilir. Bu, veri tutarlılığı kontrol edilebildiği için çok daha güvenilir veri kurtarma sağlar.

MySQL 5.5'ten itibaren InnoDB varsayılan motordur ve motora özgü özelliklere özel ihtiyaç duymadığınız sürece MyISAM üzerinden şiddetle tavsiye edilir.

Gelişmiş yapılandırma

MySQL'in yapılandırma dosyalarında ayarlanabilen ve zaman içinde sunucunun performansını iyileştirmenize olanak tanıyan bir dizi parametre vardır.

Parametrelerin çoğu mevcut veri tabanıyla ayarlanabilir, ancak bazıları veri düzenini etkileyebilir ve bu nedenle uygulanması için daha fazla özen gerekir.

Öncelikle, mevcut verileriniz varsa, bir mysqldump yapmanız ve yeniden yüklemeniz gerekecektir:

mysqldump --all-databases --routines -u root -p > ~/fulldump.sql

Bu, daha sonra verilerin bir kopyasını oluşturmadan önce sizden kök parolasını soracaktır. Bu gerçekleşirken veritabanını kullanan başka kullanıcı veya işlem olmadığından emin olmanız tavsiye edilir. Veritabanınızda ne kadar veri bulunduğuna bağlı olarak, bu biraz zaman alabilir. Bu işlem sırasında ekranda hiçbir şey görmeyeceksiniz.

Döküm tamamlandıktan sonra MySQL'i kapatın:

sudo service mysql stop

Orijinal yapılandırmayı yedeklemek de iyi bir fikirdir:

sudo rsync -avz /etc/mysql /root/mysql-backup

Ardından, istediğiniz yapılandırma değişikliklerini yapın.

Ardından veritabanı alanını silin ve yeniden başlatın ve MySQL'i yeniden başlatmadan önce sahipliğin doğru olduğundan emin olun:

sudo rm -rf /var/lib/mysql/*
sudo mysqld --initialize
sudo chown -R mysql: /var/lib/mysql
sudo service mysql start

Son adım, SQL komutlarınızı veritabanına aktararak verilerinizin yeniden içe aktarılmasıdır.

cat ~/fulldump.sql | mysql

Büyük veri aktarımları için, 'Boru Görüntüleyici' yardımcı programı, içe aktarmanın ilerlemesini izlemek için yararlı olabilir. Pv tarafından üretilen herhangi bir ETA zamanını göz ardı edin, bunlar dosyanın her satırını işlemek için geçen ortalama süreye dayalıdır, ancak ekleme hızı mysqldumps ile satırdan satıra çılgınca değişebilir:

sudo apt install pv
pv ~/fulldump.sql | mysql

Bu tamamlandıktan sonra her şey yolunda gidiyor!

Info

Bu, tüm my.cnf değişiklikleri için gerekli değildir. Performansı artırmak için değiştirmek isteyebileceğiniz değişkenlerin çoğu, sunucu çalışırken bile ayarlanabilir. Her şeyde olduğu gibi, değişiklik yapmadan önce yapılandırma dosyalarının ve verilerin iyi bir yedek kopyasına sahip olduğunuzdan emin olun.

MySQL Ayarlayıcı

MySQL Tuner, çalışan bir MySQL örneğine bağlanır ve iş yükünüz için veritabanını optimize etmek için yapılandırma önerileri sunar. Sunucu ne kadar uzun süre çalışıyorsa, mysqltuner'ın sağlayabileceği tavsiyeler o kadar iyi olur. Bir üretim ortamında, aracı çalıştırmadan önce en az 24 saat beklemeyi düşünün. Mysqltuner'ı Ubuntu depolarından kurabilirsiniz:

sudo apt install mysqltuner

Ardından kurulduktan sonra çalıştırın:

mysqltuner

ve nihai raporunu bekleyin. Üst kısım, veritabanı sunucusu hakkında genel bilgiler sağlar ve alt kısım, my.cnf dosyanızda değişiklik yapmak için ayar önerileri sunar. Bunların çoğu yeniden başlatılmadan sunucuda canlı olarak değiştirilebilir; Üretimde değişecek ilgili değişkenler için resmi MySQL belgelerine (Kaynaklar bölümündeki bağlantı) bakın. Aşağıdaki örnek, sorgu önbelleğini artırmanın potansiyel faydalarını gösteren bir üretim veritabanından alınan bir raporun parçasıdır:

-------- Recommendations -----------------------------------------------------
General recommendations:
    Run OPTIMIZE TABLE to defragment tables for better performance
    Increase table_cache gradually to avoid file descriptor limits
Variables to adjust:
    key_buffer_size (> 1.4G)
    query_cache_size (> 32M)
    table_cache (> 64)
    innodb_buffer_pool_size (>= 22G)

Performans optimizasyon stratejilerinin uygulamadan uygulamaya değiştiğini söylemeye gerek yok. Örneğin, Wordpress için en iyi olan şey Drupal veya Joomla için en iyisi olmayabilir. Performans, sorgu türlerine, dizinlerin kullanımına, veritabanı tasarımının ne kadar verimli olduğuna vb. Bağlı olabilir. Hangi uygulamaları kullandığınıza bağlı olarak veritabanı ayarlama ipuçlarını aramak için biraz zaman harcamak yararlı olabilir. Veritabanı yapılandırma ayarlarından azalan getiri noktasına ulaştığınızda, iyileştirmeler için uygulamanın kendisine bakın veya daha güçlü donanıma yatırım yapın ve / veya veritabanı ortamını ölçeklendirin.