Tek bir sunucuya birden fazla MySQL örneği kurmanın 'Debian yolu' nedir?


9

Tek bir sunucuda birden fazla MySQL örneği kurmanın 'Debian' yöntemini biliyor musunuz? Sunucu, birden çok uzak veritabanından çoğaltılan verileri alacaktı.

Mysqlsandbox gibi komut dosyalarını kullanabilirim ama Debian paketlerine bağlı kalmayı tercih ediyorum ve gelecekte çok fazla komplikasyon olmadan kurulumu yükseltmek istiyorum. Başka bir çözüm mysqlmanager - MySQL 5.1 ile çalışır, ancak kullanımdan kaldırılmıştır ve 5.5 ile artık yayınlanmamıştır.

Peki, tek bir Debian sunucusunda birden fazla MySQL örneği çalıştırmanın 'en iyi uygulaması' nedir?


Günümüzde docker bu gibi durumlarda kullanılabilir.
ALex_hha

Yanıtlar:


12

mysqld_multiMy.cnf'nizi doğru bir şekilde çalıştırmak ve ayarlamak kadar basit olduğuna inanıyorum . mysqld_multimysql dağılımının bir parçasıdır - paketlenmiş fırfır değil.

Orada bir yama yapmak için /usr/share/mysql/mysqld_multi.serverkullanılmak üzere uygun /etc/init.dve başka yama yapmak için mysqld_multikullanım dosyaları /etc/mysql/conf.d.

MySQL veri dizinlerini aşağıdaki mysql_install_dbgibi yeni bir komutla başlatabilirsiniz :

mysql_install_db --datadir=/var/lib/mysql2

Yeni oluşturulan örneğin kök şifresini değiştirmeyi unutmayın:

mysqladmin --port 3307 --user=root password 'new-password'

Teşekkürler; pratikte kullanıyor musun? herhangi bir korku hikayesi / ipucu var mı?
pQd

1
Korku hikayem debian'ın mysql init betiği mysql'i kapatmayacaktı çünkü kapatma çok uzun sürdüğü için 2 günlük bir veri kurtarma. O zamandan beri debian mysql paketini kullanmıyorum, sadece Percona'nın ikili dağılımı ve içindeki initscript
Gabor Vincze

@GaborVincze - mysqld_multi kurulumunda mı yoksa 'normal' tek mysql örneği kurulumunda mı?
pQd

Düzenli bir kurulumdu. 5.1
Gabor Vincze

1
Pratikte mysqld_multi kullanıyorum. En zor yanı, örnekleri /etc/init.d/mysqld yeniden başlatmaya karşı başlatmak / kapatmak için mysqld_multi / mysqladmin'i kullanmak zorunda olmanızdır - bunu kolaylaştıran korkunç bir çok önceden hazırlanmış komut dosyası yoktur. Bir kez ustalaştığınızda, eski şapka haline gelir ve diyelim ki, iyileşme, gecikmeli çoğaltma için bir örnek döndürmek için çok uygun bir yoldur.
12:00

3

Debian 8'de Systemd mekanizmasını kullanabilirsiniz: artık gerek yok mysqld_multi.

NOT: MariaDB sürümünü kullanıyorum! 'Klasik' MySQL paketi ile çalışıp çalışmadığından emin değilim.

Gönderen /lib/systemd/system/mariadb@.service:

Mariadb çoklu örnek versiyonu. Çünkü birden fazla sürümü aynı anda çalıştırırsanız. Ayrıca marierab @ bootstrap Galera bootstrap için kullanılır.

/etc/mysql/conf.d/ yapılandırma dosyası oluşturmak benim {örnekadı} .cnf

systemctl olarak başla mariadb@{instancename olarak başla.

Bu nedenle, bir dosya oluşturun /etc/mysql/conf.d/myserver2.cnfve yeni pid / socket / datadir dosyalarını ve ağ bağlantı noktasını belirtin:

[mysqld]
user        = mysql
pid-file    = /var/run/mysqld/mysqld-server2.pid
socket      = /var/run/mysqld/mysqld-server2.sock
port        = 3307
basedir     = /usr
datadir     = /var/lib/mysql-server2
tmpdir      = /tmp

DÜZENLEME: ilk MySQL örneğinin altında bu yapılandırma dosyasını okumadığına !includedir /etc/mysql/conf.d/*dikkat edin /etc/mysql/my.cnf. O durumda, yerini !includedirbir ile !includeher yapılandırma dosyası DIŞINDA myserver2.cnf ait:

#!includedir /etc/mysql/conf.d/*
!include /etc/mysql/conf.d/conf1.cnf
!include /etc/mysql/conf.d/confX.cnf

MySQL resmi dokümanı ( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) [mysqld]olarak adlandırmanız gerektiğini belirtir ancak bu MariaDB ile çalışmaz . Öyleyse bırakın .[mysqld@server2][mysqld]

Yeni arka plan programına başlamadan önce datadir ve gerekli dosyaları oluşturmayı unutmayın:

mkdir /var/lib/mysql-server2
chown mysql:mysql /var/lib/mysql-server2
mysql_install_db --datadir=/var/lib/mysql-server2

Ayrıca systemd daemon config dosyasını yeniden yükleyin:

systemctl daemon-reload

Ve bu daemon'u önyüklemede başlatmak istiyorsanız:

systemctl enable mariadb@server2

Başlamak için:

service mariadb@server2 start

Ana (anlık olmayan) mysql okuyor /etc/my.cnf, bu yüzden.
Michael Hampton

Cevabımı düzenledim: Aslında, ilk örnek server2.cnf dosyasını DO ile okuduğu anlaşılıyor !includedir /etc/mysql/conf.d/*. Daha iyi güvenlik için her conf.ddosyayı elle
En Kötü
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.