在单个 Ubuntu 服务器上运行多个 MySQL 实例

在单个 Ubuntu 服务器上运行多个 MySQL 实例

是否可以在 Ubuntu 服务器上安装多个 MySQL 服务器实例,就像在 Windows 服务器上一样?

目标是在一个 Ubuntu Server 中安装 10 个 MySQL Server 实例,每个 MySQL Server 都有自己的端口号和 IP 地址。

答案1

这绝对是有可能的。https://dev.mysql.com/doc/refman/5.7/en/multiple-unix-servers.html是一个很好的参考。

替代方案 #1: 根据 MySQL 的参考,我的建议是制作 10 份 my.cnf 副本并将其添加到您的/etc/rc.local。在这种情况下,您最好使用 monit 等工具来监控实例的状态和正常运行时间。第二种选择是修改现有的启动脚本。

以下脚本未经测试,但可以让您了解需要做什么。它循环遍历 10 个 MySQL 服务器,复制单独的配置,创建单独的用户和数据目录,并将端口号从 3306 增加到 3317。在运行 rc.local 或重新启动服务器之前,请确保检查 rc.local 以将 IP 地址更改为所需的 IP。

另外,请确保在性能利用率方面配置合理的设置,以便同时处理所有这些服务器。可能会与 SELinux 或 AppArmor 等 ACL 发生冲突。如果您在使用此解决方案时遇到问题并且无法解决,请发表评论。

mv /etc/rc.local /etc/rc.local.bak
printf '%s\n' '#!/bin/bash' > /etc/rc.local
chmod 0755 /etc/rc.local
cd /etc/mysql
port=3306
for i in {1..10}
do
   cp my.cnf my-${port}.cnf
   sed -i 's/socket.*/socket\=\/var\/run\/mysqld\/mysqld-${port}.sock/' my-${port}.cnf
   echo "mysqld_safe --defaults-file=/usr/local/mysql/my-${port}.cnf --bind-address=127.0.0.${i} --port=$port --datadir=/var/lib/mysql-${port} " >> /etc/rc.local
   useradd -d /nonexistent -s /bin/false -c "MySQL server listening on ${port}"
   mkdir -m 0700 /var/lib/mysql-${port}
   mysql_install_db --user=mysql --basedir=/var/lib/mysql-${port} --datadir=/var/lib/mysql-${port}/data
   port=$(expr $port + 1)
done
echo 'exit 0' >> /etc/rc.local
mv my.cnf my.cnf.bak
update-rc.d -f mysql remove

替代方案 #2: 按照以下说明使用 mysqld_multihttps://dev.mysql.com/doc/refman/5.7/en/mysqld-multi.html

替代方案 #3: 一个非常简单干净的解决方案是安装 docker 并运行 10 个单独的 MySQL 容器,使用不同的端口和 IP 号。您可以在 中设置这些覆盖Dockerfile

我希望这有帮助!

答案2

您可以使用容器化或 2 型虚拟机管理程序来实现您的需求(同一主机上的多个 mysql 实例)。我建议使用 Docker用于集装箱化。

如果您不熟悉容器,可以将其视为轻量级虚拟机,其中虚拟机管理程序 (Hypervisor) 是容器引擎 (docker)。

但与虚拟机不同的是,容器不需要完整的操作系统或必需的 lib/bin。主机上运行的多个容器可以共享相同的 Linux 内核和库,这使得它们更高效,在某些情况下,通过容器之间的分离更容易管理。

以下是与虚拟机管理程序相比的架构概述: 虚拟机和容器之间的架构差异

相关内容