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

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

下面的配置文件非常简洁,仅仅是为了测试用,所以实验前将原来的"my.cnf"做个备份吧,这样会让人安心点。这个配置文件如下:

[client]

# port = 3306

# socket = /var/run/mysqld/mysqld.sock

user = root

password = dandan

[mysqld_multi]

#mysqld = /usr/bin/mysqld_safe

#mysqladmin = /usr/bin/mysqladmin

#user = root

#password = dandan

[mysqld1]

port       = 3306

socket     = /var/run/mysqld/mysql.sock1

pid-file = /var/run/mysqld/db-app1.pid

#log = /usr/bin/mysql/data1/db-app.log

datadir = /var/lib/mysql/

user = mysql

[mysqld2]

port = 3307

socket = /var/run/mysqld/mysql.sock2

pid-file = /var/run/mysqld/db-app2.pid

datadir = /var/lib/mysql/mysql2

#log = /usr/bin/mysql/data2/db-app.log

user = mysql

[mysqlGNR],每个服务器的GNR都不一样,它可以为一个大于或等于0的数,每个服务器都监听不同的端口,有各自的Unix Domain socket。这里需要注意的是数据文件目录,www.adbrite.cc每个服务器要有自己的数据目录,在Ubuntu下安装MySQL,默认数据目录在"/var/lib/mysql"路径下,此路径下有一个mysql数据库,它保存了数据库的配置数据,每个服务器都需要这个数据库,因此在此目录下新建一个mysql2目录,然后"cp -R mysql mysql2"。

先看看var/run/mysqld/目录

root@ecy-geek:/var/run/mysqld# ls /var/run/mysqld/

开启两个服务器

root@ecy-geek:/var/run/mysqld# mysqld_multi start 1,2

再看看var/run/mysqld/目录

root@ecy-geek:/var/run/mysqld# ls /var/run/mysqld/

db-app1.pid  db-app2.pid  mysql.sock1  mysql.sock2

报告服务器的状态,可见两个服务器都已经运行起来了

root@ecy-geek:/var/run/mysqld# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld1 is running

MySQL server from group: mysqld2 is running

关闭一号服务器

root@ecy-geek:/var/run/mysqld# mysqld_multi stop 1;

root@ecy-geek:/var/run/mysqld# ls /var/run/mysqld/

db-app2.pid  mysql.sock2

再次报告状态,可见一号服务器已经关闭

root@ecy-geek:/var/run/mysqld# mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld1 is not running

MySQL server from group: mysqld2 is running

客户端连接试试

root@ecy-geek:/var/run/mysqld# mysql -S/var/run/mysqld/mysql.sock2

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 4

Server version: 5.1.31-1ubuntu2 (Ubuntu)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql>

root@ecy-geek:/var/run/mysqld# mysql -P3307

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

可见使用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脚本吧 ^_^0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值