05_MySQL笔记-配置文件-连接方式-密码破解-存储引擎-SQL语句分类

本文详细介绍了MySQL的配置文件、连接方式、密码破解方法以及存储引擎。重点讲解了如何通过修改配置文件实现socket文件路径的指定,以及如何使用grant命令进行远程访问授权。此外,还阐述了SQL语句的基础知识,包括DDL、DML和DQL,并探讨了MySQL的存储引擎如InnoDB和MyISAM的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


个人博客
https://blog.youkuaiyun.com/cPen_web


MySQL的配置文件

mysql的配置文件:/etc/my.cnf
	配置文件的作用:给进程传递参数
[root@cPen_aliyun mysql]# vim /etc/my.cnf 
[mysqld_safe]							#注:指定mysqld_safe进程的配置 (传参)
#需要创建mkdir /data/mysql 目录,然后使用命令chmod mysql:mysql /data/mysql
#因为mysql进程需要往/data/mysql目录里写东西,需要授权,不然不能往目录下写日志

[client]								#注:所有的客户端连接过来加载的配置 (传参)
socket=/data/mysql/mysql.sock				#注:指定socket文件路径,方便客户端连接找到

[mysqld]								#注:mysqld是服务器端的配置 (传参)
log-error=/data/mysql/mysql.log				#注:指定mysql的日志文件的路径
socket=/data/mysql/mysql.sock				#注:socket文件路径(进程和进程之间通信的文件)
port = 3306									#注:port指定端口号
open_files_limit = 8192						#注:指定mysql进程可以打开的文件数量,需要在操作系统里允许进程打开更多的文件
innodb_buffer_pool_size = 512M				#注:指定缓存池的大小,提升数据性能的参数,最大可以达到物理内存的80%
#user=mysql
#skip-grant-tables							#注:破解密码用

[mysql]									#注:对mysql命令执行的配置
auto-rehash									#注:auto-rehash 支持tab键补齐
prompt=\u@\d \R:\m  mysql>					#注:提示符

#注:修改配置文件后,需要刷新mysql的服务  service mysqld restart
prompt=\u@\d \R:\m  mysql>

\u			代表登录的用户 user
@			是分隔符
\d			当前所在的数据库的名字
\R:\m		当前linux系统里的时间
 mysql>		固定的内容
socket文件:是mysqld和mysql这个进程之间通信的文件
show variables;	在mysql查看mysqld这个软件里有哪些变量(参数)

#示例:查看mysql里所有的变量
root@(none) 16:29  mysql>show variables;
[root@mysql_compile test]# mysql -uroot -p'Sanchuang123#' -e "show variables"	#注:非交互式

#示例:统计有多少变量
[root@mysql_compile test]# mysql -uroot -p'Sanchuang123#' -e "show variables"|wc -l
517																				#注:500多个变量

示例:让rpm安装的mysql也有提示符

[root@cPen ~]# vim /etc/my.cnf
[mysql]
auto-rehash									#注:auto-rehash 支持tab键补齐
prompt=\u@\d \R:\m  mysql>					#注:提示符

#注:mysql是客户端的命令,不需要重启服务区刷新配置文件
[root@cPen ~]# mysql -uroot -p'Sanchuang123#'
root@(none) 21:24  mysql>
[root@cPen ~]# vim /etc/my.cnf
[client]
socket=/data/mysql/mysql.sock

#注:对客户端的配置
#注:socket是用来指定socket文件的路径,方便客户端连接找到
	socket 套接字、槽 --> 连接2个东西的接头
Linux里一切皆文件
	mysql里的库,本质上其实是一个文件夹
	库里的表,其实就是文件 --> 才是真正存放数据的地方
root@(none) 16:54  mysql>use mysql;							#注:使用mysql --> 切换到mysql库
root@mysql 16:54  mysql>create database sanchuang;			#注:建库
root@mysql 16:59  mysql>use sanchuang 
root@sanchuang 16:59  mysql>create table student(id int);	#注:建表

