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_name
 COLLATE collate_name;

MySQL决定字符集和校对的方式

  • 如果指定CHARACTER SETCOLLATE两者,则使用这些值
  • 如果只指定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用户账号和信息存储在名为mysqlMySQL数据库中,当需要获取所有用户账号列表时,可以使用以下代码

    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以外所有权限
    ALTER
    CREATE
    DELETE
    DROP
    EXECUTE 使用CALL和存储过程
    FILE 使用SELECT INTO OUTFILELOAD DATA INFILE
    GRANT OPTION
    INDEX
    INSERT
    LOCK TABLES
    PROCESS
    RELOAD
    REPLICATION
    SELECT
    SHOW
    SHUTDOWN
    SUPER
    UPDATE
    USAGE 无访问权限

    授权时,用户必须先存在,但是被授权的对象可以不存在,这样的副作用是,当某个数据库或表被删除时,相关的权限仍然存在,如果未来再次创建这些数据库和表,这些权限仍然起作用

  • 更改口令

SET PASSWORD FOR user_name = Password('PASSWORD')

-- 更新当前登录用户的口令
SET PASSWORD = Password('password')

数据库的维护

备份数据

MySQL数据库时基于磁盘的文件,普通的备份系统和例程就能备份MySQL的数据,但是由于这些文件总是处于打开和使用的状态,普通的文件副本备份不一定总是有效

几种解决方案:

  1. 使用命令函实用程序mysqldump转储所有数据库内容到某个外部文件
  2. 可用命令行实用程序mysqlhotcopy从一个数据库复制所有数据
  3. 使用BACKUP TABLE 或· SELECT INTO OUTFILE转储所有数据到某个外部文件

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

进行数据库维护

ANALYZE TABLE用来检查表健是否正确
CHECK TABLE用来针对许多问题对表进行检查

诊断启动问题

服务器启动问题通常在对MySQL配置或服务器本身进行更改时出现
MySQL在这个问题发生时报告错误,但由于多数MySQL服务器是作为系统进程或服务自启动的,这个消息可能看不到
在排除系统启动问题时,首先应该尽量手动启动服务器
MySQL服务器自身通过在命令杭商执行mysqld启动
几个重要的mysqld命令行选项

  1. --help显示帮助
  2. --safe-mode装在减去某些最佳配置的服务器
  3. --verbose显示全文本消息
  4. --version显示版本信息然后退出

查看日志文件

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

  1. 错误日志
  2. 查询日志
  3. 二进制日志
  4. 缓慢查询日志

改善性能

在诊断应用的滞缓现象和性能问题时,性能不良的数据库通常是最常见的祸因
性能优化讨论和分析的出发点:

  1. 硬件建议
  2. 专用服务器
  3. 调整内存分配、缓冲区大小
  4. 多线程
  5. 编写SELECT语句的方式
  6. 使用存储过程
  7. 正确的数据类型
  8. 检索用于数据
  9. DELAYED关键字
  10. 开启和关闭自动提交
  11. 索引
  12. or 和 union
  13. like 和 fulltext
  14. 每条规则都会在某些情况下被打破

你可能感兴趣的:(mysql,数据库,安全)