您知道在单个服务器上设置多个MySQL实例的任何“ Debian方法”吗?服务器将接收从多个远程数据库复制的数据。
我可以使用mysqlsandbox之类的脚本,但是我更喜欢使用Debian软件包,并且希望将来能够升级安装程序而不会带来太多麻烦。另一个解决方案是mysqlmanager-它可与MySQL 5.1一起使用,但已过时,并且不再与5.5一起发布。
那么,在一台Debian服务器上运行多个MySQL实例的“最佳实践”是什么?
您知道在单个服务器上设置多个MySQL实例的任何“ Debian方法”吗?服务器将接收从多个远程数据库复制的数据。
我可以使用mysqlsandbox之类的脚本,但是我更喜欢使用Debian软件包,并且希望将来能够升级安装程序而不会带来太多麻烦。另一个解决方案是mysqlmanager-它可与MySQL 5.1一起使用,但已过时,并且不再与5.5一起发布。
那么,在一台Debian服务器上运行多个MySQL实例的“最佳实践”是什么?
Answers:
我相信这就像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
不要忘记更改新创建实例的根密码:
mysqladmin --port 3307 --user=root password 'new-password'
在Debian 8上,您可以使用Systemd机制:不再需要mysqld_multi
。
注意:我使用MariaDB版本!不知道它是否与“经典” MySQL包一起使用。
来自/lib/systemd/system/mariadb@.service
:
mariadb的多实例版本。因为如果您一次运行多个版本。也用于mariadb @ bootstrap引导Galera。
创建配置文件/etc/mysql/conf.d/ my {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实例不要读取此配置文件,!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]
。
在启动新守护程序之前,请不要忘记创建datadir和所需的文件:
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
/etc/my.cnf
,这就是为什么。
!includedir /etc/mysql/conf.d/*
。为了提高安全性,我conf.d
手动添加了每个文件