什么是在单个服务器上安装多个mysql实例的“debian方法”?

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

我可以使用像mysqlsandbox这样的脚本,但是我更愿意使用Debian软件包,并希望在未来能够在没有太多复杂情况下升级设置。 另一个解决scheme是mysqlmanager – 它适用于MySQL 5.1,但不推荐使用5.5。

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

我相信这与运行mysqld_multi并正确设置my.cnf一样简单。 mysqld_multi是mysql发行版的一部分 – 不是一个打包的frill。

有一个修补程序可以使/usr/share/mysql/mysqld_multi.server适合在/etc/init.d使用, 另一个修补程序可以在mysqld_multi使用mysqld_multi使用文件。

您可以使用mysql_install_db命令来初始化新数据库的MySQL数据目录,如下所示:

 mysql_install_db --datadir=/var/lib/mysql2 

不要忘记更改新创build的实例的根密码:

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

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

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

/lib/systemd/system/[email protected]

mariadb的多实例版本。 因为如果你一次运行多个版本。 也用于mariadb @ bootstrap引导Galera。

创buildconfiguration文件/etc/mysql/conf.d/ my {instancename} .cnf

作为systemctl启动mariadb@{instancename}.server

因此,创build一个文件/etc/mysql/conf.d/myserver2.cnf ,并在其中指定新的pid / socket / datadir文件和networking端口:

 [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实例不读取这个configuration文件,在!includedir /etc/mysql/conf.d/*底部的!includedir /etc/mysql/conf.d/* /etc/mysql/my.cnf 。 如果是这种情况,请将!includedirreplace为每个configuration文件的其中一个!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]

在启动新的守护进程之前,不要忘记创builddatadir和所需的文件:

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

还要重新加载systemd守护进程configuration:

 systemctl daemon-reload 

如果你想在启动时启动这个守护进程:

 systemctl enable mariadb@server2 

要开始它:

 service mariadb@server2 start