[root@mysql_compile ~]# cd /data/mysql/						#注:数据目录里
[root@mysql_compile mysql]# ls |grep sanchuang				#注:有sanchuang文件夹
sanchuang
[root@mysql_compile mysql]# cd sanchuang/
[root@mysql_compile sanchuang]# ls |grep student			#注:有student文件
student.frm
student.ibd

DBMS

DBMS:database manager system 数据库管理系统
	管理数据的软件 database manager system
	mysql就是一个DBMS

dmbs

数据可以存放在哪里?
	1 .文件 --> 普通的文本文件、excel表格
	2 .数据库
在mysql里一个库其实是一个文件夹
	库里的表,其实就是一个文件 --> 才是真正存放数据的地方
为什么需要使用专业的数据库软件来管理数据?
好处:
	1 .数据量可以无限大
	2 .查找非常方便
	3 .多种程序都可以去同一个地方访问数据 --> 数据的统一管理和保存,不区分程序了

数据的核心功能:存储数据

数据库给谁用的?
	1 .开发人员 --> 需要存储数据
	2 .给需要存储数据的人用的
root用户不能远程连;要想远程连需要授权一个用户

root@(none) 20:06  mysql>grant all on *.* to 'cPen'@'%' identified by 'Sanchuang123#';		#注:授权
如何知道mysql数据目录在哪?
	看进程;看配置文件

[root@mysql_compile ~]# ps aux|grep mysql
--datadir=/data/mysql
[root@mysql_compile ~]# vim /etc/my.cnf

mysql里一个库其实是一个文件夹
库里的表,其实就是一个文件 --> 才是真正存放数据的地方

CREATE DATABASE nongda;
CREATE TABLE student(id INT,NAME VARCHAR(20));

[root@mysql_compile sanchuang]# cd /data/mysql/			#注:数据目录下
[root@mysql_compile mysql]# cd nongda/
[root@mysql_compile nongda]# ls
db.opt  student.frm  student.ibd
#注:vim编辑会乱码

firewalld和selinux关闭

service方式去停止服务,是centos6或者centos5里常用的方法
centos7和centos8新式用法:systemctl	
	systemctl --> system control 系统的服务的控制
	disable	禁用
	enable	开启 --> 使什么能够使用
===============================================================================
#示例:立马停止firewalld服务 --> 立马关闭防火墙服务 --> 影响本次
[root@mysql_compile ~]# service firewalld stop
[root@mysql_compile ~]# systemctl stop firewalld

---------------------------------------------------------------------------------------------------------------------------------
#示例:设置firewalld开机不要启动 --> 下次开机启动的时候,不启动这个服务 --> 影响下次,不影响本次
[root@mysql_compile ~]# systemctl disable firewalld

===============================================================================
[root@mysql_compile ~]# service firewalld stop			#注:临时关闭firewalld服务
Redirecting to /bin/systemctl stop firewalld.service	#注:Redirect重定向

[root@mysql_compile ~]# systemctl disable firewalld		#注:设置firewalld开机不要启动

selinux

selinux 是linux下的安全措施机制,用来保护linux系统的安全。相当于另外一个安全工具
	secure linux  安全的linux

/etc/selinux/config  selinux的配置文件
[root@mysql_compile ~]# getenforce 						#注:查看selinux安全策略是否开启
Permissive
[root@mysql_compile ~]# setenforce 0					#注:设置selinux的安全策略不要强制执行,只是给予提醒

Enforcing		(默认)表示selinux是强制开启的,linux里的进程在访问文件的时候,会收到selinux策略的影响
Permissive	表示selinux是不强制开启,只是记录下与selinux相关的行为,但是不会制止
Disabled		表示selinux是关闭的

