文章目录
- 一、管理事务处理
-
- 1.事务处理
- [2. 控制事务处理](#2. 控制事务处理)
- 二、全球化和本地化
-
- [1. 字符集和校对顺序](#1. 字符集和校对顺序)
- [2. 使用字符集和校对顺序](#2. 使用字符集和校对顺序)
- 三、安全管理
-
- [1. 访问控制](#1. 访问控制)
- [2. 管理用户](#2. 管理用户)
-
- [2.1 创建用户账号](#2.1 创建用户账号)
- [2.2 删除用户账号](#2.2 删除用户账号)
- [2.3 设置访问权限](#2.3 设置访问权限)
- [2.4 更改口令](#2.4 更改口令)
- 四、数据库维护
-
- [1. 备份数据](#1. 备份数据)
- [2. 进行数据库维护](#2. 进行数据库维护)
- [3. 诊断启动问题](#3. 诊断启动问题)
- [4. 查看日志文件](#4. 查看日志文件)
一、管理事务处理
1.事务处理
并非所有引擎都支持明确的事务处理管理。MyISAM和InnoDB是两种最常使用的引擎。前者不支持明确的事务处理管理,而后者支持。
事务处理:(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行。
事务处理是一种机制,用来管理必须成批执行的MySQL操作,以保证数据库不包含不完整的操作结果。
利用事务处理,可以保证一组操作不会中途停止,它们或者作为整体执行,或者完全不执行(除非明确指示)。如果没有错误发生,整组语句提交给(写到)数据库表。如果发生错误,则进行回退(撤销)以恢复数据库到某个已知且安全的状态。
事务处理的几个术语:
- 事务(transaction)指一组SQL语句;
- 回退(rollback)指撤销指定SQL语句的过程;
- 提交(commit)指将未存储的SQL语句结果写入数据库表;
- 保留点(savepoint)指事务处理中设置的临时占位(placeholder),你可以对它发布回退(与回退整个事务处理不同)。
2. 控制事务处理
MySQL使用下面的语句来标识事务的开始:
START TRANSACTION
-
使用ROLLBACK
SELECT * FROM ordertotals;
START TRANSACTION;
DELETE FROM ordertotals;
SELECT * FROM ordertotals;
ROLLBACK;
SELECT * FROM ordertotals;
ROLLBACK只能在一个事务处理内使用(在执行一条START TRANSACTION命令之后)
-
使用COMMIT
一般的MySQL语句都是直接针对数据库表执行和编写的。这就是所谓的隐含提交(implicit commit),即提交(写或保存)操作是自动进行的。
在事务处理块中,提交不会隐含地进行。为进行明确的提交,使用COMMIT语句.START TRANSACTION
DELETE FROM orderitems WHERE order_num = 20010;
DELETE FROM orders WHERE order_num = 20010;
COMMIT; -
使用保留点
为了支持回退部分事务处理,必须能在事务处理块中合适的位置放置占位符。这样,如果需要回退,可以回退到某个占位符。
这些占位符称为保留点。为了创建占位符,可使用SAVEPOINTSAVEPOINT deletel1;
ROLLBACK TO delete1;
每个保留点都取标识它的唯一名字,以便在回退时,MySQL知道要
回退到何处。
-
更改默认的提交行为
默认的MySQL行为是自动提交所有更改。换句话说,任何时候你执行一条MySQL语句,该语句实际上都是针对表执行的,而且所做的更改立即生效。为指示MySQL不自动提交更改,需要使用以下语句:SET autocommit = 0;
二、全球化和本地化
1. 字符集和校对顺序
重要术语:
- 字符集为字母和符号的集合;
- 编码为某个字符集成员的内部表示;
- 校对为规定字符如何比较的指令。
在MySQL的正常数据库活动(SELECT、INSERT等)中,不需要操心太多的东西。使用何种字符集和校对的决定在服务器、数据库和表级进行。
2. 使用字符集和校对顺序
MySQL支持众多的字符集。
-
查看所支持的字符集完整列表
显示所有可用的字符集以及每个字符集的描述和默认校对SHOW CHARACTER SET;
-
查看所支持校对的完整列表
显示所有可用的校对,以及它们适用的字符集。SHOW COLLATION
-
确定所用的字符集和校对
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%'; -
为了给表指定字符集和校对,可使用带子句的CREATE TABLE
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10)
) DEFAULT CHARACTER SET hebrew
COLLATE hebrew_general_ci; -
对每个列设置字符集和校对
CREATE TABLE mytable
(
columnn1 INT,
columnn2 VARCHAR(10),
columnn3 VARCHAR(10) CHARACTER SET latin1 COLLATE latin1_swedish_ci
) DEFAULT CHARACTER SET hebrew
COLLATE latin1_swedish_ci; -
在SELECT语句排序
SELECT * FROM customers
ORDER BY lastname, firstname COLLATE latin1_swedish_ci;
三、安全管理
1. 访问控制
需要给用户提供他们所需的访问权,且仅提供他们所需的访问权。这就是所谓的访问控制,管理访问控制需要创建和管理用户账号。
重要的是注意到,访问控制的目的不仅仅是防止用户的恶意企图。数据梦魇更为常见的是无意识错误的结果,如错打MySQL语句,在不合适的数据库中操作或其他一些用户错误。通过保证用户不能执行他们不应该执行的语句,访问控制有助于避免这些情况的发生。
2. 管理用户
获取用户账号列表
USE mysql;
SELECT user FROM user;
2.1 创建用户账号
CREATE USER test IDENTIFIED BY 'test01'
重新命名一个用户账号
RENAME USER test TO bforta;
2.2 删除用户账号
DROP USER bforta;
2.3 设置访问权限
-
查看账号权限
SHOW GRANTS FOR test;
- 为设置权限,使用GRANT语句。GRANT需要以下信息:
-
要授予的权限;
-
被授予访问权限的数据库或表;
-
用户名。
GRANT SELECT ON crashcourse.* TO test;
-
GRANT的反操作为REVOKE,用它来撤销特定的权限。
REVOKE SELECT ON crashcourse.* FROM test;
-
GRANT和REVOKE可在几个层次上控制访问权限:
- 整个服务器,使用GRANT ALL和REVOKE ALL;
- 整个数据库,使用ON database.*;
- 特定的表,使用ON database.table;
- 特定的列;
- 特定的存储过程。
出可以授予或撤销的每个权限。
权限 | 说明 |
---|---|
ALL | 除GRANT OPTION外的所有权限 |
ALTER | 使用ALTER TABLE |
ALTER ROUTINE | 使用ALTER PROCEDURE和DROP PROCEDURE |
CREATE | 使用CREATE TABLE |
CREATE ROUTINE | 使用CREATE PROCEDURE |
CREATE TEMPORARY TABLES | 使用CREATE TEMPORARY TABLE |
CREATE USER | 使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES |
CREATE VIEW | 使用CREATE VIEW |
DELETE | 使用DELETE |
DROP | 使用DROP TABLE |
EXECUTE | 使用CALL和存储过程 |
FILE | 使用SELECT INTO OUTFILE和LOAD DATA INFILE |
GRANT OPTION | 使用GRANT和REVOKE |
INDEX | 使用CREATE INDEX和DROP INDEX |
INSERT | 使用INSERT |
LOCK TABLES | 使用LOCK TABLES |
PROCESS | 使用SHOW FULL PROCESSLIST |
RELOAD | 使用FLUSH |
REPLICATION CLIENT | 服务器位置的访问 |
REPLICATION SLAVE | 由复制从属使用 |
SELECT | 使用SELECT |
SHOW DATABASES | 使用SHOW DATABASES |
SHOW VIEW | 使用SHOW CREATE VIEW |
SHUTDOWN | 使用mysqladmin shutdown(用来关闭MySQL) |
SUPER | 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER和SET GLOBAL。还允许mysqladmin调试登录 |
UPDATE | 使用UPDATE |
USAGE | 无访问权限 |
2.4 更改口令
更改用户口令,可使用SET PASSWORD语句
SET PASSWORD FROM test = PASSWORD('test02');
新口令必须传递到Password()函数进行加密
设置自己的口令:
SET PASSWORD = PASSWORD('test02');
四、数据库维护
1. 备份数据
像所有数据一样,MySQL的数据也必须经常备份。
备份解决方案:
- 使用命令行实用程序mysqldump转储所有数据库内容到某个外部文件。在进行常规备份前这个实用程序应该正常运行,以便能正确地备份转储文件。
- 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据(并非所有数据库引擎都支持这个实用程序)
- 可以使用MySQL的BACKUP TABLE或SELECT INTO OUTFILE转储所有数据到某个外部文件。这两条语句都接受将要创建的系统文件名,此系统文件必须不存在,否则会出错。数据可以用RESTORE TABLE来复原。
2. 进行数据库维护
MySQL提供了一系列的语句,可以(应该)用来保证数据库正确和正常运行。
-
ANALYZE TABLE,用来检查表键是否正确。
ANALYZE TABLE orders;
-
CHECK TABLE用来针对许多问题对表进行检查。在MyISAM表上还对索引进行检查。CHECK TABLE支持一系列的用于MyISAM表的方式。CHANGED检查自最后一次检查以来改动过的表。EXTENDED执行最彻底的检查,FAST只检查未正常关闭的表,MEDIUM检查所有被删除的链接并进行键检验,QUICK只进行快速扫描。
CHECK TABLE orders, orderitems;
- 如果MyISAM表访问产生不正确和不一致的结果,可能需要用REPAIR TABLE来修复相应的表。这条语句不应该经常使用,如果需要经常使用,可能会有更大的问题要解决。
- 如果从一个表中删除大量数据,应该使用OPTIMIZE TABLE来收回所用的空间,从而优化表的性能。
3. 诊断启动问题
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现。MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自动启动的,这些消息可能看不到。
在排除系统启动问题时,首先应该尽量用手动启动服务器。MySQL服务器自身通过在命令行上执行mysqld启动。
mysqld命令行选项:
-- help
显示帮助 ------ 一个选项列表;-- safe-mode
装载减去某些最佳配置的服务器;--verbose
显示全文本消息(为获得更详细的帮助消息与--help
联合使用);--version
显示版本信息然后退出。
4. 查看日志文件
- 错误日志。它包含启动和关闭问题以及任意关键错误的细节。此日志通常名hostname.err,位于data目录中。此日志名可用
--log-error
命令行选项更改。 - 查询日志。它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,因此不应该长期使用它。此日志通常名为hostname.log,位于data目录中。此名字可以用
--log
命令行选项更改。 - 二进制日志。它记录更新过数据(或者可能更新过数据)的所有语句。此日志通常名为hostname-bin,位于data目录内。此名字可以用
--log-bin
命令行选项更改。
注意,这个日志文件是MySQL5中添加的,以前的MySQL版本中使用的是更新日志。 - 缓慢查询日志。顾名思义,此日志记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为hostname-slow.log ,位于 data 目录中。此名字可以用
--log-slow-queries
命令行选项更改。
在使用日志时,可用FLUSH LOGS语句来刷新和重新开始所有日志文件。