Linux下使用mysqld_multi管理多个MySQL服务器

2014-11-24 17:38:45 · 作者: · 浏览: 1

当一台机器上需要运行多个MySQL服务器时,mysqld_multi是一个非常棒的工具,通过简单的命令,它可以启动,关闭和报告所管理的服务器的状态。


可见使用Unix Domain连接服务器是正常的,使用套接字却连接不上,似乎mysql客户端能明白自己同服务器在一台主机上,因此它固执地使用Unix Domain连接服务器而不管用户的指示。上面的只是一个简单的演示而已,一般[mysqld_multi]组合里有一些mysqld_multi一些选项,推荐使用mysqld_safe来启动服务器,我被里面的选项弄晕了,所以就没有往配置文件中添加[mysqld_multi]这个组,等以后再深入探究下吧。


使用"service mysql start"开启mysql服务器,默认也是使用了mysqld_safe脚本启动。在Linux中许多程序都是使用shell脚本来启动的,bash会开启一个新的进程运行脚本,这个脚本要运行的程序会成为该进程的子进程,只要子进程不退出,父进程也会一直运行。如果使用"kill -9"杀死父进程,子进程将成为孤儿进程被init进程收养。Linux qq的启动脚本非常之简单,如下:


root@ecy-geek:/home/ecy/C# which qq
/usr/bin/qq
root@ecy-geek:/home/ecy/C# file /usr/bin/qq
/usr/bin/qq: POSIX shell script text executable
root@ecy-geek:/home/ecy/C# cat /usr/bin/qq
#!/bin/sh
cd /usr/share/tencent/qq/
./qq
root@ecy-geek:/home/ecy/C# ps -ef | grep qq
root 2658 1278 0 12:13 pts/1 00:00:00 grep qq
ecy 6187 1 0 11:41 00:00:00 /bin/sh /usr/bin/qq
ecy 6188 6187 0 11:41 00:00:04 ./qq
可以看见运行/usr/bin/qq这个脚本的进程的父进程是init进程,从图形界面启动的qq是这样的,而从shell中直接输入/usr/bin/qq启动qq,脚本进程的父进程就是运行该qq的bash进程了。
root@ecy-geek:/home/ecy/C# ps -ef | grep mysql
root 1974 1278 0 12:09 pts/1 00:00:00 grep mysql
root@ecy-geek:/home/ecy/C# service mysql start
* Starting MySQL database server mysqld [ OK ]
* Checking for corrupt, not cleanly closed and upgrade needing tables.
root@ecy-geek:/home/ecy/C# ps -ef | grep mysql
root 2027 1 0 12:09 pts/1 00:00:00 /bin/sh /usr/bin/mysqld_safe
mysql 2075 2027 1 12:09 pts/1 00:00:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --user=mysql --log-error=/var/lib/mysql/ecy-geek.err --pid-file=/var/lib/mysql/ecy-geek.pid
root 2198 1278 0 12:10 pts/1 00:00:00 grep mysql
mysqld_safe脚本就非常复杂了,这一阵子也在复习shell,什么时候有空分析下mysqld_safe脚本吧 ^_^