我在同一台机器上有两个mysql实例。安装在/ usr / loca / mysql1和/ usr / local / mysql2上。
我在/ etc / mysql1和/ etc / mysql2中有单独的my.cnf文件。我使用source distribution和--prefix = / usr / local / mysql1选项安装了我的第一个sql实例。第二个我从复制和pastinf同一目录到/ usr / local / mysql2。
当我在/usr.local/mysql/libexec上启动mysql守护进程时,它会读取/ etc / mysql1中的my.cnf文件。如果我在/ usr / local / mysql2中启动mysql守护进程,它会读取相同的my.cnf文件。我在这两个位置的.cnf文件中定义了单独的端口号和.sock文件。
我可以在mysqld startup上使用--defaults-file = / etc / mysql2 / my.cnf选项在第二个位置读取my.cnf文件。每次启动守护进程时我都不需要输入它。
如果我要有更多实例,我怎样才能指出正确的my.cnf文件来读取每个mysql守护进程。 mysqld与my.cnf文件的链接背后的含义是什么?
我如何为每个实例预定义my.cnf文件的位置。
答案 0 :(得分:7)
正如您已经发现的那样,MySQL的配置文件有一个已编译的搜索位置。虽然你可以自己重新编译,但是你也发现了 mysqld 的 - defaults-file 选项,它指示它使用完全不同的配置路径。再加上 - data-dir ,这意味着您可以启动绑定到不同端口(和地址,如果喜欢)的多个MySQL实例,并使用完全独立的数据集,同时处理相同的二进制文件和图书馆。
传统上,大多数操作系统发行版都会捆绑一个init脚本来启动MySQL的“默认”实例;也就是说,安装在“通常”位置的那个,以及标准配置路径。虽然这是为了迎合最常见的情况,但你所追求的有点不同,所以你需要创建单独的脚本来启动单独的实例。
如果你打算在同一台机器上部署很多MySQL实例(我不得不问为什么),那么你可能想编写一个自定义的init脚本,它有一些“发现”每个这些(可能通过检查包含“公共”布局的某个目录),然后循环遍历它们,从每个目录开始。当然,相同的init脚本需要能够定位并正确关闭每个脚本。
答案 1 :(得分:0)
我认为唯一可靠的方法是使用前缀选项从源代码编译。要么是这样,要么创建一个使用--defaults-file选项启动mysql2的bash脚本,然后使用它来启动它。
但是,按照您的方式“创建”另一个安装并不好。编译包时,PREFIX被硬编码到可执行文件中。因此,每当它查找资源时,它都从该前缀开始,除非告诉不要使用命令行选项。
所以,如果我是你,我只需要使用新的前缀从源代码重新编译。