02启动选项和系统变量

学习《MySQL是怎样运行的》,感谢作者!

启动选项和配置文件 #

在程序启动时指定的设置项,也称之为启动选项startup option(可以在命令行中/配置文件中 指定)
由于在centos7中使用systemctl start mysqld启动mysql,所以好像没法用命令行指定启动选项了

程序(可能有些程序新版本已经没有了)的对应类别和能读取的组:
ly-20241212142154302

这里讲配置文件的方式设置启动选项:

#添加配置
vim /etc/my.cnf
[server]
skip-networking #禁止tcp网络连接
default-storage-engine=MyISAM #建表默认使用M有ISAM存储引擎


#效果
▶ mysql -h127.0.0.1 -uroot -p
Enter password: 
ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (111)

#去除tcp网络连接限制后新建一个表
▶ mysql -h127.0.0.1 -uroot -p #可以连接上
mysql> create table default_storage_engine_demo(i int);
Query OK, 0 rows affected (0.01 sec)
mysql> show create table default_storage_engine_demo;
+-----------------------------+----------------------------------------------------------------------------------------------------------------+
| Table                       | Create Table                                                                                                   |
+-----------------------------+----------------------------------------------------------------------------------------------------------------+
| default_storage_engine_demo | CREATE TABLE `default_storage_engine_demo` (
  `i` int(11) DEFAULT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1 |

如果多个配置文件都配置了某个选项,如/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf都配置了,则以最后一个配置的为主
如果同一个配置文件,比如[server]组和[mysqld]组都出现了default-storage-engine配置,则以后出现的组中的配置为准
如果一个启动选项既在命令行中出现,又在配置文件中配置,则以命令行中的为准

系统变量 #

查看系统变量

mysql> SHOW VARIABLES LIKE 'default_storage_engine';
+------------------------+--------+
| Variable_name          | Value  |
+------------------------+--------+
| default_storage_engine | InnoDB |
+------------------------+--------+
1 row in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'default%';
+-------------------------------+-----------------------+
| Variable_name                 | Value                 |
+-------------------------------+-----------------------+
| default_authentication_plugin | mysql_native_password |
| default_password_lifetime     | 0                     |
| default_storage_engine        | InnoDB                |
| default_tmp_storage_engine    | InnoDB                |
| default_week_format           | 0                     |
+-------------------------------+-----------------------+
5 rows in set (0.00 sec)

mysql> SHOW VARIABLES LIKE 'max_connections';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| max_connections | 151   |
+-----------------+-------+
1 row in set (0.00 sec)

大部分系统变量,可以在服务器程序运行过程中动态修改而无须停止并重启服务器

  1. 不同作用范围的系统变量
    GLOBAL(全局范围):影响服务器的整体操作
    SESSION(会话范围):影响某个客户端连接的操作

  2. 让之后新连接到服务器的客户端都用MyISAM作为默认的存储引擎

    #不会对这之前已连接的客户端产生影响
    SET GLOBAL default_storage_engine=MyISAM; #systemctl restart mysqld时候,该配置就失效了
    
  3. 只对本客户端使用

    SET SESSION default_storage_engine=MyISAM;#或
    SET default_storage_engine=MyISAM;
    

查看系统变量

SHOW [GLOBAL|SESSION] VARIABLES [LIKE '匹配的模式'];

状态变量 #

状态变量用来显示服务器程序运行状态
状态变量也分GLOBAL|SESSION

SHOW [GLOBAL|SESSION] STATUS [LIKE 匹配的模式];

mysql> SHOW STATUS LIKE 'thread%';
+-------------------+-------+
| Variable_name     | Value |
+-------------------+-------+
| Threads_cached    | 0     |
| Threads_connected | 2     |
| Threads_created   | 2     |
| Threads_running   | 1     |
+-------------------+-------+