MySQL, büyük veri kümelerini yönetmek ve yüksek kullanılabilirlik sağlamak için çeşitli yöntemler sunar. Bu yazıda, **bölümleme (partitioning)** ve **çoğaltma (replication)** kavramlarını ele alacağız. Bu teknikler, veritabanı performansını artırmak ve veri güvenliğini sağlamak için oldukça önemlidir.
—
### Bölümleme (Partitioning)
Bölümleme, büyük tabloları daha küçük ve yönetilebilir parçalara ayırma işlemidir. Bu, sorgu performansını artırabilir ve veri yönetimini kolaylaştırabilir. MySQL’de üç temel bölümleme türü vardır: **RANGE**, **LIST** ve **HASH**.
#### 1. RANGE Bölümleme
RANGE bölümleme, belirli bir aralıktaki değerlere göre verileri bölümlemek için kullanılır. Örneğin, bir mağaza zincirindeki çalışanları mağaza kimlik numaralarına göre bölümleyebilirsiniz:
“`sql
ALTER TABLE employees PARTITION BY RANGE (store_id) (
PARTITION p0 VALUES LESS THAN (6),
PARTITION p1 VALUES LESS THAN (11),
PARTITION p2 VALUES LESS THAN (16),
PARTITION p3 VALUES LESS THAN MAXVALUE
);
“`
Bu örnekte, `store_id` değerine göre çalışanlar dört farklı bölüme ayrılmıştır.
#### 2. LIST Bölümleme
LIST bölümleme, belirli bir değer listesine göre verileri bölümlemek için kullanılır. Örneğin, mağazaları bölgelere göre bölümleyebilirsiniz:
“`sql
ALTER TABLE employees PARTITION BY LIST(store_id) (
PARTITION pNorth VALUES IN (3, 5, 6, 9, 17),
PARTITION pEast VALUES IN (1, 2, 10, 11, 19, 20),
PARTITION pWest VALUES IN (4, 12, 13, 14, 18),
PARTITION pCentral VALUES IN (7, 8, 15, 16)
);
“`
Bu örnekte, her bölgeye ait mağaza kimlik numaraları belirli bölümlere atanmıştır.
#### 3. HASH Bölümleme
HASH bölümleme, verileri belirli bir sayıda bölüme eşit olarak dağıtmak için kullanılır. Bu yöntem, bölümleme işlemini otomatik olarak gerçekleştirir:
“`sql
CREATE TABLE employees (
id INT NOT NULL,
fname VARCHAR(30),
lname VARCHAR(30),
hired DATE NOT NULL DEFAULT ‘1970-01-01’,
separated DATE NOT NULL DEFAULT ‘9999-12-31’,
job_code INT,
store_id INT
)
PARTITION BY HASH(store_id)
PARTITIONS 4;
“`
Bu örnekte, `store_id` sütununa göre veriler dört bölüme eşit olarak dağıtılır.
—
### Çoğaltma (Replication)
Çoğaltma, bir veritabanı sunucusundaki verilerin bir veya daha fazla sunucuya kopyalanması işlemidir. Bu, yüksek kullanılabilirlik ve yedekleme sağlar. MySQL’de **Master-Slave** çoğaltma yapısı yaygın olarak kullanılır.
#### Master-Slave Çoğaltma Kurulumu
1. **Master Sunucu Yapılandırması:**
– Master sunucuda bir kullanıcı oluşturun ve çoğaltma izinleri verin:
“`sql
CREATE USER ‘repl_user’@’%’ IDENTIFIED BY ‘password’;
GRANT REPLICATION SLAVE ON *.* TO ‘repl_user’@’%’;
FLUSH PRIVILEGES;
“`
– `my.cnf` dosyasına aşağıdaki satırları ekleyin:
“`ini
server-id = 1
log-bin = mysql-bin.log
binlog-do-db = your_database
“`
– MySQL sunucusunu yeniden başlatın.
2. **Slave Sunucu Yapılandırması:**
– `my.cnf` dosyasına aşağıdaki satırları ekleyin:
“`ini
server-id = 2
master-host = master_ip_address
master-user = repl_user
master-password = password
replicate-do-db = your_database
“`
– MySQL sunucusunu yeniden başlatın.
3. **Verileri Slave’e Kopyalama:**
– Master sunucuda verileri kilitleyin ve yedek alın:
“`sql
FLUSH TABLES WITH READ LOCK;
mysqldump your_database -u root -p > backup.sql;
“`
– Yedeği Slave sunucuya aktarın:
“`bash
mysql -u root -p your_database < backup.sql
“`
4. **Çoğaltmayı Başlatma:**
– Master sunucuda log dosyası ve pozisyon bilgisini alın:
“`sql
SHOW MASTER STATUS;
“`
– Slave sunucuda çoğaltmayı başlatın:
“`sql
CHANGE MASTER TO MASTER_HOST=’master_ip_address’, MASTER_USER=’repl_user’, MASTER_PASSWORD=’password’, MASTER_LOG_FILE=’mysql-bin.000001′, MASTER_LOG_POS=130;
START SLAVE;
“`
—
### Çoğaltma Hataları ve Çözümleri
Çoğaltma sırasında hatalar oluşabilir. Örneğin, bir sorgu Slave’de çalıştırılamazsa çoğaltma durdurulabilir. Bu tür hataları atlamak için aşağıdaki komut kullanılabilir:
“`sql
STOP SLAVE;
SET GLOBAL sql_slave_skip_counter=1;
START SLAVE;
“`
Ancak, bu tür hataları atlamak veri tutarsızlığına neden olabileceğinden dikkatli olunmalıdır.
—
### Sonuç
MySQL’de bölümleme ve çoğaltma, büyük veri kümelerini yönetmek ve yüksek kullanılabilirlik sağlamak için güçlü araçlardır. Doğru yapılandırıldığında, bu teknikler veritabanı performansını önemli ölçüde artırabilir ve veri güvenliğini sağlayabilir. Bu yöntemleri uygularken, veri tutarlılığını korumak ve olası hataları dikkatlice yönetmek önemlidir.