MySQL基础管理

用户管理

用户的作用

用户的作用为登录MySQL数据库和管理MySQL对象,不同的用户也有着不同的用户权限。

用户的定义

MySQL用户的特定格式为:用户名@‘白名单’。
白名单:允许登录MySQL的地址列表,MySQL允许白名单的IP地址登录MySQL,管理MySQL。
例如:
user@‘localhost’:用户能够通过本地登录到MySQL(socket);
user@‘192.168.0.10’或user@‘xxx.com’:用户通过192.168.0.10或xxx.com远程登录到MySQL服务器;
user@‘192.168.0.%’:通过192.168.0.xx/24远程登录到MySQL服务器;
user@‘192.168.0.5%’:通过192.168.0.50~192.168.0.59的IP远程登录到MySQL服务器;
user@’%’:用户可以通过任何的IP登录到MySQL服务器上;
注意:user@‘localhost’与user@’%'等不是同一个用户。

用户管理

1.查询所有用户:
select user(用户名称),host(白名单),authentication-string(经过加密后的密码) from mysql.user;
2.添加用户:
create user user@‘localhost’ identified by ‘123’;
3.修改用户:
alter user user@‘localhost’ identified by ‘456’;
4.删除用户:
drop user user@‘localhost’;
注意:8.0版本之前,可以通过grant命令建立用户+授权,8.0及以后的版本,只能先创建用户后再授权。

权限管理

权限的表现方式

展示权限的命令:show privileges;

mysql> show privileges;
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Privilege               | Context                               | Comment                                               |
+-------------------------+---------------------------------------+-------------------------------------------------------+
| Alter                   | Tables                                | To alter the table                                    |
| Alter routine           | Functions,Procedures                  | To alter or drop stored functions/procedures          |
| Create                  | Databases,Tables,Indexes              | To create new databases and tables                    |
| Create routine          | Databases                             | To use CREATE FUNCTION/PROCEDURE                      |
| Create temporary tables | Databases                             | To use CREATE TEMPORARY TABLE                         |
| Create view             | Tables                                | To create new views                                   |
| Create user             | Server Admin                          | To create new users                                   |
| Delete                  | Tables                                | To delete existing rows                               |
| Drop                    | Databases,Tables                      | To drop databases, tables, and views                  |
| Event                   | Server Admin                          | To create, alter, drop and execute events             |
| Execute                 | Functions,Procedures                  | To execute stored routines                            |
| File                    | File access on server                 | To read and write files on the server                 |
| Grant option            | Databases,Tables,Functions,Procedures | To give to other users those privileges you possess   |
| Index                   | Tables                                | To create or drop indexes                             |
| Insert                  | Tables                                | To insert data into tables                            |
| Lock tables             | Databases                             | To use LOCK TABLES (together with SELECT privilege)   |
| Process                 | Server Admin                          | To view the plain text of currently executing queries |
| Proxy                   | Server Admin                          | To make proxy user possible                           |
| References              | Databases,Tables                      | To have references on tables                          |
| Reload                  | Server Admin                          | To reload or refresh tables, logs and privileges      |
| Replication client      | Server Admin                          | To ask where the slave or master servers are          |
| Replication slave       | Server Admin                          | To read binary log events from the master             |
| Select                  | Tables                                | To retrieve rows from table                           |
| Show databases          | Server Admin                          | To see all databases with SHOW DATABASES              |
| Show view               | Tables                                | To see views with SHOW CREATE VIEW                    |
| Shutdown                | Server Admin                          | To shut down the server                               |
| Super                   | Server Admin                          | To use KILL thread, SET GLOBAL, CHANGE MASTER, etc.   |
| Trigger                 | Tables                                | To use triggers                                       |
| Create tablespace       | Server Admin                          | To create/alter/drop tablespaces                      |
| Update                  | Tables                                | To update existing rows                               |
| Usage                   | Server Admin                          | No privileges - allow connect only                    |
+-------------------------+---------------------------------------+-------------------------------------------------------+

ALL:以下所有权限,一般是普通管理员拥有的:SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER, SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, CREATE TABLESPACE;

with grant option:超级管理员才具备的,给别的用户授权的功能;

