Mysql 进程之间的关系 - 配置文件 - socket连接 - 密码破解

目录

一、Mysql中进程之间的关系

首先查看Mysql的进程和端口号

如上图所示,Mysql服务存在两个进程,分别是  mysqld 和 mysqld_safe

那么到底是哪个mysql进程在起作用呢?

​编辑如果当我们杀死mysqld进程的时候,会不会出现新的mysqld进程呢?

如果当我们杀死mysqld_safe父进程时,会不会影响mysql服务的正常进行呢?

二、Mysql中配置文件的解释

mysql配置文件里的每一项(mysqld_safe、client、mysqld、mysql)都会向mysql server里的进程进行传参,箭头表示传参。

mysql配置参数的查询:

三、Mysql中的socket连接

1、网络socket连接:

2、文件socket连接:

3、网络socket和文件socket简述图: 

四、Mysql的密码破解

1、如果是需要更改超级用户root@localhost的密码呢?

我们可以使用另一个管理员去修改‘root@localhost’,但是我们需要使用超级管理员去登陆mysql,如:mysql -ulpf -p'123456' -h 192.168.2.215 

2、如果是需要修改其他普通用户的密码呢?

3、最后如果我们没有设置管理员,并且需要修改超级用户root的密码,我们应该怎样吗呢。

1、停止mysql服务 --》中断业务

2、修改配置文件

3、启动mysql进程

4、登录mysql,不接密码

5、在mysql内修改密码

6、退出mysql,删除配置文件中添加的skip-grant-tables,然后再次刷新mysql服务,重新登录mysql,验证是否修改成功。


一、Mysql中进程之间的关系

首先查看Mysql的进程和端口号

[root@mysql ~]# ps aux|grep mysqld       #查看进程
root       3701  0.0  0.1  11824  1608 ?        S    19:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/web.pid
mysql      3855  0.0 23.9 1566928 238120 ?      Sl   19:41   0:03 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=web.err --open-files-limit=8192 --pid-file=/data/mysql/web.pid --socket=/data/mysql/mysql.sock --port=3306
root       4109  0.0  0.0 112824   988 pts/3    R+   22:00   0:00 grep --color=auto mysqld
[root@mysql ~]# lsof -i:3306           #查看端口号3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  3855 mysql   20u  IPv6  29788      0t0  TCP *:mysql (LISTEN)
mysqld  3855 mysql   48u  IPv6  31413      0t0  TCP mysql:mysql->192.168.2.5:50577 (ESTABLISHED)
mysqld  3855 mysql   51u  IPv6  31423      0t0  TCP mysql:mysql->192.168.2.5:50595 (ESTABLISHED)
mysqld  3855 mysql   72u  IPv6  31593      0t0  TCP mysql:mysql->192.168.2.215:59666 (ESTABLISHED) 
[root@mysql ~]# netstat -anpult | grep mysqld    #查看mysqld这个服务的端口号
tcp6       0      0 :::3306                 :::*                    LISTEN      3855/mysqld         
tcp6       0      0 192.168.2.149:3306      192.168.2.215:59666     ESTABLISHED 3855/mysqld         
tcp6       0      0 192.168.2.149:3306      192.168.2.5:50595       ESTABLISHED 3855/mysqld         
tcp6       0      0 192.168.2.149:3306      192.168.2.5:50577       ESTABLISHED 3855/mysqld         
[root@mysql ~]# 

如上图所示,Mysql服务存在两个进程,分别是  mysqld 和 mysqld_safe

那么到底是哪个mysql进程在起作用呢?

如上图可知,我们可以通过查看端口号,便可知道真正在起作用的进程是mysqld

而mysqld_safe 是mysqld父进程,mysqld是子进程

我们可以通过pstree -p命令查看所有正在运行中的进程的关系(yum install psmisc -y)

如下图所示,可以知道mysqld_safe 是mysqld父进程,mysqld是子进程

如果当我们杀死mysqld进程的时候,会不会出现新的mysqld进程呢?

如下面所示,当我们kill掉mysqld进程的时候,mysqld_safe父进程会马上重新创建过一个新的mysqld子进程,保障mysql服务持续进行,不会影响mysql的正常服务。

[root@mysql ~]# ps aux|grep mysqld
root       3701  0.0  0.1  11824  1608 ?        S    19:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/web.pid
mysql      3855  0.0 23.9 1566928 238020 ?      Sl   19:41   0:04 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=web.err --open-files-limit=8192 --pid-file=/data/mysql/web.pid --socket=/data/mysql/mysql.sock --port=3306
root       4161  0.0  0.0 112824   988 pts/3    R+   22:20   0:00 grep --color=auto mysqld
[root@mysql ~]# kill -9 3855
[root@mysql ~]# ps aux|grep mysqld
root       3701  0.0  0.1  11828  1640 ?        S    19:41   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/web.pid
mysql      4177 38.0 20.5 1413388 204304 ?      Sl   22:20   0:00 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=web.err --open-files-limit=8192 --pid-file=/data/mysql/web.pid --socket=/data/mysql/mysql.sock --port=3306
root       4207  0.0  0.0 112824   988 pts/3    R+   22:20   0:00 grep --color=auto mysqld
[root@mysql ~]# 

如果当我们杀死mysqld_safe父进程时,会不会影响mysql服务的正常进行呢?

