mysql知识点
一 MySQL 的 systemd
服务单元配置文件
/lib/systemd/system/mysql.service
,它定义了 MySQL 服务的启动、运行、管理和关闭方式。以下是每个部分的详细解释和原理说明:
[Unit]
[Unit]
Description=MySQL Community Server
After=network.target
- Description:描述该服务的名称,方便管理员识别其用途。这里是“
MySQL Community Server
”。 - After=network.target:表明 MySQL 服务应在
network.target
(即网络相关服务启动完成)之后启动,以确保 MySQL 能够依赖网络连接(如果配置了远程访问)。这不意味着网络一定启动成功,只是依赖其顺序。
[Install]
[Install]
WantedBy=multi-user.target
- WantedBy=multi-user.target:指定服务的安装目标,将服务链接到
multi-user.target
。该选项决定了服务的目标运行级别。multi-user.target
相当于传统的“多用户模式”(即不需要图形界面的运行级别),适用于大多数服务器环境。
[Service]
[Service]
Type=notify
User=mysql
Group=mysql
PIDFile=/run/mysqld/mysqld.pid
PermissionsStartOnly=true
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre
ExecStart=/usr/sbin/mysqld
TimeoutSec=infinity
Restart=on-failure
RuntimeDirectory=mysqld
RuntimeDirectoryMode=755
LimitNOFILE=10000
Environment=MYSQLD_PARENT_PID=1
参数解析:
-
Type=notify:
- 指定服务启动类型为
notify
。在此模式下,服务会在启动过程中通过systemd
的通知接口告知启动状态。MySQL 服务器在完全启动后会向systemd
发送通知,表示服务已就绪。
- 指定服务启动类型为
-
User=mysql 和 Group=mysql:
- 指定 MySQL 服务以
mysql
用户和mysql
用户组的权限运行。这有助于提高安全性,防止 MySQL 以 root 权限运行,从而降低潜在的安全风险。
- 指定 MySQL 服务以
-
PIDFile=/run/mysqld/mysqld.pid:
- 定义 MySQL 进程的 PID 文件路径,用于记录 MySQL 服务器的主进程 ID。系统可以通过该文件了解 MySQL 的运行状态和进程号,以便于管理和监控。
-
PermissionsStartOnly=true:
- 只有在启动时设置权限,限制权限更改仅应用于启动过程的相关命令,而不会影响主
ExecStart
指令。这在启动前执行某些命令时很有用,比如创建目录或设置权限。
- 只有在启动时设置权限,限制权限更改仅应用于启动过程的相关命令,而不会影响主
-
ExecStartPre=/usr/share/mysql/mysql-systemd-start pre:
ExecStartPre
表示在主启动命令ExecStart
之前运行的命令。这里执行 MySQL 提供的预启动脚本/usr/share/mysql/mysql-systemd-start pre
,该脚本可以用于检查 MySQL 运行环境的准备情况(如目录权限等),确保 MySQL 能顺利启动。
-
ExecStart=/usr/sbin/mysqld:
- 这是主启动命令,用于启动 MySQL 服务器主程序
mysqld
。mysqld
是 MySQL 数据库服务器的核心进程。
- 这是主启动命令,用于启动 MySQL 服务器主程序
-
TimeoutSec=infinity:
- 设置服务启动的超时时间为“无限”。这意味着
systemd
将等待 MySQL 服务启动完成,而不会因超时导致启动失败。这通常用于启动时间较长的服务,确保 MySQL 在繁忙或资源紧张时仍能顺利启动。
- 设置服务启动的超时时间为“无限”。这意味着
-
Restart=on-failure:
- 定义重启策略,当服务因非正常状态(退出码非 0)失败时自动重启服务。这有助于提高 MySQL 服务的稳定性和容错能力,避免意外故障导致服务中断。
-
RuntimeDirectory=mysqld 和 RuntimeDirectoryMode=755:
- 指定运行时目录
mysqld
,并设置该目录的权限为755
。systemd
将自动在/run
下创建此目录(通常是/run/mysqld
),该目录用于存放 PID 文件或其他运行时文件,确保这些文件在系统重启后不会保留。
- 指定运行时目录
-
LimitNOFILE=10000:
- 限制 MySQL 进程的文件描述符数量上限为 10000。这对于处理大量连接的 MySQL 数据库非常重要,因为每个连接都需要占用一个文件描述符。默认值可能较低,增加上限可以避免高负载时因文件描述符不足而导致的连接失败。
-
Environment=MYSQLD_PARENT_PID=1:
- 设置环境变量
MYSQLD_PARENT_PID
为1
。此变量用于 MySQL 进程的父进程 ID 配置,有助于确保在某些系统上 MySQL 正确识别并记录父进程 ID,避免可能的进程管理问题。
- 设置环境变量
二 配置文件
备份目录:~/mysql_bak
登录密码:sudo mysql -p
配置文件:cat /etc/mysql/my.cnf
#
# The MySQL database server configuration file.
#
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
#
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html
#
# * IMPORTANT: Additional settings that can override those from this file!
# The files must end with '.cnf', otherwise they'll be ignored.
#
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/
以下是 MySQL 主要配置文件mysql.conf.d/mysqld.cnf 中每个参数的详细解释:
1. Query Logging
# general_log_file = /var/log/mysql/query.log
# general_log = 1
- general_log_file:指定通用查询日志(general log)的文件路径,这个日志文件会记录所有的SQL查询语句。
- general_log:开启通用查询日志。当
general_log=1
时,所有查询都会被记录到日志中。
底层原理:
通用查询日志在每次执行 SQL 语句时将记录该语句的执行内容,这对于调试和监控很有帮助。但是启用此功能会显著增加磁盘 I/O 和 CPU 使用量,从而导致性能下降,因此通常仅在调试或问题排查时使用。
2. Error Log
log_error = /var/log/mysql/error.log
- log_error:指定错误日志文件的路径,用于记录数据库在运行时发生的各种错误或警告信息。
底层原理:
错误日志文件用于存储服务器启动和关闭过程中的重要消息、错误信息以及无法处理的异常等。MySQL 会将错误信息写入到文件中,帮助管理员及时排查潜在问题。该文件通常不会记录常规查询,默认情况下其内容应该较少。
3. Slow Query Log
# slow_query_log = 1
# slow_query_log_file = /var/log/mysql/mysql-slow.log
# long_query_time = 2
# log-queries-not-using-indexes
- slow_query_log:开启慢查询日志,当
slow_query_log=1
时,将记录执行时间较长的查询。 - slow_query_log_file:指定慢查询日志文件的路径。
- long_query_time:设置记录到慢查询日志的阈值,单位是秒。设置为
2
表示任何执行时间超过 2 秒的查询都会被记录。 - log-queries-not-using-indexes:启用后,任何没有使用索引的查询都会记录到慢查询日志。
底层原理:
慢查询日志主要用于识别性能瓶颈和优化查询。MySQL 会在查询执行完毕后判断查询的执行时间,若超过 long_query_time
的设定值,则将该查询记录到慢查询日志中。通过分析该日志,DBA 可以发现低效的查询,并对这些查询进行优化(例如:添加索引、优化 SQL 语句等)。
4. Binary Log for Replication and Backup
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_expire_logs_seconds = 2592000
max_binlog_size = 100M
# binlog_do_db = include_database_name
# binlog_ignore_db = include_database_name
- server-id:指定 MySQL 服务器的唯一标识(ID),对于复制(replication)和集群管理(Cluster Management)至关重要。在主从复制中,每个服务器必须有一个唯一的
server-id
。 - log_bin:启用二进制日志(binary log),并指定二进制日志文件路径。二进制日志记录了所有对数据库的更改操作(如插入、更新、删除等),用于数据恢复或主从同步。
- binlog_expire_logs_seconds:设置二进制日志的自动删除时间(以秒为单位)。
2592000
秒约等于 30 天,即超过这个时间的日志会被自动删除以节省空间。 - max_binlog_size:设置单个二进制日志文件的最大大小,达到该大小时 MySQL 会创建一个新的日志文件。
- binlog_do_db 和 binlog_ignore_db:用于选择性地包含或排除某个数据库的二进制日志记录,适用于复制时主数据库只将特定库或表的修改传递给从数据库。
底层原理:
二进制日志用于记录对数据库的所有更改操作,包括创建表、修改数据等。启用二进制日志后,MySQL 会先将更改写入二进制日志文件,然后再提交到数据库,这样可以确保系统在宕机后依然能够恢复。在主从复制中,二进制日志还会用于将主服务器上的更改传递到从服务器,确保数据一致性。通过 binlog_expire_logs_seconds
和 max_binlog_size
限制二进制日志的存储,防止日志文件过多占用磁盘空间。
综合说明
这些配置项主要用于性能监控和数据恢复的日志控制:
- 通用日志 提供全面的 SQL 查询跟踪;
- 错误日志 记录系统故障和警告信息;
- 慢查询日志 则提供查询性能监控;
- 二进制日志 则支持数据恢复和主从复制的关键操作。
合理配置这些日志参数,可以帮助数据库管理员进行系统优化、监控系统健康状态以及数据恢复。
三 错误日志
/var/log/mysql/error.log
2024-11-02T01:27:32.146582Z 0 [System] [MY-013172] [Server] Received SHUTDOWN from user <via user signal>. Shutting down mysqld (Version: 8.0.39-0ubuntu0.20.04.1).
2024-11-02T01:27:42.539792Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 5520 user: 'mtdb'.
2024-11-02T01:27:42.569995Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 16 user: 'mtdb'.
2024-11-02T01:27:42.570135Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 5521 user: 'mtdb'.
2024-11-02T01:27:42.570265Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 9 user: 'mtdb'.
2024-11-02T01:27:42.570400Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 26 user: 'mtdb'.
2024-11-02T01:27:42.570512Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 5523 user: 'mtdb'.
2024-11-02T01:27:42.570642Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 5516 user: 'mtdb'.
2024-11-02T01:27:42.570710Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 3780 user: 'mtdb'.
2024-11-02T01:27:42.571365Z 0 [Warning] [MY-010909] [Server] /usr/sbin/mysqld: Forcing close of thread 5517 user: 'mtdb'.
2024-11-02T01:27:42.571518Z 0
原文地址:https://blog.csdn.net/jiaxin576/article/details/143450882
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!