SQL Notları: Yönetim ve Performans Ayarları

### MySQL Yönetimi ve Performans Ayarları

MySQL veritabanı yönetimi, performans ayarları ve güvenlik konuları, özellikle büyük ölçekli uygulamalarda kritik öneme sahiptir. Bu yazıda, MySQL yönetimi, tetikleyiciler (triggers) ve performans ayarları gibi konuları ele alacağız.

#### 1. Atomik Tablo Yeniden Adlandırma ve Yeniden Yükleme

Tablo yeniden adlandırma işlemi, diğer oturumların tablolara erişimini engeller ve bu nedenle eşzamanlılık sorunlarına neden olmaz. Aşağıdaki örnekte, bir tablo atomik olarak yeniden adlandırılır ve yeniden yüklenir:

“`sql
CREATE TABLE new LIKE real;
— Yeni tabloya veri yükleme işlemleri (LOAD DATA, INSERT, vb.)
RENAME TABLE real TO old, new TO real;
DROP TABLE old;
“`

Bu işlem, tablonun tamamen yeniden yüklenmesini sağlar ve eski tablo silinir.

#### 2. Root Şifresini Değiştirme

MySQL root kullanıcısının şifresini değiştirmek için `mysqladmin` komutu kullanılır:

“`bash
mysqladmin -u root -p’old-password’ password ‘new-password’
“`

#### 3. Veritabanını Silme

Bir veritabanını silmek için `DROP DATABASE` komutu kullanılır. Bu işlem, veritabanındaki tüm tabloları ve verileri kalıcı olarak siler:

“`sql
DROP DATABASE database_name;
“`

Veya:

“`sql
DROP SCHEMA database_name;
“`

#### 4. Tetikleyiciler (Triggers)

Tetikleyiciler, belirli bir tabloda gerçekleşen olaylara (INSERT, UPDATE, DELETE) otomatik olarak tepki veren yapılardır.

##### Örnek: Basit Tetikleyici Oluşturma

Aşağıdaki örnekte, `account` tablosuna bir kayıt eklendiğinde toplam tutarı hesaplayan bir tetikleyici oluşturulmuştur:

“`sql
CREATE TABLE account (acct_num INT, amount DECIMAL(10,2));

CREATE TRIGGER ins_sum BEFORE INSERT ON account
FOR EACH ROW SET @sum = @sum + NEW.amount;

SET @sum = 0;
INSERT INTO account VALUES(137,14.98),(141,1937.50),(97,-100.00);
SELECT @sum AS ‘Total amount inserted’;
“`

**Sonuç:**
“`
+—+
| Total amount inserted |
+—+
| 1852.48              |
+—+
“`

##### Tetikleyici Türleri

– **BEFORE INSERT**: Kayıt eklenmeden önce tetiklenir.
– **BEFORE UPDATE**: Kayıt güncellenmeden önce tetiklenir.
– **AFTER DELETE**: Kayıt silindikten sonra tetiklenir.

##### Örnek: BEFORE INSERT Tetikleyici

“`sql
DELIMITER $$

CREATE TRIGGER insert_date
   BEFORE INSERT ON stack
   FOR EACH ROW
BEGIN
   SET NEW.insert_date = NOW();
END;

$$ DELIMITER ;
“`

#### 5. InnoDB Performans Ayarları

InnoDB, MySQL’in varsayılan depolama motorudur ve performans ayarları, özellikle büyük veritabanları için kritik öneme sahiptir.

##### Örnek: InnoDB Performans Ayarları

“`ini
[mysqld]
innodb_buffer_pool_size = 10G  # Kullanılabilir RAM’in %70’i
innodb_file_per_table = 1
innodb_flush_neighbors = 0
innodb_thread_concurrency = 0
innodb_read_io_threads = 64
innodb_write_io_threads = 64
innodb_io_capacity = 2580
innodb_io_capacity_max = 3800
“`

– **innodb_buffer_pool_size**: InnoDB için önbellek boyutunu belirler. Genellikle kullanılabilir RAM’in %70’i olarak ayarlanır.
– **innodb_file_per_table**: Her tablo için ayrı dosya oluşturur.
– **innodb_flush_neighbors**: SSD’ler için bu ayar genellikle 0 olarak ayarlanır.

#### 6. Güvenli MySQL Şifreleme

Varsayılan şifreleme modu olan `aes-128-ecb` güvenli değildir. Daha güvenli bir şifreleme modu kullanmak için:

“`ini
block_encryption_mode = aes-256-cbc
“`

#### Sonuç

MySQL yönetimi, performans ayarları ve tetikleyiciler, veritabanı uygulamalarının verimli ve güvenli bir şekilde çalışmasını sağlar. Bu ayarları ve yöntemleri kullanarak, MySQL veritabanınızı daha iyi yönetebilir ve performansını artırabilirsiniz. Bir sonraki yazıda görüşmek üzere!