我有一个安装MySQL、启动mysqld并使用mysql进行一些初始化的脚本。
目前,为了使其工作,我进入一个循环(抱歉,伪代码混合了多种语言):
mysqld_safe /* ... */ & /* ampersand to start in background so we can continue */
while(fileDoesNotExist("/tmp/mysql.sock")) {
sleepFor100ms();
}
mysql -u root /* and so forth */ initialize.sql
这似乎可以工作(!),但存在多个问题:
- 轮询的方式不太好,
- 我对MySQL不够了解,不知道查看硬编码路径名
/tmp/mysql.sock
是否明智。
然而,与尝试(例如)消耗和解析mysqld_safe
的stdout(或stderr?)以确定服务器是否已启动相比,这要容易得多。
我的具体问题是是否有一种方法可以发出阻塞启动mysqld
的命令:我可以发出任何命令来阻塞,直到数据库已启动,然后退出(并分离,也许留下PID文件),并且有一个停止命令的伴侣吗? (或者允许我读取PID文件并发出自己的SIGTERM?)
我的更广泛的问题是,我是否走在正确的轨道上,或者是否有完全不同且更容易(对我来说“更容易”必须是轻量级的;我对安装一堆工具如Puppet或DbMaintain / Liquibase之类的工具不那么感兴趣)的方法来解决我所阐述的问题?也就是说,从包含MySQL的.gz
文件开始,安装用户区MySQL并初始化数据库?
/etc/my.cnf
中定义。 - tadman