🔥个人主页: 中草药
🔥专栏:【MySQL】探秘:数据库世界的瑞士军刀
一、系统变量和选项
当通过mysqld启动数据库服务器时,可以通过选项文件或命令行中提供选项。一般,为了确保服务器在每次运行时都使用相同的选项,最好的方法是在选项文件中指定相应的选项。
mysqld从选项文件中的 [mysqld] 和 [server] 组(节点)中读取选项内容
mysqld接受的选项可以通过 mysqld --verbose --help 查看,列表中的有些项目是可以在服务器启动时设置的系统变量,系统变量可以在连接MySOL后使用 SHOW VARIABLES 语句查看,但有些内容只在--help 中存在,使用 SHOW VARIABLES 时并没有显示,这是因为它们只是选项而不是系统变量。选项值可以通过命令行和选项文件设置,部分系统变量可以通过 SET 语句动态设置值。
概述
系统变量是 MySQL 服务器在运行时的配置参数,用于控制服务器的各种行为(如内存分配、并发连接数、日志记录等)。它们分为 全局变量(GLOBAL) 和 会话变量(SESSION)
官方文档 MySQL :: MySQL 8.0 Reference Manual :: 7.1.4 Server Option, System Variable, and Status Variable Reference
全局变量:影响整个 MySQL 服务器的行为,修改后对所有新建立的会话生效。
会话变量:仅影响当前客户端连接(会话),断开后失效。
状态变量:包含了有关运行时操作的计数器和统计信息
选项 | 系统变量 | 说明 |
---|---|---|
--character-set-server | character_set_server | 服务器的默认字符集,默认 utf8mb4,如果设置了这个变量,还应该设置 collation_server 来指定字符集的排序规则。MySQL 8.0 之前版本默认字符集是 latin1(不支持中文),建议明确指定此选项为 utf8mb4 |
--collation-server | collation_server | 服务器的默认排序,默认 utf8mb4_0900_ai_ci(0900:表示unicode的版本9;ai:accent insensitive 口音不敏感;ci:case insensitive 不区分大小写) |
--port | port | MySQL 服务启动后监听的端口号 |
--datadir | datadir | MySQL 服务器的数据目录 |
--default-storage-engine | default_storage_engine | 表的默认存储引擎,默认是innodb |
--log-output | log_output | 一般查询日志和慢速查询日志输出的目的地,值可以是 TABLE,FILE 和 NONE,可以同时指定多个值,NONE 的优先级最高 |
--general-log | general_log | 是否启用一般查询日志。值为 0 (或 OFF) 禁用日志,为 1 (或 ON ) 来启用日志。日志输出目录由 log_output 系统变量控制 |
--general-log-file | general_log_file | 一般查询日志文件的名称。默认值是 host_name.log |
--slow-query-log | slow_query_log | 是否启用慢查询日志。值为 0 (或 OFF) 禁用日志,为 1 (或 ON ) 来启用日志。日志输出目录由 log_output 系统变量控制 |
--slow-query-log-file | slow_query_log_file | 慢查询日志文件的名称。默认值是 host_name-slow.log,一般指定绝对路径 |
--long-query-time | long_query_time | 如果查询花费的时间超过这个数秒,服务器将增加 Slow_queries 状态变量,如果慢查询日志开启,查询将被记录到慢查询日志文件中,默认值为 10,单位为秒 |
--log-error | log_error | 默认的错误日志目标。如果目标是控制台值为 stderr,目标是一个文件,值为具体的文件名 |
--log-bin | N/A | 指定用于二进制日志文件的基本名称 |
--server-id | server_id | 该变量指定服务器 ID,默认为 1 。在集群环境不能重复 |
--max-connections | max_connections | 允许客户端同时连接的最大数 |
--table-open-cache | table_open_cache | 所有线程可以打开的表的数量 |
--innodb-log-buffer-size | innodb_log_buffer_size | InnoDB 向磁盘写入日志文件的缓冲区大小,默认 16MB |
--innodb-buffer-pool-size | innodb_buffer_pool_size | InnoDB 缓存表和索引数据的缓冲区大小,默认 128MB |
--innodb-redo-log-capacity | innodb_redo_log_capacity | 重做日志文件占用的磁盘空间 |
--innodb-thread-concurrency | innodb_thread_concurrency | 定义 InnoDB 内部允许的最大线程数,默认值 0 ,多用于高性能机器上的调优 |
--innodb-autoextend-increment | innodb_autoextend_increment | 自动扩展 InnoDB 系统表空间文件的增量大小 (以兆为单位)。默认值为 64。 |
--flush-time | flush_time | 如果将该值设置为非零值,则每 flush_time 秒关闭一次所有表,以释放资源并将未刷新的数据同步到磁盘。 |
--join-buffer-size | join_buffer_size | 用于普通索引扫描、范围索引扫描和不使用索引从而执行全表扫描的连接的缓冲区的最小大小,默认 256KB |
--max-allowed-packet | max_allowed_packet | 一个数据包的最大大小,默认值是 64MB。 |
--max-connect-errors | max_connect_errors | 来自客户端主机连续连接请求失败数达到指定值后,服务器将阻止该客户端的连接。 |
--open-files-limit | open_files_limit | mysqld 在操作系统中可用的文件描述符的数量 |
--sort-buffer-size | sort_buffer_size | 每个必须执行排序的会话分配的缓冲区大小 |
--binlog-row-event-max-size | binlog_row_event_max_size | 当记录基于行的二进制日志时,设置事件的最大值,必须是 256 的倍数,默认值 8192 字节,如果事件不能分割,则可能超过最值。 |
选项文件
选项是 MySQL 服务器或客户端在启动时指定的配置参数,通常通过 配置文件(如 my.cnf
或 my.ini
)或 命令行参数 设置。
文件名 | 说明 |
---|---|
/etc/my.cnf | 全局 |
/etc/mysql/my.cnf | 全局 |
$MYSQL_HOME/my.cnf | 服务器特定选项(仅限服务器) |
defaults-extra-file | 如果存在其他选项文件可以通过 --defaults-extra-file 选项指定 |
~/.my.cnf | 用户特定选项 |
~/.mylogin.cnf | 用户特定的登录路径选项(仅限客户端) |
DATADIR/mysqld-auto.cnf | 系统变量(仅限服务器) |
读取顺序从上之下,优先级从低到高(覆盖)
使用系统变量
通过调整mysql的系统变量去适配我们的业务环境和硬件资源
注意事项
1)设置系统变量的语法与命令选项的语法相同,指定变量名称时,破折号和下划线可以互换使用。例如,--general_log=0N 和general-log=ON 是等价的。推荐变量名称使用_
2)大部分系统变量是动态的,在服务器运行时可以通过 SET 语句动态更改,并且无需停止和重新启动服务器。在服务器运行时,使用 SET 语句设置系统变量,需要指定作用域(也可以在前面加上@@ 修饰符),然后指定系统变量的名称,名称必须使用下划线而不是破折号,如下所示:
mysql> SET GLOBAL max_connections = 1000;
mysql> SET @@GLOBAL.max_connections = 1000;
将全局系统变量持久化到mysqld-auto.cnf文件,同时设置运行值
#PERSIST 表示持久化的同时设置全局变量的值
mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;
将全局系统变量持久化到mysqld-auto.cnf文件,同时不设置运行值
#PERSIST 表示持久化的同时设置全局变量的值
mysql> SET PERSIST_0NLY max_connections = 1000;
mysql> SET @@PERSIST_ONLY.max_connections = 1000;
删除持久化的系统变量可以使用语句
RESET PERSIST IF EXISTS system_var_name;
设置Session系统变量,时区为“+8:00”
mysql> SET SESSION time_zone='+8:00';
mysql> SET @@SESSION.time_zone='+8:00';
mysql> SET @@time_zone='+8:00';
3)对于数值型的系统变量,用带有后缀的值指定时,只适用于选项方式,而不能用在SET方式中;SET方式可以使用表达式为系统变量指定值,而在选项方式中不允许,如下所示:
# 选项形式
root@zcy-vm:~# mysqld--max_allowed_packet=16M #允许
root@zcy-vm:~# mysqld --max_allowed_packet=16*1024*1024 #不允许
# 运行时SET形式
mysql> SET GLOBAL max_allowed_packet=l6M; #不允许
mysql> SET GLOBAL max_allowed_packet=16*1024*1024; #允许
4)一部分系统变量是内置的,也有一些需要通过安装服务器插件或组件才可以使用
比如用于审计插件 audit_log 实现了名为 audit_log_policy 的系统变量
错误日志过滤组件 log_filter_dragnet 实现了名为 log_error filter_rules 的系统变量
5)查看状态变量,可以使用 SHOW[GLOBAL| SESSION] STATUS [like status_name];
语句查看这些变量和对应的值。
服务器常用变量
Linux系统:/etc/mysql/my.cnf
# MySQL 服务节点
[mysqld]
# MySQL 服务启动后监听的端口号
port=3306
# 数据目录的路径,这里演示的是windows下的配置,注意分隔符用/,如果是\则需要转义为\\.年
# 把原data目录整体复制到新路径
datadir=D:/database/MySQL/data8.0
# MySQL 服务器的字符集与排序规则
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
# 新建表时使用的存储引擎,windows下已默认配置
default-storage-engine=INNODB
二、日志
简介
MySQL Server 有以下几种日志,可以记录服务器正在发生的活动,这里先对前四种日志类型进行介绍,后续日志会在其他模块涉及到
日志类型 | 日志信息 |
---|---|
错误日志 (Error log) | mysqld 在启动、运行或停止时遇到的问题 |
一般查询日志 (General query log) | 已建立的客户端连接和从客户端接收到的语句 |
慢查询日志 (Slow query log) | 执行时间超过 long_query_time 指定秒数的查询 |
二进制日志 (Binary log) | 更改数据的语句(也用于主从复制) |
中继日志 (Relay log) | 从源服务器接收到的数据更改 |
DDL 日志 (metadata log) | DDL 语句执行的操作 |
回滚日志 / 撤销日志 (undo log) | 用于事务的回滚操作 |
重做日志 (redo log) | 用于服务器崩溃恢复 |
- 默认情况下,除 Windows 上的错误日志外,不启用任何日志,Linux 下默认开启错误日志和二进制日志。
- 在服务器运行期间可以控制一般查询和慢查询日志的禁用与开启,也可以更改日志文件名。
- 一般查询日志和慢查询日志记录可以写入日志表、日志文件或两者同时写入。
- 默认情况下,所有启用的日志将写入数据目录,可以通过刷新日志强制服务器关闭并重新打开日志文件。
- 通过
FLUSH LOGS
语句刷新日志来强制服务器关闭并重新打开日志文件,也可以使用mysqladmin
的flush-logs
或refresh
参数,或mysqldump
的--flush-logs
或--master-data
选项。 - 中继日志仅用于主从复制过程中的从服务器。有关中继日志内容和配置会在主从复制内容涉及。
一般查询日志和慢查询日志的输出形式
如果启用一般查询日志和慢查询日志,日志的输出方式可以指定为日志文件或 mysql系统库中的 general_log和slow_log 表,也可以两者同时指定。
- log_output 系统变量指定日志输出的形式,但并不会真正的启用日志。 log_output 可以有三个值,分别是: TABLE(表)、FILE(文件)、NONE(不输出),可以同时指定多个值,并用逗号隔开,未指定值时默认是 FILE ,如果列表中存在 NONE 则其他的不生效,也就是说 NONE 的优先级最高。
- 通过设置 general_log 系统变量的值来控制一般查询日志的开启1 与禁用 0,如果要为日志指定自定义的路径或文件名可以使用 general_log_file 系统变量
- 通过设置 slow_query_l0g 系统变量的值来控制慢查询日志的开启1 与禁用 0,如果要为日志指定自定义的路径或文件名可以使用 slow_query_log_file 系统变量
配置示例
[mysqld]
#日志文件
log_output=FILE
#开启一般查询日志
general_log=1
#指定自定义的文件名
general_log_file=/var/lib/mysql/general.log
#开启慢查询日志
slow_query_log=1
#指定自定义的文件名
slow_query_log_file=/var/lib/mysql/slow_query.log
使用日志表的优点
1)可以通过 SQL语句的条件查询过滤日志内容,从而选择满足特定条件的日志记录。比如,某个客户端的日志;
2)可以通过客户端程序连接到服务器并查询表中的日志信息,无需登录服务器主机访问文件系统。
SHOW CREATE TABLE mysql.general_log; #一般查询日志
SHOW CREATE TABLE mysql.slow_log; # 慢查询日志
一般查询日志
MySQL 的一般查询日志(General Query Log)记录客户端连接或断开连接的信息,也会记录从客户端接受的每个SQL语句。开启后会产生大量的内容,非常消耗服务器资源。
默认日志文件名为 host_name.log,可以使用 general_log_file=file_name 修改;
记录客户端连接的日志行,使用 connection_type 来指示用于建立连接的协议。TCP/IP 表示不使用SSL建立的TCP/IP连接、SSL/TLS 表示使用SSL建立的TCP/IP连接、Socket 表示Unix套接字文件连接、Named Pipe 表示Windows命名管道连接、Shared Memory 表示Windows共享内存连接。
Mysqld按照接收到SQL语句的顺序将语句写入查询日志,这个顺序可能与语句执行的顺序不同。
mysql> SHOW CREATE TABLE mysql.general_log;
CREATE TABLE `general_log` (
# 发⽣时间
`event_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE
CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`thread_id` bigint unsigned NOT NULL,
`server_id` int unsigned NOT NULL,
`command_type` varchar(64) NOT NULL,
`argument` mediumblob NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT='General log'
表结构说明
字段名 | 数据类型 | 描述 |
---|---|---|
event_time | timestamp(6) | 事件发生的时间(精确到微秒,带时区)。 |
user_host | mediumtext | 客户端连接的用户和主机信息(格式:用户名[用户] @ 主机 [IP] )。 |
thread_id | bigint unsigned | 客户端连接的线程 ID(唯一标识每个连接)。 |
server_id | int unsigned | MySQL 服务器的 ID(多服务器环境下区分不同实例)。 |
command_type | varchar(64) | 操作类型(如 Connect , Query , Quit , Execute 等)。 |
argument | mediumtext | 具体操作的详细信息(如 SQL 语句、错误信息等)。 |
查询示例
# 查看⽇志
SELECT DATE_FORMAT(event_time, '%Y-%m-%d %H:%i:%s') AS time,
user_host,
thread_id,
server_id,
command_type,
CAST(argument AS CHAR) AS query
FROM mysql.general_log;
argument
字段存储具体 SQL 语句或操作内容,使用CAST
转换为字符串类型。
慢查询日志
MySQL 的慢查询日志(Slow Query Log)专门用于记录执行时间超过指定阈值或未使用索引的 SQL 语句,是优化数据库性能的核心工具。
long_query_time 的默认值是 10,最小值是 0;
默认情况下,不记录管理语句,也不记录不使用索引的查询
默认日志文件名为 host_name-slow.log ,可以使用slow_query_log_file=file_name 修改;
使用 --log-short-format 选项,以简要格式记录慢查询日志
要记录管理语句,启用 log_slow_admin_statements 系统变量。管理语句包括 ALTER TABLE 、 ANALYZE TABLE 、 CHECK TABLE 、 CREATE INDEX 、 DROP INDEX 、 OPTIMIZE TABLE 和 REPAIR TABLE 。
要记录不使用索引的查询,启用 log_queries_not_using_indexes 系统变量。当记录不使用索引的查询时,日志会快速增长,通过设置系统变量 log_throttle_queries_not_using_indexes 限制每分钟写入慢查询日志同类查询的数量,默认值是 0,表示无限制。
表结构
mysql> SHOW CREATE TABLE mysql.slow_log;
CREATE TABLE `slow_log` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE
CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int NOT NULL,
`rows_examined` int NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int NOT NULL,
`insert_id` int NOT NULL,
`server_id` int unsigned NOT NULL,
`sql_text` mediumblob NOT NULL,
`thread_id` bigint unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8mb3 COMMENT='Slow log'
字段名 | 数据类型 | 说明 |
---|---|---|
start_time | timestamp(6) | SQL 开始执行的时间(微秒精度)。 |
user_host | mediumtext | 用户和客户端主机信息。 |
query_time | time(6) | 执行总时间(格式:HH:MM:SS.uuuuuu )。 |
lock_time | time(6) | 等待锁的时间。 |
rows_sent | int unsigned | 返回的行数。 |
rows_examined | int unsigned | 扫描的行数。 |
db | varchar(512) | 数据库名。 |
last_insert_id | int unsigned | 最后插入的 ID(仅对 INSERT 有效)。 |
insert_id | int unsigned | 插入操作的 ID。 |
server_id | int unsigned | 服务器 ID。 |
sql_text | mediumtext | 完整的 SQL 语句。 |
thread_id | bigint unsigned | 执行线程的 ID。 |
File格式
如果启用慢查询日志并将 FILE 作为输出目标,每条语句前面都用一行来表示日志的字段,该行以 #字符开头并包含以下内容:
Query_time::SQL语句的执行时间,单位秒
Lock_time:获取锁的时间,单位秒
Rows sent:发送到客户端的行数
Rows_examined:服务器检查的行数启用
--log-slow-extra[={OFF|ON}]系统变量会将额外字段写入到FILE中,TABLE形式不受影
错误日志
错误日志一般会记录mysqld启动和关闭的次数、诊断信息,以及服务器运行期间发生的错误和警告;例如MySQL需要自动检查或修复一个表,就会在错误日志中写入一条记录。错误日志默认使用UTF-8编码格式,并使用英语生成记录
windows默认错误日志路径
如果指定了--console 选项,默认在控制台输出错误日志,如果--console 和 --l0g-error同时指定,则--console优先级更高,并且--log-error将失效。
如果没有指定--log-error 或者没有指定具体的文件名,默认在数据目录中生成名为host name.err 的日志文件。
可以通过指定绝对路径,来更改默认的日志位置。
[mysqld]
log-error=D:/log/MySQL/Error/error_log.err #自定义错误日志的路径
Linux默认错误日志路径
在 Unix 和Linux 系统中,mysqld使用 --log-error 选项来指定默认错误日志目标,可以指定控制台或是文件,如果是文件,规则如下:
如果错误日志输出目标是控制台,则服务器将 log_error 系统变量设置为 stderr.否则,将以文件形式输入错误日志,并以 log_error 的值为文件名。
如果显示写出--log-error 但没有指定具体文件,则默认路径是数据目录中host_name.err 的文件;
可以通过指定绝对路径,来更改默认的日志位置。
[mysqld]
Log-error=/var/log/mysql/error_log.err #自定义错误日志的路径
错误日志中的核心事件字段
典型条目
2023-10-05T14:23:45.678912Z 0 [ERROR] [MY-010123] [Server] Access denied for user 'root'@'localhost' (using password: YES)
time:件时间戳,精度为微秒;
msg:事件消息字符串;
prio:事件优先级,值越小优先级越高,包括
- System event - 系统 (0)
- Error event - 错误 (1)
- Warning event - 警告 (2)
- Note/information event - 通知 / 提示事件 (3)
err_code:事件错误代码;
err_symbol:以字符串形式表示的事件错误符,例如 'ER_DUP_KEY';
SQL_state:事件 SQLSTATE 值,与 err_symbol 对应,例如 'ER_DUP_KEY' 对应的 SQLSTATE 为 23000
subsystem:事件发生的子系统。可能的值:InnoDB (InnoDB 存储引擎)、Repl (复制子系统)、Server (其他)。
二进制日志
MySQL的二进制日志(Binary Log,简称Binlog)是MySQL数据库的核心日志之一,主要用于记录所有对数据库的数据修改操作(如INSERT、UPDATE、DELETE、DDL等),但不记录SELECT,SHOW等查询操作。它是实现数据复制(主从同步)、数据恢复(Point-in-Time Recovery)和审计的关键工具。
除了基于行的日志模式,它还包含可能进行更改数据的语句事件,例如 DELETE 操作没有匹配到查找到的行;
如果二进制日志的语句涉及到用户的密码,服务器会进行加密,不以纯文本的形式出现
主要作用
- 主从节点数据复制:从节点服务器读取主节点服务器上的二进制日志文件,并根据二进制日志中记录的事件在从节点上执行相同的操作,保证主从节点服务器上数据一致,实现数据复制功能。
- 数据恢复:从某个时间点恢复备份数据后,将重新执行备份时间点之后记录在二进制日志中的事件。这些事件使数据库从备份点更新到当前最新状态。
查看日志
使用客户端工具的mysqlbinlog查看
mysqlbinlog binlog.000001 > binlog.000001
通过SQL语句查看
mysql> show binlog events in 'binlog.000001' from N limit S;
注意事项
1)默认情况下启用二进制日志,log_bin系统变量为 ON;
2)禁用二进制日志,可以指定--skip-log-bin或--disable-log-bin 选项。如果同时指定了--log-bin 则后指定的选项优先;
3)选项 --log-bin[=base_name]用于指定二进制日志文件的基本名称,如果不指定 --log-bin 选项,默认基本名称为 binlog ,建议为二进制日志指定一个基本名;
4)二进制日志文件名是由 基本名+数字扩展名 组成的,服务器每次创建一个新的日志文件时,数字扩展名都会增加,从而保证有序的文件系列,发生以下事件时,服务器都会在创建一个新的日志文件:
- 服务器已启动或重新启动
- 服务器刷新日志。
- 当前日志文件的大小达到 max_binlog_size(单个日志文件的最大字节数,最小值 4096 字节,最大值和默认值 1GB).
二进制日志文件大小可能会超出 max_binlog_size 设定的值,因为二进制日志在记录事务时,会完整的记录整个事务,不存在把一个事务拆分的情况,如果遇到一个大事务时,即使记录整个事务会超过日志大小限制,也会保证事务的完整性
5)mysqld还会创建一个包含二进制日志文件名的日志索引文件,默认情况下,这与二进制日志文件具有相同的基本名称,扩展名为.index.可以使用选项--log-bin-index[=file_name]修改索引文件名;
6)二进制日志文件和索引文件的默认位置是数据目录。可以使用--log-bin[=file_name]选项指定自定义路径, file_name 格式=绝对路径+基本名。--log-bin 对应的系统变量是log_bin_basename;
7)MySQL5.7中,启用二进制日志必须指定服务器ID,对应 server_id 选项,否则服务器将无法启动。在 MySQL8.0中,server_id 系统变量默认设置为1,在集群环境中,每台MySQL服务器必须有唯一的 server_id;
8)设置二进制日志的格式有以下几种:--binlog-format=[STATEMENTIROW|MIXED]
- STATEMENT 基于语句的日志格式,最初MySQL是基于SOL语句复制实现主从节点同步
- ROW 基于行的日志格式(默认)中,主节点将事件写入二进制日志,表示各个表的行受到的影响。
- MIXED 混合日志记录格式,默认情况下使用基于语句的日志记录,如果MySQL认为基于语句的格式不能保证主从复制过程中的数据安全时,会自动切换到基于行的日志格式,比如主节点在语句中用了UUID()函数,那么日志文件中记录的是UUID生成的真实值而不是直接使用原始的SQL语句.
# 基于语句,记录执⾏的SQL语句
update student set age = 18 where id between 10 and 20;
# 基于⾏,记录每⼀⾏的更改
update student set age = 18 where id = 10;
update student set age = 18 where id = 11;
update student set age = 18 where id = 12;
...
update student set age = 18 where id = 19;
update student set age = 18 where id = 20;
服务器日志维护
MySQL服务器可以创建多种不同的日志文件来帮助我们查看服务器的活动。但是必须定期清理这些文件,以免日志占用过多的磁盘空间。在启用日志的情况下,通常希望备份和删除旧的日志文件并把日志写到新文件。
注意:
1)默认二进制日志的过期时间为30天,过期后将自动删除,要指定自定义过期时间,可以使用系统变量 binlog_expire_logs_seconds=N单位为秒,在下一次启动服务器和刷新日志时删除过期日志文件;
2)强制使用新的日志文件可以手动刷新日志,当执行FLUSH LOGS 语句或 mysqladmin flush-Logs 、mysqladmin refresh、mysqldump--flush-logs、mysqldump --master-data命令时,会发生日志刷新。此外当二进制日志文件大小达到max_binlog_size 系统变量指定的值时,服务器会自动刷新二进制日志
3)FLUSH LOGS 支持可选的修饰符以启用个别日志的选择性刷新:
FLUSH BINARY LOGS # 刷新⼆进制⽇志
FLUSH ERROR LOGS # 刷新错误⽇志
FLUSH GENERAL LOGS # 刷新⼀般查询⽇志
FLUSH RELAY LOGS # 刷新中继⽇志
FLUSH SLOW LOGS # 刷新慢查询⽇志
4)刷新一般 查询日志、慢查询日志或错误日志 只是 关闭并重新打开日志文件,如果要备份可以先重命名再执行刷新操作,比如一般查询日志、慢查询日志或错误日志文件名分别为: mysql.log、mysql-slow.log和err.log,可以在命令行中使用如下一系列命令:
#首先连接到服务器并禁用日志
mysql>SET GLOBAL general_log ='OFF';
mysql>SET GLOBAL slow_query_log = 'OFF';
cd mysql-data-directory #进⼊⽇志⽬录
mv mysql.log mysql.log.old #重命名⼀般查询⽇志
mv mysql-slow.log mysql-slow.log.old #重命名慢查询⽇志
mv err.log err.log.old #重命名错误⽇志
mysqladmin flush-logs #刷新⽇志
#再次启用日志
SET GLOBAL general_log ='ON';
SET GLOBAL slow_query_log ='ON';
三、mysql System Schema(mysql系统库)
MysqlSchema是一个系统库,表中存储了MySQL服务器运行时所需的信息。广义上,mysqlschema包含 存储数据库对象元数据的数据字典和用于其他操作目的的系统表。数据字典表和系统表位于数据目录下一个名为 mysql.ibd 的表空间文件中,使用的是InnoDB存储引擎。
数据字典
MySQL的数据字典,用来存储有关数据库对象自身的信息,只有在调试版本中访问,在发行版没有权限访问,不可以随意修改,否则可能造成服务器无法运行。
INFOMATION_SCHEMA 实现了某些数据字典的视图
以下是部分常见的数据字典表:
- character_sets:有关可用字符集的信息 utf8mb4
- check_constraints:有关表上定义的 CHECK 约束的信息
- collations:每个字符集的排序规则信息
- column_type_elements:列类型的信息
- columns:有关表中列的信息
- indexes:有关表索引的信息
- tables:有关数据库中表的信息
- tablespace_files:有关表空间使用的文件信息
- triggers:有关触发器的信息
系统表
系统表按功能大致可以分为以下几类:权限授予系统表、对象信息系统表、日志系统表、服务器端帮助系统表、时区系统表、复制系统表、优化器系统表、杂项系统表。mysql系统库中的表如下所示:
要为重活而高兴,不要为死去的忧伤。 ——林清玄
🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀🍀
以上,就是本期的全部内容啦,若有错误疏忽希望各位大佬及时指出💐
制作不易,希望能对各位提供微小的帮助,可否留下你免费的赞呢🌸