欢迎光临散文网 会员登陆 & 注册

mysql安装及基本操作

2023-02-18 13:12 作者:bili_39183997178  | 我要投稿

1 清除冲突软件mariadb (如果安装了的话)

rpm  -q  mariadb-server  mariadb

          systemctl  stop  mariadb

          rpm  -e  --nodeps  mariadb  mariadb-server

          rm  -rf  /etc/my.cnf 

          rm  -rf  /var/lib/mysql/*

 2 安装软件mysql 社区开源版软件

        tar  -xf mysql-5.7.17.tar

        yum -y install mysql-community-*.rpm

 3 启动服务并设置开机运行 查看进程和端口

        systemctl  start mysqld

        systemctl  enable mysqld

        netstat  -utnlp  | grep  3306  等效与   ss  -utnlp  | grep  3306

        ps -C mysqld   等效于  ps  aux  |  grep   mysqld

  4 查看连接MySQL服务初始密码

        [root@host50 ~]# grep password  /var/log/mysqld.log | tail -1

2021-12-06T01:47:49.262056Z 1 [Note] A temporary password is generated for root@localhost: p.7jr.uy.aiZ

5 使用初始密码连接服务

[root@host50 ~]# mysql -hlocalhost -uroot -p'p.7jr.uy.aiZ'

 6 修改登录密码(服务强制修改且修改的密码要符合服务要求的复杂度)

mysql>  alter user   root@"localhost" identified by "123qqq...A";

 7 断开连接

mysql> exit;

临时修改密码的复杂度

show variables like "%password%";  查看与密码相关的配置项

mysql> set global validate_password_policy=0;  修改密码等级为0

mysql> set global validate_password_length=6;  修改最小密码长度

永久修改密码策略

vim /etc/my.cnf  (永久配置)把修改 添加到配置文件里 数据库服务重启了 依然有效

[mysqld]

validate_password_policy=0

validate_password_length=6

#破解数据库root密码

 1.vim /etc/my.cnf

[mysqld]

#validate_password_policy=0

#validate_password_length=6

skip-grant-tables  #跳过授权库MySQL库启动服务 作用连接服务不需要输入密码

mysql> flush privileges;   使修改配置生效

2. 线上破解密码

   

步骤如下:

                            1  拷贝其他数据库服务器 管理员root用户能正常连接数据库服务的mysql库 覆盖本机的mysql库

                                   !!!!mysql库存放的是 数据库服务器的用户和密码!!! 

                            2  查看mysql服务 父进程的pid

                            3  给mysql服务的父进程发送 SIGHUP信息 (作用重新加载数据库目录下的文件 ,可以重新识别 mysql库里的用户和密码)

                            4  使用破解后的密码登录(密码和root用户能正常登录服务主机的的root密码一样)

    scp -r 192.168.4.51:/var/lib/mysql/mysql  /var/lib/mysql/

[root@host50 ~]# which  pstree || yum  -y install psmisc

[root@host50 ~]# pstree -p | grep mysqld | head  -1

[root@host50 ~]# kill  -SIGHUP  1603

[root@host50 ~]# mysql -hlocalhost -uroot -pNSD2021...a

  mysqladmin  -uroot    -p旧密码   password  新密码


安装图形软件   

在数据库服务器安装图形软件 ,通过连接图形软件,对数据库做管理)

要求:在IP地址192.168.4.50主机安装phpmyadmin软件


步骤一:安装phpmyadmin软件。

                  1) 部署phpmyadmin运行环境 LAP  (L 指的是 linux 系统  A 指的是apache   P 指的是PHP)

                  2) 安装phpmyadmin软件

                  3)  修改配置文件 :  修改phpmyadmin软件的配置文件

    365  yum -y install httpd php  php-mysql

  367  systemctl  start httpd  ; systemctl  enable httpd

  371  tar -xf phpMyAdmin-2.11.11-all-languages.tar.gz

  373  mv phpMyAdmin-2.11.11-all-languages /var/www/html/phpmyadmin

  374  cd /var/www/html/phpmyadmin

  378  cp config.sample.inc.php  config.inc.php  创建主配置文件

  380  vim +17 config.inc.php  #在''号里添加plj123

 步骤二:客户端通过访问phpmyadmin软件管理数据库。

                    打开真机的浏览器 输入

                    访问的网址  http://192.168.4.50/phpmyadmin


相关参数(必须熟知 )

主配置文件  /etc/my.cnf   

数据库目录   /var/lib/mysql

服务的进程名/端口   mysqld/3306

进程所有者和所属组    mysql/mysql

数据传输协议    tcp

错误日志文件名 /var/log/mysqld.log

基本命令:

mysql> show  databases;    显示服务器上已有的库(文件夹)

mysql> select user();  显示当前登录的用户名和客户端地址

mysql> select    version();  显示数据库服务软件的版本号

mysql> select database();   显示当前所在的库

mysql> use mysql;   进入到mysql库里

mysql> show tables;  显示所在库下已有的表 (表就是用来存数据的文件 )

mysql> select @@version;  查看环境变量

mysql> desc tarena.user;  查看表结构

mysql>select name as 用户名 , homedir 家目录 from tarena.user;   取别名

mysql> select concat(name,"-",uid)  as  用户信息  from tarena.user;  拼接

mysql> select distinct shell from  tarena.user;   不显示重复项


数值比较 符号   =      !=       >       >=       <       <=

              相等    不相等   大于   大于等于    小于    小于等于

字符比较 符号   =   != 

空       is  null      表头下没有数据

非空       is  not null  表头下有数据

范围匹配条件   in   、  not  in  、  between  数字1 and   数字2  


模糊匹配条件   where  字段名   like  ‘表达式’

                    统配符号 

                    _  表示 1个字符

                    %表示零个或多个字符

正则匹配   使用正则表达式做判断条件        格式:   字段名 regexp  '正则表达式'

                ^ 匹配行首

                $ 匹配行尾

                [] 匹配范围内任意一个

                *  前边的表达式出现零次或多次

                |  或者


逻辑匹配  就是有多个判断条件

逻辑与   and  &&        多个判断条件必须同时成立

逻辑或   or   ||        多个判断条件其中某个条件成立即可

逻辑非   not  !         取反

()  提高优先级  作用:改变执行顺序


表管理

建库的基本命令   create  database  库名;

create  table  库名.表名(

表头名1  数据类型,

表头名2  数据类型,

表头名3  数据类型,

表头名4  数据类型

);

Create Table: CREATE TABLE `t1` (

  `level` tinyint(3) unsigned DEFAULT NULL,

  `money` double DEFAULT NULL

) ENGINE=InnoDB DEFAULT CHARSET=latin1  西欧字符编码

 命令格式: alter  table  库名.表名   操作命令;

           可以做哪些修改呢?(操作命令)

         添加新表头   add        

         删除表头   drop         

         修改表头存储数据的 数据类型  modify

         修改表头名  change

         修改表名  rename

mysql> alter table studb.stu rename studb.stuinfo;  修改表名

mysql> alter table studb.stuinfo drop age ;  删除字段

mysql> alter table studb.stuinfo add  mail  char(30) ; 添加在末尾

添加在指定位置

 mysql> alter table  studb.stuinfo add  number  char(9) first , add  school char(10) after name;

mysql> alter table  studb.stuinfo   修改字段类型

    -> modify

    -> mail varchar(50) not null default "plj@tedu.cn";

 mysql> alter table studb.stuinfo change  class  class_name char(9) ; 修改表头名

使用modify  修改表头的位置 

mysql> alter  table studb.stuinfo  modify age int  after name ; 


表头和数据复制都复制的

命令格式 create  table  库名.表名   select  *  from  库名.表名 ;

 仅仅复制表头命令格式:(只复制表结构)

命令格式  CREATE  TABLE 库.表   LIKE  库.表


管理表记录 :

对表中存储的行做管理 ,

操作包括  查看select   插入 insert into   更新 update  删除 delete

添加行   insert  into

修改     update

删除行   delete

mysql> select  * from  studb.stuinfo;

mysql> insert into studb.stuinfo 

    -> values

    -> ("nsd211102" , "jim",21,"boy"),("nsd211103","lucy",18,"girl");

 

命令格式: update  库名.表名   set  字段名 =  值 ,  字段名 =  值 ;

仅删除符合条件的行   (删除命令有筛选条件) 

delete   from  库.表  where  筛选条件;

注意 也可以使用  truncate  table  库.表; 删除表里的记录

                 

truncate 与 delete  删除记录的区别!!!  (要知道 )

- TRUNCATE不支持WHERE条件

- 自增长列,TRUNCATE后从1开始;DELETE继续编号

- TRUNCATE不能回滚,DELETE可以

- 效率略高于DELETE

 

字符类型    (表头下存储的是汉字或者是英文字母) 

char(字符个数)    定长字符类型(固定长度)     存储范围 1-255字符   补空格

varchar(字符个数) 变长       (长度不固定)    存储范围 1-65535字符 (有效存储范围到65532)  不会补空格

一个英文字母 是一个字符

一个汉字也是一个字符

 char 和 varchar 共同点  都不能超出指定的字符个数

char 和 varchar 不同点  存储的字符个数小于指定的字符个数时处理的方式不一样,


枚举类型    给表头赋值时 ,值必须在类型规定的范围内选择

单选    enum(值1,值2,值3 ....)

多选    set(值1,值2,值3 ....)


日期时间类型  表头存储与日期时间格式的数据

年        year       YYYY     2021

日期    date        YYYYMMDD    20211104

时间    time       HHMMSS         143358    

日期时间(既有日期又有时间)    datetime   或  timestamp    

timestamp类型      不赋值 使用系统时间自动赋值

datetime类型         不赋值  使用null  赋值

     datetime   与  timestamp  的区别?

    第一个区别是存储范围不一样 (datetime存储范围大  timestamp范围小)

     存储数据的方式不一样

  使用2位数给year的表头赋值也是可以的  但会自动补全4位数

 01-69  之间的数字使用20补全4位数的年 2001~2069

 70-99  之间的数字使用19补全4位数的年 1970~1999

 

#查看默认的检索目录

mysql> show variables like  "secure_file_priv";

第二  修改数据库服务默认的检索目录

[root@host50 ~]# vim /etc/my.cnf

[mysqld]

secure_file_priv=/myload      #手动添加

数据导入格式:

mysql>  load   data  infile   "/检索目录/文件名"   into  table    库名.表名  

fields  terminated by  "文件中列的间隔符号"  

lines   terminated by   "\n"  ;

数据导出命令格式1)  

select   字段名列表 from  库.表   where  条件  into  outfile   "/检索命令名/文件名" ;

 数据导出命令格式2)  

select   字段名列表 from  库.表   where  条件 

into  outfile   "/检索命令名/文件名"  fields  terminated by  "符号" ;



一、字段约束

字段约束的作用是什么?

设置在表头上 ,用来限制字段赋值

字段都有哪些约束?(每一种约束都有各自的功能)

字段约束分类:

1、 PRIMARY KEY:主键,用于保证该字段的值具有唯一性并且非空。

 2、NOT NULL :非空,用于保证该字段的值不能为空。

 3、DEFAULT:默认值,用于保证该字段有默认值。

 4、UNIQUE:唯一索引,用于保证该字段的值具有唯一性,可以为空。

 5、 FOREIGN KEY:外键,用于限制两个表的关系,用于保证该字段的值必须来自于主表的关联列的值,在从表添加外键约束,用于引用主表中某些的值。

 建表时,创建主键 (2种语法格式 要记住)

语法格式1

create  table  库.表( 字段名 类型  primary key  , 字段名 类型 , ..... );

语法格式2

create  table  库.表( 字段名 类型 , 字段名 类型 , primary key(字段名) );

删除主键命令格式(要记住)向表头下存储数据不受主键的限制

mysql> alter  table   库.表   drop primary  key ;

添加主键命令格式(要记住)

mysql> alter  table  库.表  add  primary key(表头名);

 主键与auto_increment连用:

当给字段设置了auto_increment属性后,插入记录时,如果不给字段赋值

                     字段会通过自加1的计算结果赋值

                     要想让字段有自增长 那么字段必须有主键的设置才可以


复合主键 

表中的多个表头一起做主键

复合主键的约束方式: 多条记录 主键字段的值不允许同时相同

创建有复合主键的表

create  table  db1.t39(cip   varchar(15) , port  smallint , 

status  enum("deny","allow") , primary key(cip,port)

删除复合主键

mysql> alter table  db1.t39 drop primary key;

添加复合主键时 字段下的数据与主键约束冲突 不允许添加

mysql> alter table  db1.t39 add primary key(cip,port);


外键

核心思想:保证数据的一致性 

插入记录时,字段值在另一个表字段值范围内选择。

 外键的使用规则:

表存储引擎必须是innodb (在进阶课程里讲  现在仅需要知道如何指定表使用innodb存储引擎)

字段类型要一致

被参照字段必须要是索引类型的一种(通常是 primary key)

格式

create table   库.表(表头列表 ,

foreign key(表头名)   #指定外键

references 库.表(表头名)   #指定参考的表头名

on update  cascade   #同步更新

on  delete  cascade  #同步删除

)engine=innodb;

外键验证:

       1   外键字段的值必须在参考表字段值范围内

       2   验证同步更新( on update cascade)

       3   验证同步删除( on  delete  cascade)   练习到  17:18



mysql索引

ysql索引主要有三种结构:Btree、B+Tree 、Hash 。

 

索引优点具体如下:

可以大大提高MySQL的检索速度

索引大大减小了服务器需要扫描的数据量

索引可以帮助服务器避免排序和临时表

索引可以将随机IO变成顺序IO

 索引的缺点:

虽然索引大大提高了查询速度,同时却会降低更新表的速度,

如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存索引文件。

建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重,但如果你在一个大表上创建了多种组合索引,索引文件的会膨胀很快。

如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果。

对于非常小的表,大部分情况下简单的全表扫描更高效。

 

 索引的分类:

普通索引 (index)

不应用任何限制条件的索引,该索引可以在任何数据类型中创建。

字段本身的约束条件可以判断其值是否为空或唯一。

创建该类型索引后,用户在查询时,便可以通过索引进行查询。

 唯一索引 (unique)

使用UNIQUE参数可以设置唯一索引。

创建该索引时,索引的值必须唯一。

通过唯一索引,用户可以快速定位某条记录。

主键是一种特殊唯一索引。

 全文索引 (FULLTEXT)

使用FULLTEXT参数可以设置索引为全文索引。

全文索引只能创建在CHAR、VARCHAR或者TEXT类型的字段上。

查询数据量较大的字符串类型的字段时,使用全文索引可以提高查询速度。

在默认情况下,应用全文搜索大小写不敏感。如果索引的列使用二进制排序后,

可以执行大小写敏感的全文索引。

 单列索引

顾名思义,单列索引即只对应一个字段的索引。

应用该索引的条件只需要保证该索引值对应一个字段即可。

可以包括普通、唯一、全文索引。

多列索引

多列索引是在表的多个字段上创建一个索引。

该索引指向创建时对应的多个字段,用户可以通过这几个字段进行查询。

要想应用该索引,用户必须使用这些字段中的第一个字段。

     2.4 普通索引(index)的管理

普通索引(index)的使用规则(需要牢记)具体如下:

 一个表中可以有多个index

 字段的值可以重复,且可以赋值为null

 通常在where条件中的字段上配置Index

 index索引字段的标志为mul

 创建普通索引(index)

              1)建表时创建索引命令格式   

CREATE TABLE  库.表(

字段列表 ,

INDEX(字段名) ,

INDEX(字段名) ,

);

查看索引详细信息   show index   from   库.表;

删除索引 

命令格式   DROP  INDEX   索引名   ON  库.表;

在已有表添加索引命令格式 

CREATE  INDEX  索引名  ON  库.表(字段名);

 explain命令 :      可以查看执行的查询select语句, 是否使用到索引做查询了



mysql用户管理:

1  用户授权

1.3  用户授权命令格式

GRANT 权限列表 ON 库名 TO 用户名@"客户端地址"   IDENTIFIED  BY  “密码”    WITH GRANT OPTION;

      权限列表  : 就是添加的用户对指定的库名具有的访问权限表示方式(就是学过的sql命令)

ALL        表示所有权限  (表示所有命令)

USAGE    表示无权限  (除了查看之外啥权限都没有 , 看的命令show    desc )

SELECT,UPDATE,INSERT          表示只有个别权限

SELECT, UPDATE (字段1,字段N)   表示权限仅对指定字段有访问权限


库名  :添加的使用户对服务器上的那些库有访问权限 可以表示的方式有:

*.*          表示 所有库所有表   第1个表示所有库名  第2个 表示所有表名

库名.*     表示一个库下的所有表   例如 tarena.*

库名.表名   表是一张表   例如  tarena.user


客户端地址:     表示网络中的那些主机可以使用添加的用户连接数据库服务表示的方式有:

%                   表示网络中的所有主机

192.168.4.%       表示 192.168.4网段内的所有主机

192.168.4.1       表示仅仅是192.168.4.1   一台主机

localhost          表示数据库服务器本机

 

WITH GRANT OPTION : 

让添加的用户也可以使用grant命令再添加用户,但用户本身要对mysql库有insert的权限

权限撤销 : 删除已有授权用户的权限 

命令格式如下

REVOKE 权限列表 ON 库名 FROM  用户名@"客户端地址";

注意 : 库名的表示方式 要和 用户授权时的表示方式一样

     3 删除添加的用户

drop  user   用户名@"客户端地址";

 

查看用户访问权限

mysql> show grants for  root@"%";

mysql> set password for 用户名@"客户端地址"=password("新密码");   #修改已有授权用户的连接密码


mysql安装及基本操作的评论 (共 条)

分享到微博请遵守国家法律