Mysql Cluster 7.3 Limitations / PART 1

Mysql Cluster 7.3 Limitations

PART 1

– Temprory Tables: NDB storage engine doesn’t support to creating temporary table. When you create or alter to temporary table you will get this error:
Table storage engine ‘ndbcluster’ does not support the create option ‘TEMPORARY’.

– Indexes and keys in NDB tables: Key and indexes has following limitations.

-Column with : When you create an index on the NDB tables columns , which is greater than 3072 bytes , succeeds but only first 3071 bytes are actually will used for index. In such cases you will get below warning. Specified key was too long; max key length is 3072 bytes

– Text and Blob Columns: NDB storage engine doesn’t support to BLOB and TEXT data types.

– FullText indexes: NDB storage engine doesn’t support to Fulltext index. Using Hash keys and Null: İf you are using nullable column in unique keys or primary keys the query will use full table scans. For fixing this issue you should use NOT NULL column or recreate index without USING HASH option.

– BIT Column : Bit column cannot be primary key, unique key or index . But it can be part of composite primary key , unique key or index.

– Restrictions of Foreign Keys: NDB cluster 7.3 supports to foreign key but ON UPDATE CASCADE is not supported when the reference is to the parent table’s primary key. SET DEFAULT is not supported. NO ACTION keywords are accepted but thread as RESTRICTED.

– Geometry data types: Are supported. WKT and WKB. But you cannot create index on that columns.

– User Defined Partitioning: Except Linear Key partitioning , NDB storage engine supports to User Defined Partitioning. Using any other partitioning type with ENGINE=NDB or ENGINE=NDBCLUSTER in a CREATE TABLE statement results in an error. The maximum number of partitions that can defined for a NDBCLUSTER table when employing user-defined partitioning is 8 per node Known Limitations of MySQL Cluster group.

– Drop Partition: Is not supported. But you can add partition , reorganize partition and coalesce partition.

www.mysqlsupport.net
Database Administrator
Tayfur BÖLER

Mysql Master-Master Replication

Mysql Master-Master Replication

Master-Slave Replication da hertürlü veri girişleri, updateler, deleteler,
yeni tablo oluşturma işlemleri vs Master database de yapılırdı. Slave
database sadece read only şeklinde kullanılır ve sadece select işlemleri
bu database”e yönlendirildi. Master-Maser replication da ise her iki master database
de de insert/update/delete vs işlemleri yapılır ve neredeyse her iki database
kendini anlık olarak eşler. Hem Master-Master hem de Master – Slave
Replication Asenkron replicationdur. Data eşleşmesini binary logları
kullanarak yapar.Yani Log-Based bir yapıya sahiptir. Senkron Replication
yani Cluster”ı ise bir sonraki makalemde detaylı olarak anlatacağım.

şimdi Master-Master replication”u nasıl yaparıza bakmaya başlayalım.

Ve adım adım işlemleri yapalım:

Elimizde 192.168.1.21 ve 192.168.1.22 ip li 2 tane mysql server kurulu
makinamız olmuş olsun. deneme isimli database”i replice edelim.

1. Adım: Her iki makinada da,

#bind-address = 127.0.0.1
#skip-networking ifadelerini /etc/mysql/my.cnf conf dosyasından kaldırıyoruz.
Yani başına # işareti koymamız yeterli.

2. Adım:

Server1:

GRANT REPLICATION SLAVE ON *.* TO “slaveUser2â?²@”%” IDENTIFIED BY “password”;
FLUSH PRIVILEGES;

Server1 de yukarıdaki replication userını tanımlıyoruz.Ve
/etc/init.d/mysql restart komutunu verek Server1â?²i restart ediyoruz.

Server2:

GRANT REPLICATION SLAVE ON *.* TO “slaveUser1â?²@”%” IDENTIFIED BY “password”;
FLUSH PRIVILEGES;

Server2 de yukarıdaki replication userını tanımlıyoruz.Ve
/etc/init.d/mysql restart komutunu verek Server2â?²i restart ediyoruz.

3. Adım:

Server1:
/etc/mysql/my.cnf de

[mysqld]
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = 192.168.1.22 (Master 2 serverın ip sini yazıyoruz)
master-user = slaveUser1 (Master 2 de oluşturduğumuz replicasyon userının adını yazıyoruz)
master-password = password (Master 2 de oluşturduğumuz replicasyon userının passwordunu yazıyoruz)
master-connect-retry = 60
replicate-do-db = deneme

log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db = deneme

relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

expire_logs_days = 10
max_binlog_size = 500M

/etc/init.d/mysql restart komutunu verek Server1â?²i restart ediyoruz.