[root@mysql_compile ~]# vim /etc/selinux/config			#注:selinux的配置文件
#     enforcing - SELinux security policy is enforced.	#注:默认
#     permissive - SELinux prints warnings instead of enforcing.
#     disabled - No SELinux policy is loaded.

在实际的工作中selinux安全机制都是关闭,很少开启

关闭selinux的方法

1 .临时关闭
[root@mysql_compile ~]# setenforce 0
2 .永久关闭
[root@mysql_compile ~]# vim /etc/selinux/config 
SELINUX=disabled

mysqld服务 --> mysqld和mysqld_safe进程 --> 3306端口

[root@mysql_compile ~]# service mysqld stop				#注:关掉服务
#注:服务关掉后,就没有mysqld的进程了,也不会开放端口 (无进程 无端口)

[root@mysql_compile ~]# 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 '/data/mysql/mysql.sock' (2)

进程和进程之间通信的方式

1 .管道 pipe
	[root@mysql_compile ~]# cat /etc/passwd|grep cPen
2 .socket --> 套接字
	文件socket:是实现一台电脑里的不同进程之间通信的文件 --> 具体的某个文件
	/data/mysql/mysql.sock
	[root@mysql_compile ~]# ll /data/mysql/mysql.sock
	srwxrwxrwx 1 mysql mysql 0 2月  11 21:48 /data/mysql/mysql.sock		#注:s socket文件

	网络socket:ip + port
		网络中通过ip地址找到对方
		是实现不同的电脑之间的不同的进程之间的通信的
3 .共享内存
4 .信号
	[root@mysql_compile ~]# kill -9 1234
5 .队列
6 .信号量 -->

MySQL的连接方式

MySQL的连接方式:文件socket  网络socket
socket文件一定要防止启动mysqld进程的用户具有写权限的目录里,推荐:数据目录或者/tmp
	名字可以自己定义
	mysql这个命令在执行的时候,会去读取/etc/my.cnf里的client部分的配置,这样就知道了socket文件的路径,然后直接去访问
配置文件/etc/my.cnf	
[root@mysql_compile ~]# mysql -uroot -p'Sanchuang123#'	#注:默认采用文件socket的方式去连接	

客户端mysql进程会加载[client]里的配置,而服务端mysqld进程会读取[mysqld]里的配置;所以里面的socket文件需要一样
[client]
socket=/data/mysql/mysql.sock
[mysqld]
socket=/data/mysql/mysql.sock
socket=/data/mysql/mysql.sock							#注:该配置会影响上面的本地连接
[client]和[mysqld]里的socket的路径需要一样
socket文件的名字,可以自己定义

如果在/etc/my.cnf里没有client的配置,默认情况下mysql这个命令会到/tmp/mysql.sock去找socket文件

#示例:-S 是指定socket文件的路径
[root@mysql_compile ~]# mysql -S /data/mysql/mysql.sock -uroot -p'Sanchuang123#'
root@(none) 00:29  mysql>
#示例:查看谁连接到了mysql里 --> 类似于linux的w
show processlist;
root@(none) 00:38  mysql>show processlist;
+----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host      | db   | Command | Time | State    | Info             |
+----+------+-----------+------+---------+------+----------+------------------+
|  7 | root | localhost | NULL | Query   |    0 | starting | show processlist |
+----+------+-----------+------+---------+------+----------+------------------+
1 row in set (0.00 sec)
-h		指定主机 (名字或者ip)  host
-P	指定端口号  port
-p		指定密码
-u		指定用户  user
-S	指定socket文件的路径  socket
#示例:mysql这个命令使用-h也可以访问远程的mysql服务器	(使用网络socket连接)
[root@mysql_compile ~]# mysql -h 192.168.1.5 -ucPen -p'Sanchuang123#'
[root@mysql_compile ~]# mysql -h 192.168.1.5 -ucPen -p'Sanchuang123#' -P 3309
#示例:可以连接到本地,也使用网络socket
[root@mysql_compile ~]# mysql -h 127.0.0.1 -ucPen -p'Sanchuang123#'
访问mysqld的两条路,是否是同时开启的?
	答:是的,都开启
	关键点是mysql这个客户端命令你想使用那种方式登录?
	文件socket和网络socket
