笔记:慕课网MySQL面试

MySQL版本

工作中使用的MySQL是什么版本的?为什么选择这个版本?

答题技巧:

  1. 当前公司使用到的版本

  2. 枚举所用发行版的优点,说明为什么不使用官方版本

知识点:

  1. MySQL常见的发行版

    • MySQL官方企业版(收费)、社区版(免费)

    • Percona MySQL(基于社区版二次开发,免费提供了一些类似企业版的收费工具)

    • MariaDB(MySQL创始人基于其源码开发的另一个数据库)

  2. 各个发行版之间的区别及优缺点

    image-20200722224235031

    image-20200722225041220

    image-20200722225248324

    image-20200722225434335

如何决定是否要对MySQL进行升级?如何进行升级?

答题技巧:

是否升级:

  1. 升级可以给业务带来的好处

    是否可以解决业务上某一方面的痛点

    是否可以解决运维上某一方面的痛点

  2. 升级可能给业务带来的风险、影响

    对原业务程序的支持是否有影响

    对原业务程序的性能是否有影响

如何升级:

  1. 数据库升级方案的制定

    评估受影响的业务系统

    升级的详细步骤:对待升级数据库进行备份;升级Slave服务器版本;手动进行主从切换;升级Master服务器版本;升级完成后进行业务检查。

    升级后数据库的环境检查

    升级后的业务检查

  2. 升级失败的回滚方案

    升级失败回滚步骤

    回滚后的数据库环境检查

    回滚后的业务检查

最新的MySQL版本是什么?它有什么特性比较吸引你?

知识点:

MySQL8.0新特性

image-20200722232323847
image-20200722232511705
image-20200722232639199

用户管理

如何在给定场景下为某用户授权

知识点:

  1. 如何定义数据库帐号?

    • 使用用户名@可访问控制列表格式定义帐号

      可访问控制列表一般格式如下:

      1. %:表示可以从所有外部主机访问

      2. 192.168.1.%`:表示可以从192.168.1网段访问

    • 使用CREATE USER命令建立用户

  2. MySQL常用的用户权限

    可以使用show privileges;命令查看权限的作用以及拥有该权限的用户

    • Admin

      image-20200915204451781

    • DDL

      image-20200915204520230

    • DML

      image-20200915204553068

  3. 如何为用户授权?

    • 遵循最小权限原则

    • 使用grant命令给用户进行授权

    • 使用revoke命令回收用户权限

      image-20200915205950695

如何保证数据库帐号安全

  1. 数据库用户管理流程规范

    • 最小权限原则

    • 密码强度策略

    • 密码过期原则和限制密码重用原则

      password_option: {
          PASSWORD EXPIRE [DEFAULT | NEVER | INTERVAL N DAY]
        | PASSWORD HISTORY {DEFAULT | N}
        | PASSWORD REUSE INTERVAL {DEFAULT | N DAY}
        | PASSWORD REQUIRE CURRENT [DEFAULT | OPTIONAL]
      }
  2. 密码管理策略(如密码安全强度等 )

如何从一个实例迁移数据库帐号到另一个实例

image-20200915211321094

导出用户建立及授权语句:pt-show-grants u=username,p=password,h=localhost在待迁移的实例上执行该语句就会生成授权语句,然后我们切换到目标实例上执行授权语句即可。

服务器配置

请分析一个Group By语句的异常原因

给出如下数据表:

image-20200915212752697

使用以下语句查询及其结果:

image-20200915213307163

理论上上述语句不应该执行成功,当时在此时不仅成功执行而且还输出了数据,只是输出的数据不符合预期。如果将SQL_MODE参数设置为ONLY_FULL_GROUP_BY,那么对于GROUP BY聚合操作出现在SELECT中的列、HAVING或者ORDER BY子句的非聚合列,没有在GROUP BY中出现将会抛出SQL语法检查报错。

查看当前SQL_MODE:show variables like 'sql_mode';

设置session级别的SQL_MODE:set session sql_mode='ONLY_FULL_GROUP_BY'; 如果你需要设置多个值则用,分隔

遵守ANSI标准需要给SQL_MODE设置以下值

  1. ANSI_QUITES,将禁止使用双引号来引用字符串,要求使用单引号。

  2. REAL_AS_FLOAT,将float作为real的同义词(默认是double作为real的同义词)

  3. PIPES_AS_CONCAT,将||视为字符串的连接操作符而非或运算符

或者设置SQL_MODE值为ANSI

常用的SQL_MODE值

  1. STRICT_TRANS_TABLES:在事务存储引擎上启用严格模式。

  2. SREICT_ALL_TABLES:在所有存储引擎上启用严格模式。

  3. ERROR_FOR_DIVISION_BY_ZERO:不允许0作为除数。

  4. NO_AUTO_CREATE_USER:在用户不存在时不允许grant语句自动建立用户。

  5. NO_ZERO_IN_DATE:日期数据内不能含0。

  6. NO_ZERO_DATE:日期数据不能含0。

  7. NO_ENGINE_SUBSTITUTION:当指定的存储引擎不可用时报错。

或者设置SQL_MODE值为TRADITIONAL

如何比较系统运行配置和配置文件中的配置是否一致

举几个MySQL中的关键性能参数

日志

存储引擎

MySQL架构

备份恢复

管理及监控

优化及异常

最后更新于

这有帮助吗?