|
mysql_multi 可以管理多个 mysqld 进程,这些服务进程在不同的 Unix socket 文件和 TCP/IP 端口上监听,并且可以启动/停止服务器,或报告它们的当前状态。
下面以实际操作来演示如何使用 mysqld_multi 脚本及相关文件的配置。
1. 先检查 mysqld 是否在运行,如果在运行,可先关闭:# mysqladmin ping
mysqld is alive #服务器正在运行
# mysqladmin shutdown #关闭之
# ps -ef |grep mysql
root 7995 7975 0 20:44 pts/1 00:00:00 grep mysql #确认已经关闭
在 《 CentOS6.3 源码安装 MySQL 5.6.10 》里说到过,数据文件就放在 /opt/mysql-5.6.10/data 目录下。实际上,如果只有一个 mysqld 实例的话,它就对应这个目录;但是如果有多个 mysqld 实例,那么就需要为他们分别建立对应的目录,比如:#mkdir -p /opt/mysql-5.6.10/data2
mkdir -p /opt/mysql-5.6.10/data3
创建完目录后,需要修改一下目录的权限:# cd /opt/mysql-5.6.10
# chown mysql.mysql ./data2 –R
# chown mysql.mysql ./data3 –R
2. 接着,使用 mysql_install_db 脚本对上面建立的 data2 和 data3 这两个目录进行初始化。如果想了解 mysql_install_db 的选项用法,可以敲入命令 mysql_install_db --help 。[root@centos mysql-5.6.10]# ./scripts/mysql_install_db --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data2 --user=mysql
[root@centos mysql-5.6.10]# ./scripts/mysql_install_db --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data3 --user=mysql 初始化完后,可以检查一下数据库目录:[root@centos mysql-5.6.10]# cd data2
[root@centos data2]# ll
total 110604
-rw-rw----. 1 mysql mysql 12582912 Mar 5 22:02 ibdata1
-rw-rw----. 1 mysql mysql 50331648 Mar 5 22:02 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 Mar 5 20:57 ib_logfile1
drwx------. 2 mysql mysql 4096 Mar 5 20:57 mysql
drwx------. 2 mysql mysql 4096 Mar 5 22:02 performance_schema
drwx------. 2 mysql mysql 4096 Mar 5 20:57 test
3. 接下来需要编辑一下 my.cnf 这个文件了。在修改之前,最好做一个备份:
由于 mysqld_multi 脚本是从 my.cnf 文件里的 [mysqld_multi] 组里查找相应信息的,因此可以对 my.cnf 里的该组进行编辑,如果没有则添加之,比如:[mysqld_multi]
mysqld = /opt/mysql-5.6.10/bin/mysqld_safe
mysqladmin = /opt/mysql-5.6.10/bin/mysqladmin
user = groad
password = 123456
[mysqld1]
socket = /tmp/mysql1.sock
port = 3306
pid-file = /tmp/mysql1.pid
basedir = /opt/mysql-5.6.10
datadir = /opt/mysql-5.6.10/data
log_error = /opt/mysql-5.6.10/mysql1_error.log
user = mysql
[mysqld2]
socket = /tmp/mysql2.sock
port = 3307
pid-file = /tmp/mysql2.pid
basedir = /opt/mysql-5.6.10
datadir = /opt/mysql-5.6.10/data2
log_error = /opt/mysql-5.6.10/mysql2_error.log
user = mysql
[mysqld3]
socket = /tmp/mysql3.sock
port = 3308
pid-file = /tmp/mysql3.pid
basedir = /opt/mysql-5.6.10
datadir = /opt/mysql-5.6.10/data3
log_error = /opt/mysql-5.6.10/mysql3_error.log
user = mysql 上面在 [mysqld_multi] 组下指定了一个用户及其密码。注意,这个用户 groad 并不是系统用户,而是数据库用户。
另外,还建立了 3 个组:[mysql1], [mysql2], [mysql3] ,这 3 个组将对应 3 个服务实例,其中编号 1,2,3 在官方说明手册里称之为 GNR 。
配置完后,检测一下启动是否成功。mysqld_multi 的使用语法如下:mysqld_multi [options] {start|stop|reload|report} [GNR[,GNR] ...] 按照上面的语法,试着启动一下服务器:[root@centos mysql-5.6.10]# ./bin/mysqld_multi --defaults-file=./my.cnf start 1
[root@centos mysql-5.6.10]# ps -ef | grep "mysql"
root 8677 1 0 23:13 pts/1 00:00:00 /bin/sh /opt/mysql-5.6.10/bin/mysqld_safe --socket=/tmp/mysql1.sock --port=3306 --pid-file=/tmp/mysql2.pid --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data --log_error=/opt/mysql-5.6.10/mysql1_error.log --user=mysql
mysql 8834 8677 17 23:13 pts/1 00:00:00 /opt/mysql-5.6.10/bin/mysqld --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data --plugin-dir=/opt/mysql-5.6.10/lib/plugin --user=mysql --log-error=/opt/mysql-5.6.10/mysql1_error.log --pid-file=/tmp/mysql2.pid --socket=/tmp/mysql1.sock --port=3306
root 8858 7975 0 23:14 pts/1 00:00:00 grep mysql 可见启动是成功的。由上面的输出信息还可以看到,是 root 的首先执行了 mysql_safe ,然后再以 mysql 这个用户调用了 mysqld 这个程序;这和 my.cnf 里 [mysqld_multi] 组里配置的 mysqld = /opt/mysql-5.6.10/bin/mysqld_safe 是对应的。
同样,可以再启动监听在 3307 和 3308 端口的服务实例:# ./bin/mysqld_multi --defaults-file=./my.cnf start 2
# ./bin/mysqld_multi --defaults-file=./my.cnf start 3
通过检查 /tmp 下生成的 socket 文件也能看到启动成功:
现在使用客户端通过 socket 文件进行登录:[root@centos mysql-5.6.10]# mysql -S /tmp/mysql1.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.10 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
[root@centos mysql-5.6.10]# mysql -S /tmp/mysql2.sock
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.10 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> 这些登录都是成功的。
那如何关闭这些服务器呢?
在上面所配置的 my.cnf 文件的 [mysqld_multi] 组里可以看到,mysqld = /opt/mysql-5.6.10/bin/mysqld_safe 这一行所指定的 mysqld_safe 是负责启动的,下一行 mysqladmin = /opt/mysql-5.6.10/bin/mysqladmin 里指定的 mysqladmin 则是负责关闭和打印服务器状态的,并且关闭时还需要指定的用户,即 groad 。
如果直接执行 ./bin/mysqld_multi --defaults-file=./my.cnf stop 1 语句能否将数据库关闭呢:可以来验证一下:[root@centos mysql-5.6.10]# ./bin/mysqld_multi --defaults-file=./my.cnf stop 1
[root@centos mysql-5.6.10]# ps -ef |grep "3306"
root 2116 1 0 Mar05 pts/0 00:00:00 /bin/sh /opt/mysql-5.6.10/bin/mysqld_safe --socket=/tmp/mysql1.sock --port=3306 --pid-file=/tmp/mysql1.pid --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data --log_error=/opt/mysql-5.6.10/mysql1_error.log --user=mysql
mysql 2271 2116 0 Mar05 pts/0 00:00:00 /opt/mysql-5.6.10/bin/mysqld --basedir=/opt/mysql-5.6.10 --datadir=/opt/mysql-5.6.10/data --plugin-dir=/opt/mysql-5.6.10/lib/plugin --user=mysql --log-error=/opt/mysql-5.6.10/mysql1_error.log --pid-file=/tmp/mysql1.pid --socket=/tmp/mysql1.sock --port=3306
root 2771 2092 0 00:11 pts/0 00:00:00 grep 3306
为什么没法关闭呢?可以看一下相关日志以找到原因。其中,myslqd_multi 所产生的日志存放在 share 目录下,其名称为 mysqld_multi.log ,打开查看可以看到:
由上面可以看到,数据库中并没有 groad 这个用户,因此必须先创建该用户:[root@centos mysql-5.6.10]# mysql -S /tmp/mysql1.sock # 先登录 mysql1 这个服务器实例
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.10 Source distribution
Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>grant shutdown on *.* to 'groad'@'localhost' identified by '123456'; #注意一定要给出 my.cnf 文件里给出的密码
Query OK, 0 rows affected (0.00 sec) 好,现在用上面的 groad 用户关闭一下数据库:[root@centos mysql-5.6.10]# ./bin/mysqld_multi --defaults-file=./my.cnf stop 1
[root@centos mysql-5.6.10]# ps -ef |grep "3306"
root 2858 2092 0 00:39 pts/0 00:00:00 grep 3306 这下关掉了,如果查看 /tmp 目录,还可以发现 mysql1.sock 文件也被删除。同样的方法关掉其它的两个服务实例。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|