从windows里不能连接到linux里的mysql,如何解决?如果判断故障?

1 .windows的ip设置问题 --> windows的网络问题
	ping linux服务器的ip地址 检查网络是否通畅
	linux服务器的网络问题
2 .linux里的防火墙是否开启
	iptables -L
	service firewalld stop
3 .检查下mysql服务是否开启
	ps aux|grep mysqld
4 .检查下端口号是否修改
	netstat -anplut|grep mysqld
5 .连接的用户是否有授权
	grant 
6 .云服务器的安全组 --> 使用的是云服务器
mysql服务启动不了,如何解决?

1 .看mysql的配置文件,是否错误的配置
2 .日志 --> 有用的信息 --> 找ERROR提醒
3 .百度、google、问同事朋友

service mysql restart

[root@mysql_compile ~]# service mysql restart
restart 重启 --> 先关闭服务,然后再启动服务
[root@mysql_compile ~]# service mysql stop
[root@mysql_compile ~]# service mysql start
mysql在编译安装的时候指定过
1 .安装目录
2 .数据目录  /data/mysql --> mysql这个启动用户必须要有写的权限

SQL语句
建库 --> 建表 --> 插入数据 --> 查询

#注:查看库
root@(none) 01:01  mysql>show databases;
#注:创建库
root@(none) 01:01  mysql>create database chenpeng;
#注:切换库
root@(none) 01:02  mysql>use chenpeng
#注:查看库里有哪些表
root@chenpeng 01:03  mysql>show tables;
#注:创建表student,里面有2个字段,一个是id列,一个是name列 int 整型 和varchar 可变长的字符类型是数据类型
root@chenpeng 01:04  mysql>create table student(id int,name varchar(20));
#注:插入数据
root@chenpeng 01:05  mysql>insert into student(id,name) values(1,'cPen');
root@chenpeng 01:07  mysql>insert into student(id,name) values(2,'chen');
#注:查询student表里所有的行所有的字段(列)的信息
root@chenpeng 01:07  mysql>select * from student;
+------+------+
| id   | name |
+------+------+
|    1 | cPen |
|    2 | chen |
+------+------+
2 rows in set (0.00 sec)

select	查询
*		所有的字段 --> id,name
from	来自哪个表
student	表名
mysql启动不了,如何去解决?
	1 .检查配置文件,是否有错误
		配置文件里的配置必须要按照mysql里规定的来吗?难道就不可以随便输入吗?
	2 .看日志
如何判断mysql服务是否启动?
	1 .看进程
	2 .看端口号

如何知道安装的MySQL的版本?多少种?(4种)

[root@mysql_compile ~]# mysql -V
mysql  Ver 14.14 Distrib 5.7.32, for Linux (x86_64) using  EditLine wrapper
[root@mysql_compile ~]# mysql -uroot -p'Sanchuang123#'		#注:登录mysql时
Server version: 5.7.32 Source distribution
root@(none) 11:44  mysql>select version();				#注:执行version函数
root@(none) 11:45  mysql>show variables like "version";		#注:查询mysql里的version变量的值
root@(none) 11:46  mysql>show variables like "%version%";	#注:% 任意字符
其他电脑的用户连接到本机的mysql里,不能连接过来?
	1 .网络是否畅通
	2 .检查服务器上mysqld进程是否启动,是否启动相应的端口,默认是3306
	3 .检查防火墙是否开启
	4 .是否给连接的用户授权
#示例:mysql里执行shell命令
root@(none) 12:16  mysql>system ip add				#注:在mysql内部执行linux的命令

看连接的错误提醒,判断mysql的问题

[root@mysql_compile ~]# mysql -uroot -p'123#'
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
原因:Access denied  用户名和密码错误

