0

0

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

php中文网

php中文网

发布时间:2016-06-07 16:54:47

|

1131人浏览过

|

来源于php中文网

原创

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

当一台机器上需要运行多个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。这里需要注意的是数据文件目录,每个服务器要有自己的数据目录,在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]这个组,等以后再深入探究下吧。

SmartB2B行业电子商务
SmartB2B行业电子商务

SmartB2B 是一款基于PHP、MySQL、Smarty的B2B行业电子商务网站管理系统,系统提供了供求模型、企业模型、产品模型、人才招聘模型、资讯模型等模块,适用于想在行业里取得领先地位的企业快速假设B2B网站,可以运行于Linux与Windows等多重服务器环境,安装方便,使用灵活。 系统使用当前流行的PHP语言开发,以MySQL为数据库,采用B/S架构,MVC模式开发。融入了模型化、模板

下载

使用"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脚本吧 ^_^

linux

相关专题

更多
php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

php网站源码教程大全
php网站源码教程大全

本专题整合了php网站源码相关教程,阅读专题下面的文章了解更多详细内容。

4

2025.12.31

视频文件格式
视频文件格式

本专题整合了视频文件格式相关内容,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

不受国内限制的浏览器大全
不受国内限制的浏览器大全

想找真正自由、无限制的上网体验?本合集精选2025年最开放、隐私强、访问无阻的浏览器App,涵盖Tor、Brave、Via、X浏览器、Mullvad等高自由度工具。支持自定义搜索引擎、广告拦截、隐身模式及全球网站无障碍访问,部分更具备防追踪、去谷歌化、双内核切换等高级功能。无论日常浏览、隐私保护还是突破地域限制,总有一款适合你!

7

2025.12.31

出现404解决方法大全
出现404解决方法大全

本专题整合了404错误解决方法大全,阅读专题下面的文章了解更多详细内容。

42

2025.12.31

html5怎么播放视频
html5怎么播放视频

想让网页流畅播放视频?本合集详解HTML5视频播放核心方法!涵盖<video>标签基础用法、多格式兼容(MP4/WebM/OGV)、自定义播放控件、响应式适配及常见浏览器兼容问题解决方案。无需插件,纯前端实现高清视频嵌入,助你快速打造现代化网页视频体验。

4

2025.12.31

关闭win10系统自动更新教程大全
关闭win10系统自动更新教程大全

本专题整合了关闭win10系统自动更新教程大全,阅读专题下面的文章了解更多详细内容。

3

2025.12.31

阻止电脑自动安装软件教程
阻止电脑自动安装软件教程

本专题整合了阻止电脑自动安装软件教程,阅读专题下面的文章了解更多详细教程。

3

2025.12.31

html5怎么使用
html5怎么使用

想快速上手HTML5开发?本合集为你整理最实用的HTML5使用指南!涵盖HTML5基础语法、主流框架(如Bootstrap、Vue、React)集成方法,以及无需安装、直接在线编辑运行的平台推荐(如CodePen、JSFiddle)。无论你是新手还是进阶开发者,都能轻松掌握HTML5网页制作、响应式布局与交互功能开发,零配置开启高效前端编程之旅!

2

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
MySQL 教程
MySQL 教程

共48课时 | 1.5万人学习

MySQL 初学入门(mosh老师)
MySQL 初学入门(mosh老师)

共3课时 | 0.3万人学习

简单聊聊mysql8与网络通信
简单聊聊mysql8与网络通信

共1课时 | 778人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号