目录
一、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,验证是否修改成功。
上图所示,就是我们成功修改密码啦 !!
好文阅读
发表评论