[root@mysql_compile ~]# mysql -uroot -p'Sanchuang123#'
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/data/mysql/califeng.sock' (2)
原因:
	1 .mysqld没有启动
	2 .socket文件是否有问题,路径错了

MySQL里密码破解

不同用户
	超级用户root@localhost  只能在本地登录 修改/etc/my.cnf
	其他的普通用户  使用超级用户登录,直接去修改密码
		alter user 'cali'@'%' identified by 'Sanchuang123#';
MySQL里破解密码

===============================================================================
第1步:停止MySQL进程的运行

===============================================================================
第2步:修改配置文件
[root@mysql_compile ~]# vim /etc/my.cnf
[mysqld]
#user=mysql								#注:指定启动MySQL进程的用户
skip-grant-tables  						#注:跳过密码验证
#validate-password=off					#注:需要禁用密码复杂性策略

===============================================================================
第3步:启动MySQL进程

===============================================================================
第4步:登录MySQL,不接密码
[root@mysql_compile ~]# mysql -uroot -p
root@(none) 12:33  mysql>

===============================================================================
第5步:修改密码
root@(none) 12:36  mysql>alter user 'root@localhost' identified by 'Sanchuang123#';
ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement
#注:statement 语句
root@(none) 12:36  mysql>flush privileges;	#注:刷新权限
#注:刷新权限(会加载原来没有加载的权限表 -->用户名和密码所在的表user等)
root@(none) 12:52  mysql>alter user 'root'@'localhost' identified by 'Sanchuang123#';
root@(none) 12:54  mysql>set password for 'root'@'localhost' = 'Sanchuang123#'===============================================================================
第6步:重新修改mysql的配置文件
[root@mysql_compile ~]# vim /etc/my.cnf
[mysqld]
socket=/data/mysql/mysql.sock
#skip-grant-tables							#注:注释掉

===============================================================================
第7步:刷新服务
[root@mysql_compile ~]# service mysqld restart

===============================================================================
第8步:验证修改密码是否成功
[root@mysql_compile ~]# mysql -uroot -p'Sanchuang123#'
root@(none) 12:59  mysql>

===============================================================================
另外一种方式:
	就是使用其他的管理员账号给别的用户重新设置密码
	可以在SQLyog里操作
	SET PASSWORD FOR 'root'@'localhost' = 'Sanchuang123#';
库在整个linux里是什么?
	是一个一个的文件夹,放在数据目录下
表在整个linux系统里是什么?
	是一个一个的文件
[root@mysql_compile ~]# cd /data/mysql/
[root@mysql_compile mysql]# cd chenpeng/
[root@mysql_compile chenpeng]# ls
db.opt  student.frm  student.ibd
[root@mysql_compile chenpeng]# cat db.opt 
default-character-set=utf8
default-collation=utf8_general_ci

db.opt存放的是库所使用的字符集和字符集对应的排序规则 --> database option  数据库的选项
student.frm是表结构文件,里面是记录这个表里有哪些字段,以及字段的类型 --> frame 架构、结构
	表结构其实就是这个表里有几列,每列的数据类型
		行  row --> 一条记录  record
		列  column  字段  field  一列就是一个字段
		数据类型:整型、字符串、小数
student.ibd是真正存放表里的数据和索引的文件 --> 因为是使用innodb存储引擎存放和读取数据的,innodb data
	一行一行的数据存放在这个文件里的

MySQL的存储引擎

存储引擎:是MySQL里的一个专门负责数据的读取和保存的软件  storage engine
	1 .myisam --> 读写速度快,容易丢失数据
		user.frm  是表结构文件
		user.MYD  是存储数据  data
		user.MYI  是存放索引  index
			索引:是用来查询数据的数据 --> 描述其他数据的数据 --> 加速查询
			select的时候,查找出东西快些,不然后就要全表扫描 全表扫描:就是一行一行的将表里的数据都看一遍

	2 .innodb --> 默认的存储引擎 --> 速度稍微慢,不丢失数据,非常稳定
