Apa 'cara Debian' menginstal banyak instance MySQL pada satu server?

9

Apakah Anda tahu 'cara Debian' untuk mengatur beberapa instance MySQL pada satu server? Server akan menerima data yang direplikasi dari beberapa basis data jarak jauh.

Saya dapat menggunakan skrip seperti mysqlsandbox tetapi saya lebih suka tetap menggunakan paket Debian dan ingin dapat memutakhirkan pengaturan tanpa banyak kesulitan di masa depan. Solusi lain adalah mysqlmanager - ini bekerja dengan MySQL 5.1 tetapi sudah usang dan tidak dirilis lagi dengan 5.5.

Jadi apa 'praktik terbaik' dari menjalankan beberapa instance MySQL pada satu server Debian?

pQd
sumber
Saat ini buruh pelabuhan dapat digunakan dalam kasus seperti itu.
ALex_hha

Jawaban:

12

Saya percaya ini sesederhana menjalankan mysqld_multidan mengatur my.cnf Anda dengan benar. mysqld_multiadalah bagian dari distribusi mysql - bukan embel-embel yang dikemas.

Ada tambalan untuk membuat /usr/share/mysql/mysqld_multi.serversesuai untuk digunakan dalam /etc/init.ddan tambalan lain untuk mysqld_multimenggunakan file dalam /etc/mysql/conf.d.

Anda dapat menginisialisasi direktori data MySQL untuk instance baru dengan mysql_install_dbperintah seperti ini:

mysql_install_db --datadir=/var/lib/mysql2

Jangan lupa untuk mengubah kata sandi root dari instance yang baru dibuat:

mysqladmin --port 3307 --user=root password 'new-password'
es tipis
sumber
Terima kasih; apakah Anda menggunakannya dalam praktek? ada cerita / petunjuk horor?
pQd
1
Kisah horor saya adalah pemulihan data selama 2 hari karena skrip init mysql debian tidak mematikan anggun mysql karena shutdown terlalu lama. Sejak itu saya tidak menggunakan paket mysql debian, hanya distribusi biner Percona dan skrip init di dalamnya
Gabor Vincze
@GaborVincze - apakah itu dalam pengaturan mysqld_multi atau instalasi 'mystql-instance' biasa 'tunggal?
pQd
Itu adalah instalasi biasa. An 5.1
Gabor Vincze
1
Saya menggunakan mysqld_multi dalam latihan. Bagian tersulit adalah Anda harus menggunakan mysqld_multi / mysqladmin untuk memulai / mematikan instance versus /etc/init.d/mysqld restart - tidak ada banyak skrip pra-kalengan yang memudahkannya. Setelah Anda menguasainya, itu menjadi topi tua dan merupakan cara yang sangat mudah untuk memutar contoh untuk mengatakan, pemulihan, replikasi tertunda - apa pun.
thinice
3

Pada Debian 8, Anda dapat menggunakan mekanisme Systemd: tidak perlu lagi mysqld_multi.

CATATAN: Saya menggunakan versi MariaDB! Tidak yakin apakah itu berfungsi dengan paket MySQL 'klasik'.

Dari /lib/systemd/system/[email protected]:

Versi multi instance dari mariadb. Karena jika Anda menjalankan versi mutiple sekaligus. Juga digunakan untuk mariadb @ bootstrap untuk bootstrap Galera.

buat file config /etc/mysql/conf.d/ my {instancename} .cnf

mulai sebagai systemctl mulai mariadb@{instancename}.server

Jadi, buat file /etc/mysql/conf.d/myserver2.cnf, dan tentukan di dalamnya file pid / socket / datadir baru dan port jaringan:

[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

EDIT: hati-hati bahwa contoh MySQL pertama tidak membaca file konfigurasi ini, dengan !includedir /etc/mysql/conf.d/*di bagian bawah /etc/mysql/my.cnf. Jika demikian, ganti !includedirdengan a !includedari setiap file konfigurasi LAIN DARI myserver2.cnf:

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

MySQL resmi doc menunjukkan Anda harus nama [mysqld]sebagai [mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) tapi ini tidak bekerja dengan MariaDB . Jadi biarkan saja [mysqld].

Sebelum memulai daemon baru, jangan lupa untuk membuat datadir dan file yang dibutuhkan:

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

Juga memuat kembali konfigurasi daemon systemd:

systemctl daemon-reload

Dan jika Anda ingin memulai daemon ini saat boot:

systemctl enable mariadb@server2

Untuk memulainya:

service mariadb@server2 start
Terburuk
sumber
Mysql utama (non-instances) berbunyi /etc/my.cnf, itu sebabnya.
Michael Hampton
Saya mengedit jawaban saya: pada kenyataannya, tampaknya contoh pertama DO membaca file server2.cnf, dengan !includedir /etc/mysql/conf.d/*. Untuk keamanan yang lebih baik, saya memasukkan setiap conf.dfile secara manual
Terburuk