'Cách Debian' để cài đặt nhiều phiên bản MySQL trên một máy chủ là gì?


9

Bạn có biết 'cách Debian' nào để thiết lập nhiều phiên bản MySQL trên một máy chủ không? Máy chủ sẽ nhận dữ liệu được sao chép từ nhiều cơ sở dữ liệu từ xa.

Tôi có thể sử dụng các tập lệnh như mysqlsandbox nhưng tôi thích gắn bó với các gói Debian hơn và muốn có thể nâng cấp thiết lập mà không gặp nhiều rắc rối trong tương lai. Một giải pháp khác là mysqlmanager - nó hoạt động với MySQL 5.1 nhưng nó không dùng nữa và không được phát hành nữa với 5.5.

Vậy 'cách thực hành tốt nhất' để chạy nhiều phiên bản MySQL trên một máy chủ Debian là gì?


Ngày nay docker có thể được sử dụng trong những trường hợp như vậy.
ALex_hha

Câu trả lời:


12

Tôi tin rằng nó đơn giản như việc chạy mysqld_multivà thiết lập my.cnf của bạn một cách chính xác. mysqld_multilà một phần của phân phối mysql - không phải là một diềm đóng gói.

một bản vá để làm cho /usr/share/mysql/mysqld_multi.serverphù hợp để sử dụng trong /etc/init.dmột bản vá khác để mysqld_multisử dụng các tệp trong /etc/mysql/conf.d.

Bạn có thể khởi tạo thư mục dữ liệu MySQL cho các phiên bản mới bằng mysql_install_dblệnh như thế này:

mysql_install_db --datadir=/var/lib/mysql2

Đừng quên thay đổi mật khẩu gốc của phiên bản mới được tạo:

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

cảm ơn; bạn có sử dụng nó trong thực tế không? bất kỳ câu chuyện / gợi ý kinh dị?
pQd

1
Câu chuyện kinh dị của tôi là một quá trình phục hồi dữ liệu kéo dài 2 ngày vì kịch bản init mys mys của debian đã không tắt một cách duyên dáng mys mys vì tắt máy mất quá nhiều thời gian. Kể từ đó, tôi không sử dụng gói mysql debian, chỉ phân phối nhị phân của Percona và initscript trong đó
Gabor Vincze

@GaborVincze - đó là trong thiết lập mysqld_multi hay cài đặt cá thể mys-đơn 'thông thường'?
pQd

Đó là một cài đặt thường xuyên. Một 5.1
Gabor Vincze

1
Tôi sử dụng mysqld_multi trong thực tế. Phần khó nhất là bạn phải sử dụng mysqld_multi / mysqladmin để bắt đầu / tắt các trường hợp so với /etc/init.d/mysqld khởi động lại - không có nhiều tập lệnh đóng hộp khủng khiếp giúp dễ dàng. Khi bạn thành thạo nó, nó trở thành chiếc mũ cũ và là một cách rất thuận tiện để tạo ra một ví dụ để nói, phục hồi, sao chép chậm - bất cứ điều gì.
mỏng

3

Trên Debian 8, bạn có thể sử dụng cơ chế Systemd: không cần thêm nữa mysqld_multi.

LƯU Ý: Tôi sử dụng phiên bản MariaDB! Không chắc chắn nếu nó hoạt động với gói MySQL 'cổ điển'.

Từ /lib/systemd/system/mariadb@.service:

Phiên bản đa phiên bản của mariadb. Vì nếu bạn chạy verions cùng một lúc. Cũng được sử dụng cho mariadb @ bootstrap để bootstrap Galera.

tạo tập tin cấu hình /etc/mysql/conf.d/ my {instancename} .cnf

bắt đầu như systemctl bắt đầu mariadb @ đũainstancename Bolog.server

Vì vậy, hãy tạo một tệp /etc/mysql/conf.d/myserver2.cnfvà chỉ định trong tệp pid / socket / datadir và cổng mạng mới:

[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: hãy cẩn thận rằng phiên bản MySQL đầu tiên không đọc tệp cấu hình này, !includedir /etc/mysql/conf.d/*ở dưới cùng /etc/mysql/my.cnf. Nếu đúng như vậy, hãy thay thế !includedirbằng một !includetrong mỗi tệp cấu hình KHÁC THAN myserver2.cnf:

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

Tài liệu chính thức của MySQL chỉ ra rằng bạn phải đặt tên [mysqld][mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/USE-systemd.html#systemd-multipl-mysql-instances ) nhưng điều này không hoạt động với MariaDB . Vì vậy, hãy để cho [mysqld].

Trước khi bắt đầu trình nền mới, đừng quên tạo datadir và các tệp cần thiết:

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

Cũng tải lại cấu hình systemd daemon:

systemctl daemon-reload

Và nếu bạn muốn khởi động daemon này khi khởi động:

systemctl enable mariadb@server2

Để bắt đầu nó:

service mariadb@server2 start

Các mysql chính (không có bản năng) đọc /etc/my.cnf, đó là lý do tại sao.
Michael Hampton

Tôi đã chỉnh sửa câu trả lời của mình: trên thực tế, có vẻ như trường hợp đầu tiên DO đọc tệp server2.cnf, với !includedir /etc/mysql/conf.d/*. Để bảo mật tốt hơn, tôi đã bao gồm từng conf.dtệp theo cách thủ công
Tệ nhất là
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.