你知道在单个服务器上设置多个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