4. Adım:

Server2:

[mysqld]
server-id = 2
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 2

master-host = 192.168.1.21 (Master 1 “in ipsini yazıyoruz.)
master-user = slaveUser2 (Master 1 de oluşturduğumuz replicasyon userının adını yazıyoruz)
master-password = password (Master 1 de oluşturduğumuz replicasyon userının passwordunu yazıyoruz)
master-connect-retry = 60
replicate-do-db = deneme

log-bin= /var/log/mysql/mysql-bin.log
binlog-do-db = deneme

relay-log = /var/lib/mysql/slave-relay.log
relay-log-index = /var/lib/mysql/slave-relay-log.index

expire_logs_days = 10
max_binlog_size = 500M

/etc/init.d/mysql restart komutunu verek Server2â?²i restart ediyoruz.

5. Adım:

Server 2:

stop slave; (problem Çıkarsa reset slave yapın).
(server2 de change master bilgilerini doldururken server1 de SHOW MASTER STATUS; komutu verip bilgileri buraya yazın.)

CHANGE MASTER TO MASTER_HOST=“192.168.1.21â?²,
MASTER_USER=“slaveUser2â?²,
MASTER_PASSWORD=“password”,
MASTER_LOG_FILE=“mysql-bin.000049â?², (Server1 de SHOW MASTER STATUS; komutunun sonucuna göre doldur )
MASTER_LOG_POS=98; (Server1 deSHOW MASTER STATUS; komutunun sonucuna göre doldur )
start slave;

sonra;

LOAD DATA FROM MASTER;

yapın yetki hatası alırsanız
grant ALL on *.* to slaveUser1 komutunu veriniz.

6.Adım:

Server1:

stop salve; yapın.

(Server1 de change master bilgilerini doldururken server2 de SHOW MASTER STATUS; komutu verip bilgileri buraya yazın.)

CHANGE MASTER TO MASTER_HOST=“192.168.1.22â?²,
MASTER_USER=“slaveUser1â?²,
MASTER_PASSWORD=“password”,
MASTER_LOG_FILE=“mysql-bin.000048â?², (Server2 de SHOW MASTER STATUS; komutunun sonucuna göre doldurun. )
MASTER_LOG_POS=98; (Server2 de SHOW MASTER STATUS; komutunun sonucuna göre doldurun. )

start slave yapın.

İşte sonunda Master – Master replication Çalışmaya başlayacaktır.
Her iki servera da /etc/init.d/mysql restart komutunu verirseniz Replicationunuzu kullanmaya
başlayabileceksiniz.

Bir sonraki makaleler de görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator

Mysql Master-Slave Replication

Mysql Master-Slave Replication,

Replication kelime anlamı olarak Veri Kopyalama anlamına gelir.
Database tarafında ise; bir database’in başka bir sunucu üzerinde
eşleniğinin ‘yani hem yapısal hem de datasal olarak’ tutulmasıdır.
Master database da yapılan herhagi bir değişiklik anında eşlenik
database ‘Slave’ yansır. Replication bir backuplama
yöntemi değildir. Üünkü Master database de yapılan bir delete
işlemi slave database de de yapılacağı iÇin her iki database de de
veri silinmiş olacaktır. Replication nun faydası yüksek erişilebilirlilik
sağlaması(Hight Availability) ve uygulamanın performansında artışa
sebeb olmaktır. Bu performans artışını da uygulama tarafında
insert-update-delete işlemlerini master database’e select işlemlerini de
slave database’e yönlendirilerek yapılabilir. Tabi bu yapıyı Çoğaltma
şansınız var.Master -Slave -Slave — şeklinde Slave sunucu sayısını
arttırabilirsiniz. Burada dikkat etmeniz gereken bir nokta var.
Master ve Slave sunucuların aynı network farmında bulunması gerekmek
tedir. Aksi takdirde perforans ta ciddi azalmalar meydana gelir.

şimdi nasıl Master – Slave Replication yaparız ona bakalım.

Elimizde 192.168.1.21 ve 192.168.1.22 ip li 2 tane mysql serverımız olmuş olsun.
192.168.1.21: Master Db
192.168.1.22:Slave Db
Master sunucu üzerindeki personel databaseini replice edelim.

1.Adım: Master ve Slave Database lerde /etc/mysql/my.cnf conf dosyası
iÇinden : #bind-adres=127.0.0.1
#skip-networking ibarelerinin kaldırılması gerkiyor.Yani başına # işareti koymanız yeterli.

2.Adım: Master sunucuda ki /etc/mysql/my.cnf conf dosyasını aÇıp

[mysqld]
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=personel
server-id=1