存储引擎是捆绑到库上还是表上的?
	答:捆绑到表

root@chenpeng 13:35  mysql>show create table student\G;
*************************** 1. row ***************************
       Table: student
Create Table: CREATE TABLE `student` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified

#示例:指定存储引擎

root@chenpeng 13:35  mysql>create table stu(id int,name varchar(20)) engine=myisam;
root@chenpeng 13:43  mysql>show create table stu\G;
*************************** 1. row ***************************
       Table: stu
Create Table: CREATE TABLE `stu` (
  `id` int(11) DEFAULT NULL,
  `name` varchar(20) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

ERROR: 
No query specified
SQL语句
	SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统
数据库软件
	MySQL、oracle、SQL server等这些数据库软件里的SQL语句都是一模一样的呢?
	答:不是都一样,有点个别的差异
	SQL语句也有国际化的标准

SQL语句分类

DDL 数据定义语言
	Data Definition Language
	create drop
DCL 数据控制语言
	Data Control Language
	grant revoke
DML 数据操作语言
	Data Manipulation Language
	增删改查 insert delete update select
DQL 数据查询语言 --> 归到DML
	Data Query Language
	select
---------------------------------------------------------------------------------------------------------------------------------
示例:查看表结构
root@sc mysql>desc t1;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| id    | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+
1 row in set (0.00 sec)

---------------------------------------------------------------------------------------------------------------------------------
示例:删表
root@sc mysql>drop table t1;

---------------------------------------------------------------------------------------------------------------------------------
示例:删库
root@sc mysql>drop database sc;

---------------------------------------------------------------------------------------------------------------------------------
示例:查询命令的使用
root@(none) mysql>help desc;

---------------------------------------------------------------------------------------------------------------------------------
root@chenpeng mysql>create table student(id int,name varchar(20),grade int);	#注:建表

示例:往表里插入数据
root@chenpeng mysql>insert into student(id,name,grade) values(1,'cali',80);
root@chenpeng mysql>insert into student(id,name,grade) values(1,'rose',90);
root@chenpeng mysql>insert into student(grade,id,name) values(96,3,'tom');
	#注:插入student表id、name、grade字段 值
insert into	插入到
student		是表
(grade,id,name)	小圆括号里的是表里的字段,字段的顺序可以随意,但是必须在表里是存在的
values(96,3,'tom')	一条记录,记录里的值要和表里的字段一一对应

---------------------------------------------------------------------------------------------------------------------------------
#示例:select查询语句
root@chenpeng mysql>select id,grade from student;
root@chenpeng mysql>select * from student;
+------+------+-------+
| id   | name | grade |
+------+------+-------+
|    1 | cali |    80 |
|    1 | rose |    90 |
|    3 | tom  |    96 |
+------+------+-------+
3 rows in set (0.00 sec)

select	选择
*		表示所有的字段
from	来自哪里 --> 固定语法
student	表示表的名字

---------------------------------------------------------------------------------------------------------------------------------
#示例:delete删除语句
root@chenpeng mysql>delete from student where name='cali';
root@chenpeng mysql>delete from student where grade='90';
root@chenpeng mysql>delete from student where id=3;
where id=3; 指定条件 id等于3的记录

---------------------------------------------------------------------------------------------------------------------------------
#示例:update修改语句
root@chenpeng mysql>update student set grade=100 where id=3;

---------------------------------------------------------------------------------------------------------------------------------
接下来我们可以对表进行DML操作
	答:增删改查操作

如何知道当前在那个库里?

1 .看提示符
root@chenpeng mysql>
2 .select database();
root@chenpeng mysql>select database();
+------------+
| database() |
+------------+
| chenpeng   |
+------------+
1 row in set (0.00 sec)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mycpen

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值