'วิธีเดเบียน' ของการติดตั้งอินสแตนซ์ MySQL หลายรายการบนเซิร์ฟเวอร์เดียวคืออะไร


9

คุณรู้หรือไม่ว่า 'วิธีเดเบียน' ของการตั้งค่าอินสแตนซ์ MySQL หลายรายการบนเซิร์ฟเวอร์เดียว เซิร์ฟเวอร์จะรับข้อมูลที่จำลองแบบจากฐานข้อมูลระยะไกลหลายแห่ง

ฉันสามารถใช้สคริปต์เช่นmysqlsandboxแต่ฉันชอบที่จะติดตั้งแพคเกจ Debian และต้องการที่จะสามารถอัพเกรดการติดตั้งโดยไม่ต้องยุ่งยากมากในอนาคต อีกทางเลือกหนึ่งคือmysqlmanager - ใช้งานได้กับ MySQL 5.1 แต่เลิกใช้แล้วและไม่ได้เปิดตัวอีกต่อไปด้วย 5.5

ดังนั้น 'แนวปฏิบัติที่ดีที่สุด' ในการใช้งานอินสแตนซ์ MySQL หลายรายการบนเซิร์ฟเวอร์ Debian เครื่องเดียวคืออะไร


ปัจจุบันนักเทียบท่าสามารถใช้งานได้ในกรณีดังกล่าว
ALex_hha

คำตอบ:


12

ฉันเชื่อว่ามันใช้งานง่ายmysqld_multiและตั้งค่า my.cnf ของคุณอย่างถูกต้อง mysqld_multiเป็นส่วนหนึ่งของการกระจาย mysql - ไม่จีบชุด

มีแพทช์เพื่อให้/usr/share/mysql/mysqld_multi.serverเหมาะสมสำหรับการใช้งานใน/etc/init.dและแพทช์อื่นที่จะทำให้ไฟล์ที่ใช้ในการmysqld_multi/etc/mysql/conf.d

คุณสามารถเริ่มต้นไดเรกทอรีข้อมูล MySQL สำหรับอินสแตนซ์ใหม่ด้วยmysql_install_dbคำสั่งเช่นนี้:

mysql_install_db --datadir=/var/lib/mysql2

อย่าลืมเปลี่ยนรหัสผ่านรูทของอินสแตนซ์ที่สร้างขึ้นใหม่:

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

ขอบคุณ; คุณใช้มันในทางปฏิบัติหรือไม่ เรื่องราว / คำใบ้สยองขวัญใด ๆ
pQd

1
เรื่องราวสยองขวัญของฉันคือการกู้คืนข้อมูลที่ยาวนาน 2 วันเนื่องจากสคริปต์เริ่มต้น mysql ของเดเบียนไม่ได้ปิดตัวลงอย่างงดงาม mysql เนื่องจากการปิดใช้เวลานานเกินไป ตั้งแต่นั้นมาฉันไม่ได้ใช้แพ็คเกจ debian mysql มีเพียงการแจกแจงแบบไบนารีของ Percona และ initscript เท่านั้น
Gabor Vincze

@GaborVincze - มันอยู่ในการติดตั้ง mysqld_multi หรือ 'ปกติ' การติดตั้งอินสแตนซ์ mysql-single?
pQd

มันเป็นการติดตั้งปกติ 5.1
Gabor Vincze

1
ฉันใช้ mysqld_multi ในทางปฏิบัติ ส่วนที่ยากที่สุดคือคุณต้องใช้ mysqld_multi / mysqladmin เพื่อเริ่ม / ปิดอินสแตนซ์เมื่อเทียบกับ /etc/init.d/mysqld รีสตาร์ท - ไม่มีสคริปต์แบบพรีกระป๋องที่แย่มากที่ทำให้มันง่าย เมื่อคุณเชี่ยวชาญมันจะกลายเป็นหมวกเก่าและเป็นวิธีที่สะดวกมากในการหมุนตัวอย่างสำหรับพูดการกู้คืนการจำลองแบบล่าช้า - อะไรก็ตาม
thinice

3

บน Debian 8 คุณสามารถใช้กลไก Systemd: ไม่ต้องการmysqld_multiอีกต่อไป

หมายเหตุ:ฉันใช้รุ่น MariaDB! ไม่แน่ใจว่ามันทำงานกับแพ็คเกจ MySQL 'คลาสสิค' หรือไม่

จาก/lib/systemd/system/mariadb@.service:

รุ่น mariadb หลายอินสแตนซ์ สำหรับถ้าคุณเรียกใช้ verions mutiple ในครั้งเดียว ยังใช้สำหรับ mariadb @ bootstrap เพื่อ bootstrap Galera

สร้างไฟล์กำหนดค่า /etc/mysql/conf.d/ {instancename} .cnf ของฉัน

เริ่มต้นเป็น systemctl เริ่มต้น mariadb@{instancename}.server

ดังนั้นสร้างไฟล์/etc/mysql/conf.d/myserver2.cnfและระบุไฟล์ใหม่ pid / socket / datadir และพอร์ตเครือข่าย:

[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

แก้ไข:ระวังว่าเช่น MySQL แรกที่ไม่ได้อ่านไฟล์ config นี้ด้วยที่ด้านล่างของ!includedir /etc/mysql/conf.d/* /etc/mysql/my.cnfหากเป็นกรณีนี้ให้แทนที่!includedirด้วยหนึ่ง!includeในไฟล์กำหนดค่าอื่น ๆ นอกเหนือจาก myserver2.cnf:

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

เอกสารอย่างเป็นทางการของ MySQL ระบุว่าคุณต้องตั้งชื่อ[mysqld]เป็น[mysqld@server2]( https://dev.mysql.com/doc/refman/5.7/en/using-systemd.html#systemd-multiple-mysql-instances ) แต่สิ่งนี้ไม่สามารถใช้ได้กับ MariaDB . [mysqld]ดังนั้นเพียงแค่ให้

ก่อนเริ่ม daemon ใหม่อย่าลืมสร้าง datadir และไฟล์ที่ต้องการ:

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

ให้รีโหลด systemd daemon ด้วย:

systemctl daemon-reload

และถ้าคุณต้องการเริ่มภูตนี้เมื่อบูต:

systemctl enable mariadb@server2

ในการเริ่มต้น:

service mariadb@server2 start

mysql หลัก (ไม่ใช่อินสแตนซ์) อ่าน/etc/my.cnfว่าเป็นสาเหตุ
Michael Hampton

ฉันแก้ไขคำตอบของฉัน: ในความเป็นจริงก็ปรากฏว่าตัวอย่างแรก DO อ่านไฟล์ server2.cnf !includedir /etc/mysql/conf.d/*กับ เพื่อความปลอดภัยที่ดีขึ้นฉันรวมconf.dไฟล์แต่ละไฟล์ด้วยตนเอง
แย่ที่สุด
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.