MySQL相关文件——参数文件

1.参数文件

当MySQL实例启动的时候,数据库会先去读取一个配置参数文件,用来寻找数据库各种文件的所在位置及指定某些初始化参数,这些参数通常定义了某种内存结构有多大等,在默认情况下,MySQL实例会按照一定顺序在指定的位置进行读取,可以使用mysql --help | grep my.cnf来进行寻找。
[root@mysql8 ~]# ps -ef | grep mysqld
mysql     65894      1  0 14:56 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --defaults-file=/data/mysql/mysql_3306/my_3306.cnf
mysql     67514  65894  0 14:56 ?        00:02:11 **/usr/local/mysql/bin/mysqld --defaults-file=/data/mysql/mysql_3306/my_3306.cnf** --basedir=/usr/local/mysql --datadir=/data/mysql/mysql_3306/data --plugin-dir=/usr/local/mysql/lib/plugin --log-error=/data/mysql/mysql_3306/logs/error.log --open-files-limit=65535 --pid-file=mysql_3306.pid --socket=/data/mysql/mysql_3306/tmp/mysql_3306.sock --port=3306
root      71452  71399  0 20:55 pts/4    00:00:00 grep --color=auto mysqld
MySQL的参数文件和Oracle的参数文件较为类似,但是Oracle的参数文件如果在启动的时候无法找到那么Oracle无法进行mount操作。MySQL实例可以不需要参数文件,这时所有的参数值取决于编译MySQL时指定的默认值和源码中指定参数的默认值。

这时在错误日志下可能会出现如下信息:
2020-10-23T16:07:15.047467+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.15)  MySQL Community Server - GPL.
2020-10-23T08:07:15.250108Z mysqld_safe mysqld from pid file /data/mysql/mysql_3306/data/mysql_3306.pid ended
2020-10-23T08:18:33.706508Z mysqld_safe Logging to '/data/mysql/mysql_3306/logs/error.log'.
2020-10-23T08:18:33.743936Z mysqld_safe Starting mysqld daemon with databases from /data/mysql/mysql_3306/data
nice: cannot set niceness: Permission denied
2020-10-23T16:18:33.816762+08:00 0 [Warning] [MY-010140] [Server] Could not increase number of max_open_files to more than 5000 (request: 65535)
2020-10-23T16:18:34.399321+08:00 0 [Warning] [MY-000081] [Server] option 'wait_timeout': unsigned value 60000000 adjusted to 31536000.
2020-10-23T16:18:34.399428+08:00 0 [Note] [MY-010098] [Server] --secure-file-priv is set to NULL. Operations related to importing and exporting data are disabled
2020-10-23T16:18:34.399470+08:00 0 [Note] [MY-010949] [Server] Basedir set to /opt/mysql-8.0.15-linux-glibc2.12-x86_64/.
2020-10-23T16:18:34.399478+08:00 0 [System] [MY-010116] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.15) starting as process 53372
2020-10-23T16:18:34.462962+08:00 0 [Warning] [MY-010091] [Server] Can't create test file /data/mysql/mysql_3306/data/mysql8.lower-test
2020-10-23T16:18:34.462973+08:00 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /data/mysql/mysql_3306/data/ is case insensitive
2020-10-23T16:18:34.463227+08:00 0 [ERROR] [MY-013276] [Server] Failed to set datadir to '/data/mysql/mysql_3306/data/' (OS errno: 2 - No such file or directory)
2020-10-23T16:18:34.463278+08:00 0 [ERROR] [MY-010119] [Server] Aborting
2020-10-23T16:18:34.463339+08:00 0 [Note] [MY-010120] [Server] Binlog end
2020-10-23T16:18:34.463462+08:00 0 [System] [MY-010910] [Server] /usr/local/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.15)  MySQL Community Server - GPL.
2020-10-23T08:18:34.476538Z mysqld_safe mysqld from pid file /data/mysql/mysql_3306/data/mysql_3306.pid ended

MySQL的mysql架构中记录了访问该实例的权限,当找不到这个架构的时候MySQL实例将无法启动成功。MySQL的参数文件是以文本的方式进行存储的,用户可以进行编辑,并且有一些参数必须通过修改参数文件来达到修改的目的。

1.1什么是参数

可以把数据库的参数看做是一个键值对,键对应的就是参数名称,值对应的就是具体开启关闭或者其他状态值。

查看参数的方式:

  • mysql> show variables like ‘参数名字’; (支持通配符 %,建议使用这个各个版本都支持)
mysql> show variables like 'innodb_buffer_pool%';
+-------------------------------------+----------------+
| Variable_name                       | Value          |
+-------------------------------------+----------------+
| innodb_buffer_pool_chunk_size       | 134217728      |
| innodb_buffer_pool_dump_at_shutdown | ON             |
| innodb_buffer_pool_dump_now         | OFF            |
| innodb_buffer_pool_dump_pct         | 25             |
| innodb_buffer_pool_filename         | ib_buffer_pool |
| innodb_buffer_pool_in_core_file     | ON             |
| innodb_buffer_pool_instances        | 4              |
| innodb_buffer_pool_load_abort       | OFF            |
| innodb_buffer_pool_load_at_startup  | ON             |
| innodb_buffer_pool_load_now         | OFF            |
| innodb_buffer_pool_size             | 3221225472     |
+-------------------------------------+----------------+
11 rows in set (0.00 sec)
  • 通过information_schema 下的global_variables视图来进行查找(这个在MySQL8不可用)
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| test               |
+--------------------+
5 rows in set (0.00 sec)
mysql> use information_schema;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed

关于隐藏参数,Oracle及sqlserver都存在一些类似的隐藏参数,但是MySQL中没有这个。并且在Oracle,sqlserver中隐藏参数也不是被建议开启的除非有特别的需要。

1.2 参数类型

MySQL数据库中的参数可以被分为两类:动态参数(dynamic)和静态参数(static)

动态参数意味着可以在MySQL实例运行状态中进行更改,而静态参数意味着在整个MySQL实例的生命周期内是不允许被更改的(需要关机修改参数文件重启才可以生效)。还有一部分动态参数是基于当前会话的比如autocommit。

修改参数的方法:

1)使用SET对动态参数进行修改(以read_buffer_size为例)

语法结构:

  • SET [ global | session ] 参数名称 = value
mysql> set read_buffer_size=20480;
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> select @@session.read_buffer_size\G
*************************** 1. row ***************************
@@session.read_buffer_size: 20480
1 row in set (0.00 sec)
mysql> select @@global.read_buffer_size;
+---------------------------+
| @@global.read_buffer_size |
+---------------------------+
|                   8388608 |
+---------------------------+
1 row in set (0.00 sec)

上述过程将会话的参数read_buffer_size从8388608调整为20480,在会话级别查看修改是成功的,但是全局的值仍然是原来的值。

注意:即使是针对全局进行的更改,那么也只是这个MySQL实例当前生命周期的,并不会将改动映射到参数文件。下一次MySQL的重启仍然会去读原来的参数文件。如果想要做到永远修改则必须更改参数文件。

2)静态参数的修改,则必须修改参数文件。

在线修改静态参数会报错如下:

mysql> set global datadir='/data';
ERROR 1238 (HY000): Variable 'datadir' is a read only variable

猜你喜欢

转载自blog.csdn.net/qq_43250333/article/details/109465600