小备注:SQL语句truncate table 表名具有清空表的作用,他的操作是先drop然后再create,但是只需要提供drop权限即可。

授权、回收操作

语法

8.0以前(创建对象并授权):
grant 权限 on 对象 to 用户 identified by '密码';
8.0+:
create user 用户 identified by '密码';
grant 权限 on 对象 to 用户;

为超级用户授权:
GRANT 权限1,权限2,... on 对象 to 用户 with grant option;

说明:
对象:库以及表,格式为库.表
*.*:所有的数据库以及下面的所有表
库.*:指定的库下的所有的表
库.表:指定库下的指定的表

例子

1、创建并授权一个超级管理员用户,使其可以在本地登录并管理数据库(使用8.0以后版本的语法):

# 创建linkai@'localhost'用户
create user linkai@'localhost' identified by '密码';
#为linkai@'localhost'用户授权
grant all on *.* to linkai@'localhost' with grant option;
#查询所有用户
select user,host from mysql.user;
#查询用户权限
show grants for linkai@'localhost';

在这里插入图片描述
2、创建并授权一个linkai@’%‘的普通管理用户,对象是处理所有的表(这个有的不规范啊,不过本人在日常的学习上确实需要这么一个用户,就顺便创建了,顺便给你们看看linkai@’%'和linkai@'localhost’是不是同一个用户。当然,在公司有规范最好要按照规范来,安全第一)(这次使用8.0以前的版本操作)

#创建并授权linkai@'%'用户
grant all on *.* to linkai@'%' identified by '密码';
#查询所有用户
select user,host from mysql.user;
#查询用户权限
show grants for linkai@'%';

在这里插入图片描述
3、创建并授权一个app@’%'的业务用户,可以完成对所有表的增删改查,对象是处理所有的表(这个也有的不规范啊,不过本人在日常的学习上确实需要这么一个用户,就顺便创建了,在公司有规范最好要按照规范来,安全第一)(这次使用8.0以前的版本操作)

#创建并授权app@'%'用户
grant select,insert,delete,update on *.* to app@'%' identified by '密码';
#查询所有用户
select user,host from mysql.user;
#查询用户权限
show grants for app@'%';

在这里插入图片描述
查询所有用户的权限:
select * from mysql.user\G;
扩展:
user:存放创建的用户和密码包括全局实例级别管理权限设置;
db:存放设置的数据库级别的权限设置;
tables_priv:存放表级别的权限设置;
columns_priv:存放字段级别的权限设置;
procs_priv:存放存储过程中的权限设置。
注意:
1.多次grant是叠加权限;
2.create user后,该用户只有userage权限。

回收权限

MySQL中不能通过重复授权来修改权限(重复授权只是对权限的叠加),只能回收权限。

#回收app@'%'原有的create权限
revoke create on *.* from app@'%';
#显示app@'%'的权限
show grants for app@'%';
#删除app@'%'用户
drop user app@'%';

在这里插入图片描述
注意:
MySQL删除用户,权限也就跟着被删除了,而对于Oracle来说,用户被删除会影响到它所管理的表,MySQL不会。

忘记root密码的处理方式

先把操作步骤写出来然后再说明一下:

  1. 先关闭数据库:service mysqld stop或者systemctl stop mysqld
  2. 使用安全模式启动(本地无密码验证登录):`mysqld_safe --skip-grant-tables --skip-networking &
  3. 或者service mysqld start --skip-grant-tables --skip-networking`
  4. 修改登录数据库并修改密码:
    先登录MySQL,这个过程不会对你的用户名和密码进行校验;
    手工加载授权表:flush privileges;
    修改用户密码:alter user root@'localhost' identified by'密码';
  5. 重启数据库到正常模式:service mysqld restart或者systemctl restart mysqld

说明:

两个重要的参数:
--skip-grant-tables:跳过授权表
--skip-networking:跳过TCP/IP连接

MySQL数据库中拥有安全模式,当忘记密码时可以关闭MySQL的密码验证功能(MySQL的密码验证功能在server层的连接层),使用–skip-grant-tables参数后,此时MySQL无需账号密码即可登录,但是对于远程的用户来说此时也可以无账号密码登录为超级管理员,非常不安全,所以需要使用–skip-networking语句跳过TCP/IP连接限制用户从TCP/IP远程连接,只能允许socket连接。

