在单个服务器上安装多个 MySQL 实例的“Debian 方式”是什么?

在单个服务器上安装多个 MySQL 实例的“Debian 方式”是什么?

您知道在单个服务器上设置多个 MySQL 实例的任何“Debian 方式”吗?服务器将接收从多个远程数据库复制的数据。

我可以使用类似脚本mysql沙箱但我更喜欢使用 Debian 软件包,并希望将来能够轻松升级设置。另一个解决方案是mysql管理器- 它适用于 MySQL 5.1,但已被弃用并且不再与 5.5 一起发布。

那么在单个 Debian 服务器上运行多个 MySQL 实例的“最佳实践”是什么?

答案1

我相信这就像mysqld_multi正确运行和设置 my.cnf 一样简单。mysqld_multi是 mysql 分发的一部分 - 而不是打包的装饰。

补丁使其/usr/share/mysql/mysqld_multi.server适合于使用/etc/init.d另一个补丁使用mysqld_multi中的文件/etc/mysql/conf.d

mysql_install_db您可以使用以下命令为新实例初始化 MySQL 数据目录:

mysql_install_db --datadir=/var/lib/mysql2

不要忘记更改新创建实例的 root 密码:

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

答案2

在 Debian 8 上,您可以使用 Systemd 机制:不再需要mysqld_multi

笔记:我使用 MariaDB 版本!不确定它是否适用于“经典”MySQL 包。

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

mariadb 的多实例版本。适用于您同时运行多个版本的情况。也用于 mariadb@bootstrap 来引导 Galera。

创建配置文件 /etc/mysql/conf.d/我的{实例名称}.cnf

以 systemctl start 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 实例不会读取此配置文件,在!includedir /etc/mysql/conf.d/*的底部有/etc/mysql/my.cnf。如果是这种情况,请将myserver2.cnf 以外的每个配置文件的替换!includedir为:!include

#!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]

在启动新的守护进程之前,不要忘记创建数据目录和所需的文件:

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

还重新加载 systemd 守护进程配置:

systemctl daemon-reload

如果您想在启动时启动该守护进程:

systemctl enable mariadb@server2

启动方法:

service mariadb@server2 start

相关内容