1、父子进程
[root@master ~]# ps aux|grep mysql
root 920 0.0 0.0 115588 1808 ? S 08:01 0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/data/mysql --pid-file=/data/mysql/master.pid
mysql 1515 0.2 6.0 1746392 234924 ? Sl 08:01 0:02 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql --datadir=/data/mysql --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=master.err --open-files-limit=8192 --pid-file=/data/mysql/master.pid --socket=/data/mysql/mysql.sock --port=3306
root 15658 0.0 0.0 112664 972 pts/0 S+ 08:20 0:00 grep --color=auto mysql
-
父进程:mysqld_safe——管理mysqld,保证mysqld正常运行;
mysqld_safe被杀死后,mysqld依然存在
mysqld被杀死后,mysqld_safe会重启一个mysqld -
子进程:mysqld——工作进程, 真正对外提供服务;
pstree -p 可以查看进程号
2、配置文件/etc/my.cnf
[mysqld_safe] # 指定mysqld_safe进程的配置
# 需要在mkdir /data/mysql 目录,然后使用命令chown mysql:mysql /data/mysql
# 因为mysql进程需要往/data/mysql目录里写东西,需要权限,不然不能往目录下写日志
[client] # 对客户端的配置
# socket是用来指定socket文件的路径,方便客户端连接找到
socket=/data/mysql/mysql.sock
[mysqld] # mysqld是服务器端的配置
# 指定mysql的日志文件的路径
log-error=/data/mysql/mysql.log
socket=/data/mysql/mysql.sock
port = 3309 #port 指定端口号
open_files_limit = 8192 # mysql参数调优
innodb_buffer_pool_size = 256M # mysql参数调优,innodb mysql存储引擎,负责mysql内存里面的数据存到磁盘,磁盘数据读到内存
character-set-server=utf8 # 指明mysql服务器的server字符集是utf8
#open_files_limit 指定mysql进程可以打开的文件数量,需要在操作系统里允许进程打开更多的文件
#使用ulimit -n 65535
#innodb_buffer_pool_size 指定缓存池的大小,提升数据性能的参数,最大可以达到物理内存的80%
#破解密码用
#user=mysql
#skip-grant-tables 指定mysqld的socket文件所在的路径,/data/mysql目录一定要先存在。
[mysql] # 对mysql命令执行的配置
auto-rehash
prompt=\\u@\\d \\R:\\m mysql>
#auto-rehash 支持tab键补齐
#prompt 登录进去后的提示符
root@(none) 08:35 mysql>show variables like '%innodb%'; # 以表格形式显示
root@(none) 08:36 mysql>show variables ; # 查看MySQL里面的阿所有参数
root@(none) 08:37 mysql>show variables\G; # 以文本形式显示
3、socket连接
3.1 网络socket
socket是实现不同的电脑之间的不同的进程之间的通信的
网络socket是ip+port --》格式ip:port (192.168.0.163:3309)
网络中通过ip地址找到对方
[root@mysql-2 ~]# mysql -h 192.168.0.163 -P3309 -ucali -p'Sanchuang1234#'
-h 指定主机名(ip) host
-P port 端口 (大写)
-p 密码
3.2 文件socket
是实现一台电脑里的不同进程之间通信的文件
在my.cnf主配置文件里打开下面的配置,在使用mysql客户端命令连接的时候,就不需要接-S指定socket文件的路径了
[client]
socket=/data/mysql/mysql.sock # 指明在本机连接的时候默认/data/mysql/mysql.sock连接
# 客户端程序mysql连接过来的时候,访问的socket文件是/data/mysql/mysql.sock
# [client]和[mysqld]指定的socket要一样
# 不一样的时候只能通过命名指明
mysql -uroot -p'Sanchuang1234#' -S /var/lib/mysql/mysql.sock # 指定访问的socket路径
4、密码破解
本质上是修改mysql库里的user表里的对应的用户的auth_string
超级用户
方法一:
停止mysql服务–》中断业务
只能在本地登录,修改/etc/my.cnf
[mysqld]
skip-grant-tables
# 用mysql -uroot -p 可以直接登录,越过授权表
sc@(none) 09:11 mysql>flush privileges; # 刷新权限(会加载原来没有加载的权限表)
Query OK, 0 rows affected (0.00 sec)
# 修改root用户密码
sc@(none) 09:11 mysql>alter user 'root'@'localhost' identified by '123456';
最后还要还原配置文件,注释掉skip-grant-tables一行,登录数据库后刷新权限
方法二:
就是使用其他的管理员账号给别的用户重新设置密码
可以在SQLyog里操作
SET PASSWORD FOR 'root'@'localhost' = 'Sanchuang123#';
alter user 'root'@'localhost' identified by xxx;
其他的普通用户
MariaDB [(none)]> create user 'sc'@'%' identified by 'sc123456';
# 创建用户 用户名@从哪里远程登录(localhost 表示只允许本机登录、% 所有主机) 通过密码sc123456登录
Query OK, 0 rows affected (0.01 sec)
MariaDB [(none)]> grant all on *.* to 'sc'@'%';
# 授予所有库.所有表的 所有权限给 sc用户 从任意主机登录过来
Query OK, 0 rows affected (0.00 sec)
mysql库里面有个user表,存放用户名和密码相关信息。
sc用户拥有了所有全权限(除了grant),但是sc用户密码忘记了。
root@mysql 09:10 mysql>alter user 'sc'@'%' identified by '123456';
Query OK, 0 rows affected (0.00 sec)
[root@master ~]# mysql -usc -p'123456' # 既可以登录
5、SQL语言类型
- DDL:data definition language
数据定义语言(建表、删表、修改表) - DML:Data Manipulation Language
数据操纵语言(增删改表数据) - DCL:Data Control Language
数据控制语言(GRANT授权、REVOKE取消权限) - DQL:Data Query Language
数据查询语言(查表)
6、字符集
文本类型的数据会牵涉到字符集
root@(none) 01:14 mysql>create database hejin; # 创建数据库
[root@localhost mysql]# cd hejin # /data/mysql下面产生一个hejin的文件夹,一个数据库就是一个文件夹
[root@localhost hejin]# ls
db.opt # 存放的是这个库的字符集校对规则(很多的字符集合)
[root@localhost hejin]# cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci
root@(none) 01:31 mysql>show character set; # 查看mysql支持哪些字符集
root@(none) 01:31 mysql>show variables like '%character%'; # 查看正在用的字符集
root@(none) 01:35 mysql>show create database hejin; # 查看当时的建库语句
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| hejin | CREATE DATABASE `hejin` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
root@(none) 01:35 mysql>show create table student; # 查看当时的建表语句
字符集继承关系:服务器——》库——》表——》列
列继承表的字符集、表继承库的字符集、库继承服务器的字符集,所以在建库的时候一定要指明字符集
sc@(none) 09:27 mysql>create database hejin; # 建库默认字符集为 utf8,因为/etc/my.cnf里面指定了字符集
Query OK, 1 row affected (0.00 sec)
# 删库drop database hejin;
sc@(none) 10:26 mysql>show create database hejin;
+----------+----------------------------------------------------------------+
| Database | Create Database |
+----------+----------------------------------------------------------------+
| hejin | CREATE DATABASE `hejin` /*!40100 DEFAULT CHARACTER SET utf8 */ |
+----------+----------------------------------------------------------------+
1 row in set (0.00 sec)
sc@(none) 10:30 mysql>show variables like '%character%';
+--------------------------+----------------------------------+
| Variable_name | Value |
+--------------------------+----------------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/mysql/share/charsets/ |
+--------------------------+----------------------------------+