目录

一、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,验证是否修改成功。

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

好文阅读

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: