第 7 章MySQL服务器管理
服务器配置验证
MySQL提供了一个名为--validate-config
的选项,该选项允许用户在正常操作模式之外检查MySQL服务器的启动配置中是否存在问题。使用此选项时,如果配置没有问题,服务器将终止运行并返回退出代码0;如果发现配置错误,服务器将显示诊断消息并返回退出代码1。
例如,如果你运行一个包含未知选项的命令,如--no-such-option
,服务器会返回一个错误消息,并返回退出代码1:
mysqld --validate-config --no-such-option
如果你的命令产生了警告,例如关于未识别的布尔值,这些警告会根据log_error_verbosity
的值显示,但不会阻止验证过程,并且退出代码将是0:
mysqld --validate-config --log_error_verbosity=2 --read-only=s --transaction_read_only=s
如果命令同时产生警告和错误,那么错误消息和警告都会显示,并且退出代码为1:
mysqld --validate-config --log_error_verbosity=2 --no-such-option --read-only=s --transaction_read_only=s
--validate-config
选项仅检查服务器能够进行的配置,而不会初始化存储引擎或其他插件和组件。因此,与这些未初始化的子系统相关的配置选项不会被验证。
这个选项特别适用于升级后的场景,可以检查旧版服务器使用的任何选项是否在新版本中已被弃用或标记为过时。例如,假设你从MySQL 5.7升级到8.4,并且旧配置中包含已删除的系统变量,使用--validate-config
将会显示这些变化。
可以使用--defaults-file
选项与--validate-config
结合使用,以便只验证特定文件中的选项。但是,--defaults-file
必须是命令行上的第一个选项,否则会产生错误消息。
服务器 SQL 模式
MySQL服务器可以在不同的SQL模式下运行,并且可以应用这些模式 对于不同的客户端不同,具体取决于sql_mode系统变量的值。DBA 可以设置全局SQL模式以匹配站点服务器操作要求,并且每个应用程序都可以设置其会话SQL模式根据自己的要求。
模式会影响MySQL支持的SQL语法和数据验证检查的执行情况。这使得在不同的环境中使用MySQL变得更加容易,并将MySQL与其他数据库服务器一起使用。
要设置SQL模式,可以使用以下方法:
-
在服务器启动时设置SQL模式:在命令行中使用 --sql-mode=“modes”选项,或在选项文件中使用 sql-mode=“modes”,例如(Unix操作系统)或(Windows)。modes是不同模式的列表,用逗号分隔。
-
要在运行时更改SQL模式,请使用SET语句:
- SET GLOBAL sql_mode = ‘modes’;
- SET SESSION sql_mode = ‘modes’;
设置变量需要SYSTEM_VARIABLES_ADMIN权限(或已弃用的SUPER权限)并影响连接的所有客户端的操作从那时起。设置变量仅影响当前会话。每个客户端都可以更改其会话值sql_mode为任何值。GLOBAL SESSION
-
要确定当前全局或会话sql_mode设置,请选择其价值:
- SELECT @@GLOBAL.sql_mode;
- SELECT @@SESSION.sql_mode;
MySQL 8支持多种SQL模式,以下是一些常见的SQL模式:
- ANSI_QUOTES:启用ANSI引用符(双引号)而不是MySQL的反引号。
- PIPES_AS_CONCAT:将管道符(|)视为字符串连接操作符,而不是OR运算符。
- IGNORE_SPACE:忽略SQL语句中的空格。
- NO_AUTO_CREATE_USER:禁止自动创建用户账户。
- NO_BACKSLASH_ESCAPES:禁用反斜杠转义字符。
- STRICT_TRANS_TABLES:在事务中遇到无效或丢失的值时,使事务回滚。
- SQL_MODE=‘STRICT_ALL_TABLES’:对所有表执行严格模式检查。
- NO_ZERO_IN_DATE:不允许日期中的月份和天数为零。
- NO_ZERO_DATE:不允许日期为零值。
- INVALID_DATES:将无效日期视为NULL。
- ERROR_FOR_DIVISION_BY_ZERO:除以零时产生错误。
- NO_ENGINE_SUBSTITUTION:不允许在查询中使用未定义的存储引擎。
- PERSIST:持久化设置,即使重启服务器也不会丢失。
要查看当前MySQL实例的所有S