目 录CONTENT

文章目录

MySQL的启动选项和系统变量

FatFish1
2025-04-23 / 0 评论 / 0 点赞 / 33 阅读 / 0 字 / 正在检测是否收录...

启动选项

启动选项的命令行形式

启动选项就是mysql服务端或客户端启动时读取的配置,mysql的可执行文件都可以处理各自不同的启动选项,格式为:

--启动选项1[=值1] --启动选项2[值2]...

例如:

# 服务端mysqld可使用的选项:
mysqld --skip_networking    # 服务端禁止tcp/ip形式连接
mysqld --default-storage-engine=MyISAM      # 修改默认存储引擎为MyISAM,不指定默认为InnoDB

# 客户端mysql可使用的选项:
mysql -h127.0.0.1 -uroot -p

需要注意的是,不同的可执行文件可执行的选项是不同的,例如mysqld_safe就不能执行skip_networking选项,那么是否能使用以下写法?

mysqld_safe --skip_networking

是可以的,因为mysqld_safe调用mysqld,会将处理不了的启动选项向下传递

可以使用--help来查看支持的启动选项,例如:mysqld_safe --help ,但mysqld的比较特殊,要用mysqld --verbose --help

看上面的案例,可以看到有的是--开头,有的是-开头,这个是启动选项的长短形式,有些选项只有长形式,有些则有长形式和短形式,例如:

长形式

短形式

含义

--host

-h

主机名

--user

-u

用户名

--password

-p

密码

--port

-P

端口

--version

-V

版本信息

因此mysqld --port=3306mysqld -P3306mysqld -P 3306 三个是等价的,从这三个可以看出一些写法特点:

  • 长形式必须使用xx=yy的形式,且长形式分词的选项,可以使用-或_,例如--skip_networking--skip-networking 等价

  • 长形式一个完整的选项之间不能带空格,例如--port = 3306就不对

  • 短形式比较随意,可以带空格也可以不带

在配置文件中使用启动选项

配置文件的位置

除了上面看到的命令行形式,也可以在配置文件中使用启动选项,首先先确定有哪些可读的配置文件:

在Unix系统中,按照以下顺序找:

  1. /etc/my.cnf

  2. /etc/mysql/my.cnf

  3. SYSCONFDIR/my.cnf

  4. $MYSQL_HOME/my.cnf :特定于服务器的选项(仅限服务器)

  5. defaults-extra-file :命令行指定的额外配置文件路径

  6. ~/.my.cnf :用户特定选项

  7. ~/.mylogin.cnf :用户特定的登录路径选项(仅限客户端)

SYSCONFDIR表示在使用 CMake 构建 MySQL 时使用 SYSCONFDIR 选项指定的目录。默认情况下,这是位于编译安装目录下的 etc 目录

MYSQL_HOME 是一个环境变量,该变量的值是我们自己设置的,我们想设置就设置,不想设置就不设置。该目录有就读,没有就不读。且该目录的my.cnf只能存放服务器选项

两个~开头的是与UNIX用户挂钩的,哪个用户启动服务器,读自己特定的配置文件

配置文件格式

[server]
(具体的启动选项...)

[mysqld]
(具体的启动选项...)

[mysqld_safe]
(具体的启动选项...)

[client]
(具体的启动选项...)

[mysql]
(具体的启动选项...)

[mysqladmin]
(具体的启动选项...)

格式都是组+内容

server、mysqld、mysqld_safe、client、mysql、mysqladmin都是组名,即对应不同的可执行文件处理不同的配置,如下:

启动命令

类别

能读取的组

mysqld

启动服务器

[mysqld]、[server]

mysqld_safe

启动服务器

[mysqld]、[server]、[mysqld_safe]

mysql.server

启动服务器

[mysqld]、[server]、[mysql.server]

mysql

启动客户端

[mysql]、[client]

mysqladmin

启动客户端

[mysqladmin]、[client]

mysqldump

启动客户端

[mysqldump]、[client]

这与命令行形式中,不同的可执行文件使用不同的启动选项是等价的

以server组为例,展示启动选项的写法,在/etc/mysql/my.cnf中添加如下内容:

[server]
skip-networking
default-storage-engine=MyISAM

写法没有那么严格,等号两边都可以有空格

然后启动服务器mysqld,效果与mysqld --skip-networking --default-storage-engine=MyISAM 一致

启动选项的优先级

启动选项优先级满足如下:

  • 命令行优先级>配置文件优先级

  • 按照配置文件搜索顺序,越靠后的优先级越高,例如~/.my.cnf 中配置会覆盖/etc/my.cnf 中的同名配置

  • 同一个配置文件,按读取组,定义在后面的组优先级比定义在前面的高,例如/etc/my.cnf 中存在如下写法,结果将会应用InnoDB

[server]
default-storage-engine=MyISAM

[mysqld]
default-storage-engine=InnoDB
  • 使用命令行启动项--defaults-file将覆盖所有配置文件,并且不再读取,例如mysqld --defaults-file=/tmp/myconfig.txt ,mysql服务器将会去找/tmp/myconfig.txt 文件,如果找不到就报错,其他配置文件全部都不会再读取

系统变量

系统变量查看与设置

系统变量可以理解为一些特殊的启动选项,它们有以下特点:

  • 影响系统行为

  • 大多数可以在运行时热修改,无需停止并重启服务器

可以使用以下命令查看:

SHOW VARIABLES [LIKE XXX]

例如:SHOW VARIABLES LIKE 'default%'

系统变量和启动选项一样,可以通过命令行或者配置文件设置:

mysqld --default-storage-engine=MyISAM --max-connections=10 与如下配置等价:

 [server]
 default-storage-engine=MyISAM
 max-connections=10

对于支持热修改的系统变量,也可以用客户端登录之后,使用SET语句修改:

SET default-storage-engine = MyISAM

系统变量的范围

系统变量有两种范围:

  • GLOBALE:全局变量,影响服务器整体操作

  • SESSION:会话变量,又叫LOCAL变量,影响某个客户端连接操作

因此热修改的SET操作也支持两种范围的修改

SET GLOBAL default_storage_engine = MyISAM;
SET SESSION default_storage_engine = MyISAM;

如果不加范围,默认修改的是SESSION级别

需要注意的是:如果某个客户端修改了GLOBAL级别的系统变量,已连接的客户端都不会被修改,只会修改后续接入的客户端的值

同样,查看操作SHOW也支持不同范围

SHOW [GLOBAL|SESSION] VARIABLES LIKE 'default_storage_engine'

并不是所有的系统变量都有全局和会话级别,例如max_connections只有全局级别,而insert_id表示对某个包含AUTO_INVREMENT列插入时的初始值,只有会话级别

此外,个别系统变量不能以启动选项的形式传入,例如auto_increment_offset 、character_set_client

0

评论区