yukarıdaki ayarları yazmanız gerekiyor.

3.Adım : Sonra mysql’i restart edin.(/etc/init.d/mysql restart)
Devamında veritabanına root olarak girip ve replication haklarına sahip bir user yaratacağız.

Konsoldan mysql -u root -p yazıp entera basın ve passwordu girin.Böylece mysql’e bağlanmış
olacaksınız. Daha sonra;

GRANT REPLICATION SLAVE ON *.* TO “slave_user”@ “%” IDENTIFIED BY “password”;

“slave_user” yerine vereceğiniz userı ,’password’ yerine de vereceğiniz passwordu yazın ve
enter’a basın. Devamında da;

FLUSH PRIVILEGES;
yazıp Çalıştırmanız yeterlidir.

4.Adım:
Hala Master sunucu da mysql konsolunun aÇık olması gerekmektedir.

SHOW MASTER STATUS;
deyip,

+”““““““+”“““-+”““““““+”““““““““+

| mysql-bin.066 | 1180 | personel | |

+”““““““+”“““+”““““““+”““““““““+

yukarıda ki gibi gelen ekrandaki bilgileri not ediniz. Daha sonra slave konfirigasyonunda
kullanacağız.

5.Adım :
Bu adımda Master sunucudaki verilerin Slave sunucuya taşıma işlemini nasıl yapacağınıza
karar vermeniz gerekmektedir. Ya Master sunucu da dump alarak verileri taşıyacaksınız
ya da ayarlarımızı bitirdikten sonra LOAD DATA FROM MASTER; komutunu kullanarak
verileri taşıyacağız.Mysql de dump alma işlemini
http://www.mysqlsupport.net/mysql-backup.html adresinde nasıl yapılacığını anlatmıştım.
LOAD DATA FROM MASTER; komutunu kullanacak isek bu aşamayı şimdilik geÇiyoruz.
Bir dip not düşmek istiyorum eğer taşıyacağınız datanın boyutu büyük ise
LOAD DATA FROM MASTER; yaptığınız zaman Master db niz işlem bitene kadar
lock olacaktır .

6.Adım: Slave Sunucu ayarlarına başlayabilriz.
Üncelikle Slave sunucu da master sunucudaki personel database’ini oluşturmanız gerekecektir.
Daha sonra eğer dump almış isek onu restore ediyoruz.Eğer dumpımız yok ise
LOAD DATA FROM MASTER; komutunu bu aşamada Çalıştırmıyoruz.
şimdi Slave sunucuya kendisinin Slave olduğunu Masterının ise 192.168.1.21 ip li
makina olduğunu ve personel database’ini araması gerektiğini söylüyoruz.
Bunun iÇin aşağıdaki satırları /etc/mysql/my.cnf conf dosyasının iÇine ekliyoruz.

[mysqld]
server-id=2
master-host=192.168.1.21(Master sunucunun ip si)
master-user=slave_user(Master da, slave sunucunun kullanması iÇin oluşturduğumuz user)
master-password=password(Master da, slave sunucunun kullanması iÇin oluşturduğumuz pass)
master-connect-retry=60
replicate-do-db=personel


7.Adım:
şimdi /etc/init.d/mysql restart komutunu verip mysql’i restart edin.
Sonra konsoldan mysql -u root -p yazarak mysql’e bağlanıp,
LOAD DATA FROM MASTER; komutunu Çalıştırabilirsiniz. Böylece
Master sunucudaki dataları Slave sunucuya taşımız olursunuz.

8.Adım: Slave deki Mysql’e bağlı konumdayken,
SLAVE STOP; işlemini yapın ve
(Master daki SHOW MASTER STATUS; komutu sonuclarına göre doldurulacak)

CHANGE MASTER TO MASTER_HOST=’192.168.1.21â?²,
MASTER_USER=“slave_user”,
MASTER_PASSWORD=“password”,
MASTER_LOG_FILE=“mysql-bin.066â?², MASTER_LOG_POS=1180;

yukarıdaki komut satırlarını Çalıştırın. Burada herhangi bir hata almamanız gerekmektedir.
Eğer hata alırsanız bilgileri doğru girdiğinizde emin olun.Hala hata devam ederse
RESET SLAVE; komutunu Çalıştırıp tekrar tekrar deneyin.
Bu işlemi de problemsiz atlattıkdan sonra ;

START SLAVE;
komutunu Çalıştırın.

Evet 8.Adımla birlikte MASTER-SLAVE Replication işlemini tamamlamış olduk.
şimdi ise testler yapabilirsiniz.

Bir sonraki makaleler de görüşmek dileğiyle,

Tayfur BÖLER
Database Administrator