MySQL命令学习笔记(八)

本文详细介绍了MySQL的用户账号管理,包括创建、删除、设置访问权限和更改口令;探讨了事务处理,如BEGIN、COMMIT、ROLLBACK和SAVEPOINT的使用;还涉及了数据库的备份、维护和性能改善策略。

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

1 安全管理

1.1 访问控制

MySQL服务器的安全基础是: 用户应该对他们需要的数据具有适当的访问权,既不能多也不能少

1.2 管理用户

MySQL用户账号和信息存储在名为mysql的MySQL数据库中。获得所有用户账号列表时,使用以下语句:

USE mysql;
SELECT user FROM user;

结果如下:
user
这里只有root一个账户,接下来创建账户。

1.2.1 创建用户账号

使用CREATE USER语句创建一个新用户账号,示例如下:

CREATE USER ben IDENTIFIED BY '123456';

结果如下:
create user.png
指定散列口令 IDENTIFIED BY指定的口令为纯文本, MySQL将在保存到user表之前对其进行加密。为了作为散列值指定口令,使用IDENTIFIED BY PASSWORD
为重新命名一个用户账号,使用RENAME USER语句,如下所示:

RENAME USER ben TO jerry;
1.2.2 删除用户账号

为了删除一个用户账号(以及相关的权限),使用DROP USER语句,如下所示:

DROP USER jerry;
1.2.3 设置访问权限

为看到赋予用户账号的权限,使用SHOW GRANTS FOR,如下所示:

SHOW GRANTS FOR jerry@loaclhost;

为设置权限,使用GRANT语句,GTANT要求至少给出以下信息:

  • 要授予的权限
  • 被授予访问权限的数据库或表
  • 用户名@主机名

GRANT的用法示例如下:

GRANT SELECT ON test.* TO jerry;

这里表示允许用户在test.*test.*数据库的所有表)上使用SELECT,用户jerrytest数据库中的所有数据具有只读访问权限,结果如下:
GRANT.png
每个GRANT添加(或更新)用户的一个权限。MySQL读取所有授权,并根据它们确定权限GRANT的反操作为REVOKE,用来撤销特定的权限。示例如下:

REVOKE SELECT ON test.* FROM jerry;

这条REVOKE语句取消刚赋予用户jerrySELECT访问权限。被撤销的访问权限必须存在,否则会出错,结果如下:
REVOKE.png
GRANTREVOKE可在几个层次上控制访问权限:

  • 整个服务器,使用GRANT ALLREVOKE ALL
  • 整个数据库,使用ON database.*
  • 特定的表,使用ON database.table
  • 特定的列
  • 特定的存储过程
1.2.4 更改口令

为了更改用户口令,可使用SET PASSWORD语句。新口令必须如下加密:

SET PASSWORD FOR jerry = PASSWORD('654321');

SET PASSWORD更新用户口令。新口令必须传递到Password()函数进行加密

2 管理事务处理

2.1 事务处理

事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
在使用事务和事务处理时,有几个关键词汇反复出现。下面是关于事务处理需要知道的几个术语:

  • 事务(transaction)指一组SQL语句;
  • 回退(rollback)指撤销指定SQL语句的过程
  • 提交(commit)指将未存储的SQL语句结果写入数据库表
  • 保留点(savepoint)指事务处理设置的临时占位符

2.2 控制事务处理

MySQL使用下面的语句来标识事务的开始:

START TRANSACTION;
2.2.1 使用ROLLBACK

使用ROLLBACK命令用来回退(撤销)MySQL语句,示例如下:

SELECT * FROM table1;
START TRANSACTION;
DELETE FROM table1;
SELECT * FROM table1;
ROLLBACK
SELECT * FROM table1;

结果如下:
RO SELECT.png
上图是第一句SELECT执行的结果,然后依次执行上述语句如下:
ROLLBACK.png
首先执行一条SELECT以显示该表不为空。然后开始一个事务处理,用一条DELETE语句删除table1中的所有行。另一条SELECT语句验证ordertotals确实为空。这时用一条ROLLBACK语句回退START TRANSACTION之后的所有语句,最后一条SELECT语句显示该表不为空。ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)。
哪些语句可以回退? 事务处理用来管理INSERTUPDATEDELETE语句。不能回退SELECT语句,不能回退CREATEDROP操作。

