MySQL必知必会 | 安全、维护、性能

全球化和本地化
关于MySQL处理不同字符集和语言
字符集和校对顺序
数据库被用来存储和检索数据,不同的语言和字符集需要以不同的方式存储和检索,因此,MySQL需要适应不同的字符集,适应不同的排序方式
一些术语:
 字符集:字母和富豪的集合
 编码:某某个字符成员的内部表示
 校对:规定字符如何比较的指令
使用字符集和校对顺序
查看MySQL所支持的字符集完整列表
SHOW CHARACTER SET;
查看所支持校对的完整列表
SHOW COLLATION;
确认系统使用的字符集和校对
SHOW VARIABLES LIKE 'character%';
SHOW VARIABLES LIKE 'collation%';
一般情况下,不同的表甚至不同的列都可能需要不同的字符集,可以在创建表的时候指定
CREATE TABLE table_name
(col_name_1	type,col_name_2	type CHARACTER SET character_name COLLATE collate_name
)DEFAULT CHARACTER SET character_nameCOLLATE collate_name;
MySQL决定字符集和校对的方式
- 如果指定
CHARACTER SET和COLLATE两者,则使用这些值 - 如果只指定
CHARACTER SET,则使用词字符集以及其对应的默认校对 - 如果两者都不指定,则使用数据库默认的字符集和校对
 
校对在对用ORDER BY子句检索出来的数据排序时,起到重要的作用(如是否考虑大小写),如果需要用与常见表示不同的校对顺序排序特定的SELECT语句,可以在语句自身中设置
SELECT * FROM table_nmae
ORDER BY COL_1,COL_2 COLLATE collate_name
COLLATE还可以使用于GROUP BY/HAVING/聚集函数/别名
安全管理
关于访问控制和用户管理
访问控制
- MySQL服务器的安全基础是,用户应该对他们需要的数据具有合适的访问权
 - 管理访问控制需要创建和管理用户账号
 root账号对整个MySQL数据库具有完全控制,在日常的MySQL操作中不应该使用它
管理用户
- 
MySQL用户账号和信息存储在名为
mysql的MySQL数据库中,当需要获取所有用户账号列表时,可以使用以下代码USE mysql; SELECT user FROM user; - 
创建用户账号
CREATE USER user_name IDENTIFIED BY 'password';INENTIFIED BY指定的口令为纯文本
 - 
重命名一个用户账号
RENAME USEER user_name TO new_name; - 
删除用户帐号
DROP USER user_name;删除用户账号及其相关权限
 - 
查看用户访问权限
SHOW GRANTS FOR user_name; - 
授予用户权限
GRANT option ON table_name.col_name TO user_name - 
撤销权限
REVOKE option ON table_nmae.col_name FROM user_name - 
可以被操作的权限
权限 说明 ALL除了 GRANT OPTION以外所有权限ALTERCREATEDELETEDROPEXECUTE使用 CALL和存储过程FILE使用 SELECT INTO OUTFILE和LOAD DATA INFILEGRANT OPTIONINDEXINSERTLOCK TABLESPROCESSRELOADREPLICATIONSELECTSHOWSHUTDOWNSUPERUPDATEUSAGE无访问权限 授权时,用户必须先存在,但是被授权的对象可以不存在,这样的副作用是,当某个数据库或表被删除时,相关的权限仍然存在,如果未来再次创建这些数据库和表,这些权限仍然起作用
 - 
更改口令
 
SET PASSWORD FOR user_name = Password('PASSWORD')-- 更新当前登录用户的口令
SET PASSWORD = Password('password')
数据库的维护
备份数据
MySQL数据库时基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据,但是由于这些文件总是处于打开和使用的状态,普通的文件副本备份不一定总是有效
几种解决方案:
- 使用命令函实用程序
mysqldump转储所有数据库内容到某个外部文件 - 可用命令行实用程序
mysqlhotcopy从一个数据库复制所有数据 - 使用
BACKUP TABLE或·SELECT INTO OUTFILE转储所有数据到某个外部文件 
为了保证所有数据都被写到磁盘(包括索引数据),可能需要在进行备份前使用 FLUSH TABLES 语句
进行数据库维护
ANALYZE TABLE用来检查表健是否正确
 CHECK TABLE用来针对许多问题对表进行检查
诊断启动问题
服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现
 MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自启动的,这个消息可能看不到
 在排除系统启动问题时,首先应该尽量手动启动服务器
 MySQL服务器自身通过在命令杭商执行mysqld启动
 几个重要的mysqld命令行选项
--help显示帮助--safe-mode装在减去某些最佳配置的服务器--verbose显示全文本消息--version显示版本信息然后退出
查看日志文件
MySQL维护管理员依赖的一系列日志文件
 主要日志文件有以下几种:
- 错误日志
 - 查询日志
 - 二进制日志
 - 缓慢查询日志
 
改善性能
在诊断应用的滞缓现象和性能问题时,性能不良的数据库通常是最常见的祸因
 性能优化讨论和分析的出发点:
- 硬件建议
 - 专用服务器
 - 调整内存分配、缓冲区大小
 - 多线程
 - 编写
SELECT语句的方式 - 使用存储过程
 - 正确的数据类型
 - 检索用于数据
 DELAYED关键字- 开启和关闭自动提交
 - 索引
 - or 和 union
 - like 和 fulltext
 - 每条规则都会在某些情况下被打破
 


