启动选项
启动选项的命令行形式
启动选项就是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
看上面的案例,可以看到有的是--开头,有的是-开头,这个是启动选项的长短形式,有些选项只有长形式,有些则有长形式和短形式,例如:
因此mysqld --port=3306
与mysqld -P3306
或mysqld -P 3306
三个是等价的,从这三个可以看出一些写法特点:
长形式必须使用xx=yy的形式,且长形式分词的选项,可以使用-或_,例如
--skip_networking
和--skip-networking
等价长形式一个完整的选项之间不能带空格,例如
--port = 3306
就不对短形式比较随意,可以带空格也可以不带
在配置文件中使用启动选项
配置文件的位置
除了上面看到的命令行形式,也可以在配置文件中使用启动选项,首先先确定有哪些可读的配置文件:
在Unix系统中,按照以下顺序找:
/etc/my.cnf
/etc/mysql/my.cnf
SYSCONFDIR/my.cnf
$MYSQL_HOME/my.cnf
:特定于服务器的选项(仅限服务器)defaults-extra-file
:命令行指定的额外配置文件路径~/.my.cnf
:用户特定选项~/.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都是组名,即对应不同的可执行文件处理不同的配置,如下:
这与命令行形式中,不同的可执行文件使用不同的启动选项是等价的
以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
评论区