文章目录
前言
- MySQL的进程间的关系是怎样的?
- MySQL配置文件各参数的含义?
- 配置文件和进程间又有什么关系呢?
- MySQL中通信方式又是怎么的呢?
带着这几个问题,我们一起来探讨探讨!
MySQL进程间的关系
首先,我们先来看看MySQL中有哪些进程
再用pstree看看他们之间的关系
可以发现mysql_safe是mysqld的父进程,mysqld下又起了很多的mysqld线程
mysqld进程
是mysql的核心程序,用于管理mysql的数据库文件以及用户的请求操作。mysqld可以读取配置文件中的[mysqld]的部分
mysql_safe进程
- mysqld_safe,其实是一个Shell脚本,这种方式启动除了会加载MySQL配置(如:/etc/my.cnf)中的[mysqld]和[server]组下的参数内容之外,为了兼容老版本,还会加载[safe_mysqld]组下的内容
- 执行脚本mysqld_safe时,脚本中会去调用mysqld启动mysqld和monitor,mysqld两个进程,monitor即监视的意思,这样如果mysql服务挂了,那么mysqld_safe会重新启动mysqld进程
- mysqld_safe是mysqld的父进程,mysqld挂了,会再起一个mysqld进程。
- msyqld_safe挂了,mysqld会变成孤儿进程,这时在杀死mysqld进程,不会在起一个mysqld进程。
配置文件
[root@master mysql]# cat /etc/my.cnf
[mysqld_safe]
[client]
socket=/data/mysql/mysql.sock
[mysqld]
socket=/data/mysql/mysql.sock
port = 3306
open_files_limit = 8192
innodb_buffer_pool_size = 512M
character-set-server=utf8mb4
[mysql]
auto-rehash
prompt=\u@\d \R:\m mysql>
socket=/data/mysql/mysql.sock-----本机mysql和mysqld使用的文件socket通信时的共享文件
socket=/data/mysql/mysql.sock-----指定文件socket共享文件存放的位置
port = 3306-----mysql服务默认的端口号3306
open_files_limit = 8192-----mysql最大能够打开的文件数8192
innodb_buffer_pool_size = 512M-----innodb存储引擎的缓存池的大小
character-set-server=utf8mb4----mysql服务器端使用的字符集为utf8mb4
auto-rehash-----进入mysql敲命令的时候允许自动补齐
prompt=\u@\d \R:\m mysql>-----指定mysql内的显示格式,类似于linux里的第一提示符$PS1
配置文件与进程间的关系
配置文件其实就是给进程传递参数的
[mysqld_safe]为mysql_safe进程传递参数
[client]和[mysql]为mysql传递参数
[mysqld]为mysql传递参数
socket
socket:槽,实现进程与进程之间通信的方式。
类型:文件socket、网络socket
本机内mysql与mysqld进程间的通信–文件socket
实现一台电脑里的不同进程之间通信的文件
注释/etc/my.cnf的[client] socket字段
[client]
#socket=/data/mysql/mysql.sock
退出保存,刷新服务,再次尝试连接
[root@mysql chen]# mysql -uroot -p"Sanchuang123#"
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
发现mysql -uroot -p"Sanchuang123#"无法连接上
原因:找不到socket共享文件,连接时会默认加载配置文件/etc/my.cnf,找不到回去/tmp/mysql.sock里去找。
[root@mysql chen]# mysql -uroot -p"Sanchuang123#" -S /data/mysql/mysql.sock
mysql.sock mysql.sock.lock
-S 指定socket共享文件的位置,又能连接上了
总结
说明本机mysql与mysqld进程间采用文件socket的方式进行通信,首先mysql进程会读取配置文件里的[client]字段,如果未发现共享文件,则无法进行通信
-S 选项能够告诉mysql进程文件socket的位置,指定位置后,就能够正常通信了!
不同ip地址主机间的通信–网络socket
格式:ip+port 如:192.168.10.130:3306
实现不同ip地址主机之间的通信的
网络socket实现linux间通信
我们想让mysql2连接到mysql1上去,能否成功呢?
[root@mysql2 ~]# mysql -uroot -p'Sanchuang123#' -h 192.168.31.153
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1130 (HY000): Host '192.168.31.111' is not allowed to connect to this MySQL server
为什么无法连接上?
root@localhost -->root用户只能在本机登录
因为在mysql中默认root用户只允许本机登录,root用户就好像是一个土皇帝一样!不允许其他ip地址远程登录root用户
如何连接上?
1.服务端创建用户,并授权用户
root@chen 11:44 mysql>create user 'felix'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
felix @‘%’表示可以从任意ip地址连接到felix用户
create user 创建用户
identified by 创建密码
root@chen 11:45 mysql>grant all on *.* to 'felix'@'%';
grant 是mysql里的授权的命令
all 代表授予所有的权限 select insert update delete等
第一个*表示库,第二个代表表
to ‘felix’@‘%’ 给具体的用户
2.客户机连接服务端
[root@mysql2 ~]# mysql -ufelix -p"123456" -h 192.168.31.153
-h 连接服务器端的ip地址
-P 3306指定连接端口号,不指定-p则默认为3306
3.服务器端查看有哪些用户连接过来了
root@chen 11:50 mysql>show processlist; #查看有哪些人连接到mysql里了
+----+-------+----------------------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------+----------------------+------+---------+------+----------+------------------+
| 6 | root | localhost | chen | Query | 0 | starting | show processlist |
| 7 | felix | 192.168.31.111:40770 | NULL | Sleep | 911 | | NULL |
+----+-------+----------------------+------+---------+------+----------+------------------+
网络socket实现linux和windows间通信
工具:
SQL yog
SQL主机地址:需要远程连接服务器的ip地址
用户名:远程主机授权的用户felix,默认是不能登录root用户的哦!
密码:授权的密码
端口号:默认3306
连接成功!
感谢读者的阅读,希望对您有帮助!