mysq服务器配置相关问题

97 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第3天,点击查看活动详情

相关面试问题

  1. 请分析一个Group By 语句的异常原因
  2. 如何比较系统运行配置和配置文件中配置是否一致?
  3. 举几个mysql 中的关键性能参数

分析Group By 语句异常原因

可能这个问题会被认为是sql语句的原因, 刚开始我也是这么认为的。不过不急,可以思考思考在看看下面解释

假设有一个这样的表sql 语句 : select prodcut_id, warehouse_id, sum(count) as cnt from stock group by product_id;

结果:在mysql 中的能执行成功,在其他的数据库可能出现语法错误

为什么能在mysql 中执行成功,是因为在mysql中的一个配置起了作用, 它就是 SQL MODE。

SQL MODE 的作用及设置

SQL_MODE值 : 会影响mysql 执行sql语句的结果。

  1. 配置mysql 处理SQL 的方式
  2. set [session/global/persist] sql_mode = 'xxxxxx' (persist是在mysql 8.0 中的)
  3. [mysqld] sql_mode = xxxxxxx

常用的SQL Mode

SQL_MODE= ‘ANSI’ SQL_MODE = ‘TRADITIONAL’

演示 only_full_group_by

  1. 刚开始查看sql_mode
  2. 执行sql语句, 可以的看到是执行成功的
  3. 修改sql_mode
  4. 再次执行上面的sql语句,会报错
  5. 此时必须在group by 后面写完整

演示 ansi_quotes

使用之后只能用单引号引字符串

演示 strict_trans_table

用普通模式,字符串插入int 类型 会成功用严格模式,则会进行检查,字符串不能插入int 类型成功

比较系统运行配置和配置文件中配置

知识点

  1. 使用set 命令 配置动态参数
  2. 使用pt-config-diff 工具比较配置文件 (检查在运行中的配置和系统配置)

使用set 命令 配置动态参数

  1. set [session | @@session.] system_var_name = expr
  2. set [global | @@global .] system_var_name = expr
  3. set [persist | @@persist .] system_var_name = expr (mysql 8.0 中增加)

检查在运行中的配置和系统配置(mysql 5.x)

pt-config-diff u=root, p=, h = localhost /etc/my.cnf

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

常用的性能参数

\