答案是不会,因为对于mysql服务来说,真正干活的是mysqld子进程,杀死mysqld_safe父进程并不会影响mysql正常服务的。

但是当我们再杀死mysqld子进程的时候,那么整个mysql服务都会断开连接,导致服务中断,因为我们没有了mysqld_safe父进程来帮助我们继续创建新的mysqld子进程了。

二、Mysql中配置文件的解释

我们先进入mysql的配置文件/etc/my.cnf文件内部

下面我画一张图方便理解(mysql配置文件和进程之间的关系)

如上图所示:

mysql配置文件里的每一项(mysqld_safe、client、mysqld、mysql)都会向mysql server里的进程进行传参,箭头表示传参。

下面是一些常用配置的解释:

#mysqld_safe 表示对父进程mysqld_safe的配置
[mysqld_safe]


#client 表示对客户端的配置
[client]
#socket 是用来指定socket文件的路径,方便客户端找到文件socket连接
#而且client里和mysqld里指定的socket文件的路径必须一样
socket=/data/mysql/mysql.sock


#mysqld 表示对服务器端的配置
[mysqld]
#log-error=/data/mysql/mysql.log
#表示指定mysql的日志文件
#socket 是用来指定socket文件的路径,方便客户端找到文件socket连接
socket=/data/mysql/mysql.sock
#port  是指定端口号
port = 3306
#open_files_limit 表达的是指定mysql进程可以打开的文件的数量,需要在操作系统里允许进程打开更多的文件
open_files_limit = 8192
#innodb_buffer_pool_size 表示指定缓存池的大小,提升数据性能的参数,越大越好,最大可以达到物理内存的80%
innodb_buffer_pool_size = 512M
#character-set-server 表示指定mysql的字符集是utf8字符集
character-set-server=utf8

#innodb:存储引擎--》负责把mysql内存里的数据存放到磁盘内,同时也负责将磁盘的数据读到内存中,起缓存器的作用,属于mysql的组件


#mysql 表示对mysql客户端工具的配置
[mysql]
auto-rehash
prompt=\u@\d \R:\m  mysql>
#对mysql命令执行的配置
#auto-rehash  表示支持tab健补齐
#prompt  表示登录进去的提示符                    

mysql配置参数的查询:

如果需要mysql全部的参数配置,可以进入mysql后输入show variables\G;,就会跳转出所有的配置参数哦。\G表示以文本的形式展示,不接就表示以表格的形式展示。

mysql的过滤机制:show variables like "innodb" 就会展示出包含innodb的配置参数来

 

三、Mysql中的socket连接

socket连接分为:文件socket连接网络socket连接

1、网络socket连接:

一个socket连接包括一个IP地址和一个端口号,它们唯一标识了一个进程

网络socket连接 在网络中通过IP地址找到对方,再通过端口通信,是实现不同电脑之间的不同进程之间的通信。

ip + port --》例如:192.168.2.215:3308

但是很容易被网络影响(防火墙拦截等)

2、文件socket连接:

它允许不同的进程之间通过文件来进行通信。在这种通信机制中,一个进程可以将数据写入一个文件,而另一个进程则可以从该文件中读取数据。

这种通信方式通常被用于本地进程之间的通信。

如在Unix/Linux系统中,进程之间可以通过文件socket连接来进行进程间通信(IPC)。

文件socket连接的优点是简单易用,不需要复杂的网络配置,但是它的缺点是速度较慢,适用于数据量较小的场景。

我们可以在mysql配置文件里指定socket文件的路径:

socket=/data/mysql/mysql.sock

或者在登录mysql的时候使用: -S 接socket文件路径

3、网络socket和文件socket简述图: 

四、Mysql的密码破解

1、如果是需要更改超级用户root@localhost的密码呢?

我们可以使用另一个管理员去修改‘root@localhost’,但是我们需要使用超级管理员去登陆mysql,如:mysql -ulpf -p'123456' -h 192.168.2.215 

命令:alter user 'root@localhost' identified by '1234567'

如何设置管理员呢:

命令:grant all on *.* to 'lpf'@'%' identified by '123456'

2、如果是需要修改其他普通用户的密码呢?

我们可以通过root用户或者管理员用户登录mysql,再通过如下命令修改普通用户的密码

命令:alter user 'cali'@'%' identified by '12345689'

总而言之,修改用户密码,本质上就是修改mysql数据库里的user表里对应的用户的auth_string。

3、最后如果我们没有设置管理员,并且需要修改超级用户root的密码,我们应该怎样吗呢。

1、停止mysql服务 --》中断业务

2、修改配置文件

加入如下配置,从而跳过密码验证 

3、启动mysql进程

4、登录mysql,不接密码

如上图所示,则为配置成功了,可以不接密码进行登录

5、在mysql内修改密码

 我们先刷新权限(因为刚刚进入mysql的时候我们使用配置文件里的skip-grant-tables,直接跳过了mysql数据库里的user表,因此无法对该表进行密码修改,因此我们需要刷新权限,重新加载user表到mysql里面去)(会刷新原来没有加载的权限表 --》 用户名和密码所在的表user等)

 然后我们在修改root用的密码:

alter user 'root@localhost' identified by '123456'

6、退出mysql,删除配置文件中添加的skip-grant-tables,然后再次刷新mysql服务,重新登录mysql,验证是否修改成功。

上图所示,就是我们成功修改密码啦 !!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值