几个重要术语:
- 字符集:字母和符号的集合;
- 编码:某个字符集成员的内部表示;
- 校对:规定字符如何比较的指令。
示例:显示所有可用的字符集以及每个字符集的描述和默认校对
SQL语句:SHOW CHARACTER SET;
示例:查看所有支持校对的完整列表
SQL语句:SHOW COLLATION;
安全管理
数据库服务器通常包含关键的数据,确保这些数据的安全和完整需要利用访问控制。MySQL服务器的安全基础是:用户应该对他们需要的数据具有适当的访问权,既不能多也不能少。换言之,用户不能对过多的数据具有过多的访问权。而访问控制就是你需要给用户提供他们所需的访问权,且仅提供它们所需的访问权,管理访问控制需要创建和管理用户账户。
示例:创建一个新用户账号
SQL语句:CREATE USER ben IDENTIFIED BY 'p@$$w0rd';
示例:重新命名一个用户账号
SQL语句:RENAME USER ben TO bforta;
示例:删除一个用户账号以及相关的权限
SQL语句:DROP USER bforta;
示例:查看赋予用户账号的访问权限
SQL语句:SHOW GRANTS FOR bforta;
示例:使用GRANT语句设置权限,允许用户在crashcourse数据库的所有表上使用SELECT,通过只授予SELECT访问权限,用户bforta对crashcourse数据库中的所有数据具有只读访问权限
SQL语句:GRANT SELECT ON crashcourse.* TO bforta;
示例:使用REVOKE撤销特定的权限,撤销赋予用户bforta的SELECT访问权限,被撤销的访问权限必须存在,否则报错
SQL语句:REVOKE SELECT ON crashcourse.* FROM bforta;
示例:使用SET PASSWORD语句更改用户口令
SQL语句:SET PASSWORD FOR bforta=Password('n3w p@$$w0rd');
示例:SET PASSWORD更新当前登录用户的口令
SQL语句:SET PASSWORD = Password('n3w p@$$w0rd');
数据库维护
由于MySQL数据库是基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据。但是,由于这些文件总是处于打开和使用状态,普通的文件副本备份不一定总是有效。下面列出这个问题的可能解决方案:
- 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件。
- 可用命令行程序mysqlhotcopy从一个数据库复制所有数据
- 可用使用MySQL的BACKUP TABLE 或SELECT INTO OUTFILE 转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可用用RESTORE TABLE 来复原。为了保证所有数据被写到磁盘,可能需要在进行备份前使用FLUSH TABLES语句。
(1) 进行数据库维护
MySQL提供了一系列的语句,可用来保证数据库正确和正常运行。
- ANALYZE TABLE语句用来检查表键是否正确;
- CHECK TABLE语句用来针对许多问题对表进行检查;
- OPTIMIZE TABLE语句用于收回所用的空间,从而优化表的性能,比如从一个表中删除大量数据。
(2) 诊断启动问题
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现。MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自动启动的,这些消息可能看不到。在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL服务器自身通过在命令行上执行mysqld启动。比如help(显示帮助,即选项列表)、verbose(显示全文本消息)、save-mode(装载减去某些最佳配置的服务器)命令等。
(3) 查看日志文件
MySQL维护管理员依赖一系列日志文件。主要的日志文件有以下几种。
- 错误日志:它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为hostname.err,位于data目录。此日志名可用--log-error命令行选项更改。
- 查询日志:它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名m为hostname.log,位于data目录中。此名字可用用--log命令行选项更改。
- 二进制日志:它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可用用--log-bin命令行选项更改。
- 缓慢查询日志:此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log,位于data目录中。此名字可用用--log-slow-queries命令行选项更改。
在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。
(4) 改善性能
- MySQL是用一系列的默认设置预先配置的,所以,可用根据需要调整内存分配、缓冲区大小等。为了查看当前设置,可使用SHOW VARIABLES;和SHOW STATUS;
- MySQL是一个多用户多线程的DBMS,换言之,它经常同时执行多个任务。如果这些任务中的某一个执行缓慢,则所有请求都会执行缓慢。如果遇到显著的性能不良,可使用SHOW PROCESSLIST显示所有活动进程。
- 使用不同的方法编写同一条SELECT语句,比如联结、并、子查询等。
- 使用EXPLAIN语句让MySQL解释它将如何执行一条SELECT语句。
- 一般来说,存储过程执行比一条一条地执行其中的各条MySQL语句快
- 使用正确的数据类型
- 绝不能检索比需求还要多的数据,即不要用SELECT *
- 在导入数据时,应该关闭自动提交。
- 将SELECT语句中一系列复杂的OR条件转换为多条SELECT语句和连接它们的UNION语句
- 索引改善数据检索的性能,但损害数据插入、删除和更新的性能。如果一些表不经常被检索,则没有必要索引它们