连接管理

MySQL自带的客户端

mysql、mysqldump备份工具、mysqladmin管理工具。
mysql:

  1. 本地socket连接:
    前提:数据库中必须实现授权用户名@'IP’的用户。
  2. 参数列表:
-u 用户名
-p 密码
-S 本地socket文件位置
-h 数据库IP地址
-P 数据库端口号
-e 免交互执行数据库命令
< 录入SQL脚本

登录语句:mysql -uroot -p -S /tmp/mysql.sock(不加-u默认为root用户)

  • -e的应用:
    在这里插入图片描述

MySQL远程客户端程序(开发工具)

TCP/IP:前提:必须创建好可以远程连接的用户
mysql -u用户名 -p -hIP地址 -P3306
各语言也有其对应的API:如php-mysql、pymysql

初始化配置

方式

源码安装:编译过程中设置初始化参数
配置文件:数据库启动之前,设定的配置文件参数。/etc/my.cnf
启动脚本命令行:mysqld_safe --skip-grant-tables --skip-networking &
说明:若my.cnf配置文件上配置的端口号为3306,而mysqld_safe命令设置的端口号为3307,则最终MySQL的端口号为3307,命令的优先级要大于配置文件。

配置文件的应用

配置文件的读取顺序

命令:mysqld --help --verbose |grep my.cnf查看:
在这里插入图片描述
说明:若/etc/my.cnf上的端口号为3306,而~/.my.cnf上的端口号为3307,则最终的MySQL端口号为3307,以最后读取的数据为准。
特殊情况:
手工定制配置文件位置点:例如:/opt/my.cnf

mysqld --defaults-file=/opt/my.cnf&
或者
mysqld -safe --defaults-file=/opt/my.cnf&

配置文件书写格式

[标签]
配置参数=xxx
标签是什么:
区分不同程序的运行参数。

  • [服务器端]:负责数据库服务器端的运行参数设定
    • [server]
      [mysqld]
      [mysqld_safe]
  • [客户端]:影响本地客户端的连接,不影响远程客户端
    • [client]
      [mysql]
      [mysqldump]
      现在我们一起来看/etc/my.cnf配置文件:
#服务器端标签
[mysqld]
#负责数据库管理用户
user=mysql
#软件的安装位置
basedir=/app/database/mysql
#数据的存放位置
datadir=/data/3306
#标志节点的唯一编号,主从有用
server_id=6
#端口号
port=3306
#套接字文件
socket=/tmp/mysql.sock

#客户端标签
[mysql]
#读取socket的文件位置点
socket=/tmp/mysql.sock

注意:mysqld命令行以及-S等的命令行优先级高于配置文件。

启动和关闭数据库

启动命令

  1. systemctl start mysqld
  2. mysql.server
  3. mysqld_safe &
  4. mysqld &
    说明:
启用
启用
启用
service mysqld start或systemctl strat mysqld
support-files/mysql.server
/app/database/mysql/bin/mysqld_safe &
/app/database/mysql/bin/mysqld &
启动时可以临时设定参数
  1. 可以通过mysqld_safe去定制mysql的默认功能操作,同时可以去启动mysqld,还会检测mysqld。
  2. mysqld和mysqld_safe启动数据库时,可以加入自己执行的参数,如--skip-grant-tables--skip-networkingdefaults-file=/opt/my.cnf
  3. 以上多种方式,都可以单独启动MySQL服务,mysqld_safe和mysqld一般是在临时维护时使用。
  4. 另外,从Centos 7系统开始,支持systemd直接调用mysqld的方式进行启动数据库。

关闭命令

  1. systemlctl stop mysqld
  2. service mysqld stop
  3. /etc/init.d/mysqld stop
  4. mysqladmin -uroot -p进入MySQL后使用SQL语句:shut down;
  5. mysql -uroot -p -e"shut down;"
发布了38 篇原创文章 · 获赞 16 · 访问量 2313

猜你喜欢

转载自blog.csdn.net/JAVA_php_Jack/article/details/104587040
今日推荐