数据库的用户管理
MySQL的用户管理
- MySQL用户可以分为普通用户和root用户
- root用户是超级管理员,拥有所有权限
- 普通用户只拥有被授予的各种权限
MySQL用户管理的相关内容
权限表
- MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在MySQL数据库中
- 存储账户的权限信息表主要有:user、db、host、tables_priv、columns_priv和procs_priv
各个权限表的作用
- user表是MySQL中最重要的一个权限表,记录允许连接到服务器的账户信息,里面的权限是全局级的
- db表和host表是MySQL数据中非常重要的权限表,db表中存储了用户地某个数据库的操作权限
- host表中存储了某个主机对数据库的操作权限
- tables_priv表用来对表设置操作权限
- columns_priv表用来对表的某一列设置权限
- procs_priv表可以对存储过程和存储函数设置操作权限
账户管理
新建普通用户
- 创建新用户,必须有相应的权限来执行创建操作
- 在MySQL数据库中,可以使用CREATE USER或GRANT语句
使用CREATE USER语句创建新用户
- 语法格式:
CREATE USER “user”@“host” [IDENTIFIED BY “password”];
需求:使用CREATE USER创建一个用户,用户名是rose,密码是rosepwd,主机名是localhost
GRANT语句
- create user语句可以用来创建账户,通过该语句可以在user表中添加一条新的记录,但是create user语句创建的新用户没有任何权限,还需要使用grant语句赋值用户权限
- 而grant语句不仅可以创建新用户,还可以在创建的同时对用户授权
使用Grant语句创建新用户
- 语法格式:
GRANT privileges ON db.table TO “user”@“host” [IDENTIFIED BY “password”];
- db.table:db表示数据库,table表示数据表
需求:使用GRANT语句创建一个新的用户testuser,密码为testpwd,并授予用户对所有数据表的SELECT和UPDATE权限
。。。MySQL8.0不知道为嘛执行不成功
删除普通用户
- 在MySQL数据库中,可以使用DROP USER语句删除用户,也可以直接通过DELETE语句从MySQL.user表中删除对应的记录来删除用户
使用DROP USER 语句删除用户
- 语法格式:
DROP USER user[, user];
例:使用DROP USER删除账户"rose"@"localhost":
DROP USER "rose"@"localhost";
使用DELETE语句删除用户
- 语法格式:
DELETE FROM mysql.user WHERE host = ‘hostname’ and user = ‘username’;
数据库用户的权限管理
权限管理
- 权限管理主要是对登录到MySQL的用户进行权限验证,所有用户的权限都存储在MySQL的权限表中
- MySQL权限系统的主要功能是证实连接到一台主机的用户,并且赋予该用户在数据库上的各种权限
授权
- 授权就是为了某个用户授予权限
- MySQL中可以使用GRANT语句为用户授予权限
给用户授予权限
- 语法格式:
GRANT priv_type ON db.table to ‘user’@‘host’ [IDENTIFIED BY ‘password’];
- priv_type:可以是具体的某个权限,如select、insert、update等,也可以是授予全部权限如:all privileges
需求:使用grant语句给已经创建好的用户rose授予对book数据库所有表插入、查询的权限
查看用户的授权
语法格式:
SHOW GRANTS FOR “user”@“host”;
收回权限
- 收回权限就是撤销已经赋予用户的某些权限
- 语法格式:
REVOKE privilege ON db.table from “user”@“host”;
数据库的日志管理
MySQL的日志
MySQL的日志记录了MySQL数据库的运行情况、用户操作、错误信息等,可以为MySQL管理和优化提供必要的信息
MySQL的日志分类
- 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题
- 查询日志:记录了MySQL的所有用户操作,包括启动和关闭服务、执行查询和更新语句等
- 二进制日志:记录所有更改数据的语句
- 慢查询日志:记录所有执行时间超时long_query_time的所有查询或不使用索引的查询
启动和设置错误日志
- 默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err
- 错误日志的启动和停止以及指定日志文件名,都可以通过修改my.ini来配置。错误日志的配置项是log-error
- 如果需要指定文件名,则配置项如下:
[mysqld]
log-error=file_name
查看错误日志
-
MySQL的错误日志是以文本形式存储的,可以使用文本编辑直接查看MySQL的错误日志
-
如果不知道日志文件的存储路径,可以使用show variables语句查询错误日志的存储路径
showvariables like "log_error";
删除错误日志
- 若数据库运行时间较长,错误日志文件可能比较大,那么可以将日志文件删除,在重新创建新的错误日志文件
- MySQL的错误日志是以文本文件形式存储在文件系统中的,可以直接删除
- 在删除错误日志之后,如果需要重建日志文件,需要在服务端执行以下命令:
- mysqladmin -uroot -p flush-logs
- 或者登陆MySQL,然后执行flush logs语句:
- mysql>flush logs;
- 在日志文件不存在的情况下,执行flush logs语句会创建新的日志文件。如果日志文件存在的情况下,并不做日志备份和创建的操作
数据库的备份和恢复
数据库的备份与恢复
保证数据库安全的最重要的一个措施是确保对数据进行定期备份,如果数据库中的数据丢失或者出现错误,可以使用备份的数据进行恢复,这样就尽可能地降低了意外原因导致的损失
使用MYSQLdump命令备份
- MySQLdump是MySQL提供的一个非常有用的数据库备份工具,MySQLdump命令执行时,可以将数据库备份成一个文本文件
- mysqldump备份数据库语句的基本语法格式如下:
mysqldump -u userName -h host -p password
dbname [tbname [, tbname2, … ]] > BackupName.sql
需求:
1、使用mysqldump命令备份数据库图书管理系统中的所有表
2、备份book数据库中的readerinfo表
3、使用mysqldump备份多个数据库,比如备份book和mytest数据库
数据恢复
使用mysql命令恢复,语法格式如下:
mysql -u userName -p [dbname] < backup.sql
需求:使用mysql命令将上面的备份文件导入到数据库中
如果已经登录MySQL服务器,还可以使用source命令导入SQL文件,语法如下:
source backup.sql
数据表的导出
数据表的导入和导出
- 导出:就是将MySQL数据表中的数据导出到外部存储文件中
- 导入:就是将外部存储文件中的数据导入到MySQL数据库中
使用SELECT … INTO OUTFILE导出文本文件
语法格式:
SELECT columnsList FROM table [WHERE condition] INTO OUTFILE “fileName” [OPTIONS];
- [OPTIONS] : 为可选参数项,比如:
- 参数FIELDS TERMINATED BY “value” : 设置字段之间的分割字符value,可以为单个或多个字符,默认情况下制表符’\t’
- 参数LINES TERMINATED BY ‘value’ : 设置每行数据结尾的字符value,可以为单个或多个字符,默认值为’\n’
需求:将图书管理系统中的readerinfo表中的记录导出到文本文件
使用mysqldump命令导出文本文件
- mysqldump创建一个包含创建表的CREATE TABLE语句的tablename.sql文件和一个包含其数据的tablename.txt文件
- 语法格式:
mysqldump -T path(目标目录) -u root -p dbname [tables] [OPTIONS]
- [OPTIONS] 为可选参数选项,比如:
- –fileds-terminated-by=value : 设置字段之间的分割字符value,可以为单个或多个字符,默认情况下为"\t"
- –lines-terminated-by=value : 设置每行数据结尾的字符value,可以为单个或多个字符,默认为"\n"
使用MySQL命令导出文本文件
语法格式:
mysql -u root -p --execute=“SELECT语句” dbname > fileName.txt
数据表的导入
使用LOAD DATA INFILE方式导入文本文件
语法格式:
LOAD DATA INFILE “filename.txt” INTO TABLE tablename [OPTIONS] [IGNORE number LINES]
- [OPTIONS] : 为可选参数选项,比如:
- 参数FIELDS TERMINATED BY ''value" : 设置字段之间的分隔符value,可以为单个或多个字符,默认为制表符"\t"
- 参数LINES TERMINATED BY “value” :设置每行数据结尾的字符value,可以为单个或多个字符,默认值为"\n"
使用mysqlimport命令导入文本文件
语法格式:
mysqlimport -u root -p dbname filename.txt [OPTIONS]
- [OPTIONS] : 为可选参数选项,比如:
- –fileds-terminated-by=’'value" : 设置字段之间的分隔符value,可以为单个或多个字符,默认为制表符"\t"
- –lines-terminated-by=“value” :设置每行数据结尾的字符value,可以为单个或多个字符,默认值为"\n"