2.2.2 使用COMMIT

一般的MySQL语句都是直接针对数据库表执行和编写的。这就是隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句,示例如下:

START TRANSACTION;
DELETE FROM table1 WHERE id = 1;
COMMIT;

最后的COMMIT语句仅在不出错时写出更改。
隐含事务关闭COMMITROLLBACK语句执行后,事务会自动关闭(将来的更改会隐含提交)。

2.2.3 使用保留点

简单的ROLLBACKCOMMIT语句就可以写入或撤销整个事务处理。但是,只是对简单的事务处理才能这样做,更复杂的事务处理可能需要部分提交或回退。
为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。这些占位符称为保留点。为了创建占位符,可如下使用SAVEPOINT语句:

SAVEPOINT delete1;

每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要回退到何处。为了回退到本例给出的保留点,可如下进行:

ROLLBACK TO delete1;

释放保留点 保留点在事务处理完成(执行一条ROLLBACKCOMMIT)后自动释放。自MySQL 5以来,也可以用RELEASE SAVEPOINT明确地释放保留点。

2.2.3 更改默认的提交行为

由于默认的MySQL行为是自动提交所有更改。也就是任何时候执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即生效。为指示MySQL不自动提交更改,需要使用以下语句:

SET autocommit=0;

autocommit标志决定是否自动提交更改,不管有没有COMMIT语句。设置autocommit为0(假)指示MySQL不自动提交更改(直到autocommit被设置为真为止)。

3 数据库维护

3.1 备份数据

  • 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件
  • 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)
  • 可以使用MySQL的BACKUP TABLESELECT INTO OUTFILE转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原

首先刷新未写数据 为了保证所有数据被写到磁盘(包括索引数据),可能需要在进行备份前使用FLUSH TABLES语句

3.2 进行数据库维护

MySQL提供了一系列的语句,可以(应该)用来保证数据库正确和正常运行,一些语句如下:

  • ANALYZE TABLE用来检查表键是否正确,示例如下:
ANALYZE TABLE table1;

ANALYZE TABLE

  • CHECK TABLE用来针对许多问题对表进行检查
CHECK TABLE table1;
  • 若MyISAM表访问产生不正确和不一致的结果,可能需要用REPAIR TABLE来修复相应的表
  • 若从一个表中删除大量数据,应该使用OPTIMIZE TABLE来回收所有的空间,从而优化表的性能

3.3 诊断启动问题

在排除系统启动问题时,首先应该尽量用手动启动服务器。 MySQL服务器自身通过在命令行上执行mysqld启动。下面是几个重要的mysqld命令行选项:

  • --help显示帮助——一个选项列表
  • --safe-mode装载减去某些最佳配置的服务器
  • verbose显示全文本消息
  • --version显示版本信息然后退出

3.4 查看日志文件

MySQL维护管理员依赖的一系列日志文件。主要的日志文件有以下几种:

  • 错误日志。它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录中。此日志名可用–log-error命令行选项更改
  • 查询日志。它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名为hostname.log,位于data目录中。此名字可以用–log命令行选项更改
  • 二进制日志。它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可以用–log-bin命令行选项更改。
  • 缓慢查询日志。此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log,位于data目录中。此名字可以用–log-slow-queries命令行选项更改

4 改善性能

  • MySQL一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。若遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程(以及它们的线程ID和执行时间)。还可以用KILL命令终结某个特定的进(使用这个命令需要作为管理员登录)。
  • 有不止一种方法编写同一条SELECT语句。 应该试验联结、并、子查询等,找出最佳的方法。
  • 使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。
  • 决不要检索比需求还要多的数据。换言之,不要用SELECT *(除非真正需要每个列)
  • 在导入数据时,应该关闭自动提交。你可能还想删除索引(包括FULLTEXT索引),然后在导入完成后再重建它们
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值