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

当一台机器上需要运行多个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]这个组,等以后再深入探究下吧。

使用”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

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1961801.html

(0)
上一篇 2025年2月23日 05:40:00
下一篇 2025年2月23日 05:40:17

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 记录 慢SQL优化实战

    sql教程介绍sql慢查询的优化 推荐(免费):sql教程 一、存在问题 经过sql慢查询的优化,我们系统中发现了以下几种类型的问题: 1.未建索引:整张表没有建索引;2.索引未命中:有索引,但是部分查询条件下索引未命中;3.搜索了额外的非…

    2025年2月23日 数据库
    100
  • 解决 SQL 问题绝对能让你对 MySQL 的理解更进一步!

    sql教程栏目介绍如何更有效理解mysql 推荐(免费):SQL教程 属性表(product_props)结构如下 数据量800W以上 字段名 类型 说明 idintidpn_idint属性类型pv_idint属性值product_idin…

    2025年2月23日 数据库
    100
  • SQL数据库连接不上怎么办

    解决方法: 1、检查tcp/ip是否启用,并注意端口号;2、检查网络问题;3、利用telnet命令,检查端口情况;4、检查服务器项,用户名密码是否正确;5、检查服务器是否允许远程连接;6、启动两种身份验证模式。 本教程操作环境:window…

    2025年2月23日 数据库
    100
  • 因为一条sql语句产生了自我怀疑!

     故事是这样开始的 在一个月黑风高的夜晚 现场报过来,本该打到新服务的流量,又走到了老服务,老服务的功能不健全,很可能会让现场的用户不能支付。 需要说明一点的是,任何一个从老服务改造到新服务的时候,都不是完全把流量切过去,都需要经过一点时间…

    2025年2月23日
    100
  • 面试题:在日常工作中怎么做MySQL优化的?

    前言 MySQL常见的优化手段分为下面几个方面: SQL优化、设计优化,硬件优化等,其中每个大的方向中又包含多个小的优化点 下面我们具体来看看 SQL优化 此优化方案指的是通过优化 SQL 语句以及索引来提高 MySQL 数据库的运行效率,…

    2025年2月23日
    100
  • sql中不等于0怎么写

    在 SQL 中,判断一个值是否不等于 0,可以使用不等号运算符 !=,语法为:expression != 0。例如,查找所有不等于 0 的记录时,可以使用 SELECT * FROM table_name WHERE column_name…

    2025年2月23日
    100
  • win7怎么安装mysql数据库

    要在 Windows 7 上安装 MySQL 数据库,请按以下步骤操作:从 MySQL 官网下载适用于您系统架构的安装程序。双击安装程序以启动向导。选择“Custom”安装类型。在“Type and Networking”中选择“Devel…

    2025年2月23日
    100
  • mysql中删除表的语句

    MySQL 中删除表的语句是:DROP TABLE table_name; 它将永久删除表及其数据,注意操作不可逆。此语句不适用于视图或临时表,应分别使用 DROP VIEW 和 DROP TEMPORARY TABLE 语句。 MySQL…

    2025年2月23日
    100
  • mysql中删除一个表的命令

    MySQL 中删除表命令:DROP TABLE。语法:DROP TABLE table_name。用法:1. 连接数据库;2. 输入命令:DROP TABLE table_name;3. 执行命令。注意:删除前需删除表中数据;删除后数据将永…

    2025年2月23日
    100
  • unique在mysql中是什么意思

    MySQL中的unique约束确保列或列组中的值唯一,防止重复值,通过创建索引实现,可增强数据完整性、查询优化和数据一致性。 unique在MySQL中的含义 unique是MySQL中的一项约束,用于确保表中某一列或一组列中的值是唯一的。…

    2025年2月23日
    100

发表回复

登录后才能评论