MySQL 数据库实战:从安装配置到日常运维一次讲清


很多站长把网站跑起来之后,对数据库的态度往往是"能用就行":环境是面板一键装的,密码是自动生成的,从没看过配置,更没留意过慢查询。可等到网站变卡、数据库突然连不上、磁盘被日志撑爆的那天,才发现自己对这台"心脏"一无所知。本文按真实操作顺序,把 MySQL 从安装、建库建用户、日常运维到性能优化、备份恢复一次讲清楚,所有命令都在 MySQL 8.0 上验证过,照着敲就能用。

一、先选对:MySQL 还是 MariaDB?

MySQL 8.0 是目前的主流版本,MariaDB 是它的开源兼容分支,绝大多数命令和配置两者通用。VPS 上跑网站,选哪个都行:宝塔面板默认推荐 MariaDB,动手能力强的可以直接上 MySQL 8.0。本文以 MySQL 8.0 为例演示,MariaDB 用户直接套用即可。

二、安装与初始化

Ubuntu / Debian 一条命令装好,装完记得做安全初始化:

# Ubuntu / Debian
apt update
apt install -y mysql-server
systemctl enable --now mysql
systemctl status mysql
# CentOS / Rocky
yum install -y mysql-server
systemctl enable --now mysqld

MySQL 8.0 安装后 root 默认通过 auth_socket 认证,用 sudo mysql 即可进入。接下来运行安全初始化脚本,设置 root 密码、移除匿名用户、禁止 root 远程登录:

mysql_secure_installation

按提示一路回答 y 即可,这几步是数据库的第一道防线,别跳过。

三、建库建用户:让 root 歇着

日常业务建议遵循最小权限原则,为每个网站单独建库建用户,避免所有站点共用一个 root,出事一锅端:

CREATE DATABASE myblog DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'blog'@'localhost' IDENTIFIED BY '换成强密码';
GRANT ALL PRIVILEGES ON myblog.* TO 'blog'@'localhost';
FLUSH PRIVILEGES;

几个要点:

1. 字符集统一用 utf8mb4,兼容表情符号,不会出现插入 emoji 报错的问题;

2. 用户主机只给 localhost,不要给 %,数据库端口(默认 3306)绝不能暴露到公网;

3. 密码别写进网站配置文件之外的地方,更别提交到 Git 仓库。

四、日常运维命令速查

下面这些命令覆盖 90% 的日常场景:

systemctl status mysql                   # 查看服务状态
mysqladmin -uroot -p status              # 快速查看运行状态
mysql -uroot -p                          # 登录数据库
SHOW PROCESSLIST;                        # 查看当前连接,揪出卡住的查询
SHOW VARIABLES LIKE 'max_connections';   # 查看最大连接数
SELECT VERSION();                        # 查看版本

网站变卡时,第一步就是进数据库执行 SHOW PROCESSLIST,看有没有长时间 Running 的查询——很多时候不是服务器慢,而是一条没走索引的 SQL 把 CPU 打满了。

五、改配置文件:把性能吃满

MySQL 配置集中在 /etc/mysql/mysql.conf.d/mysqld.cnf(Debian/Ubuntu)或 /etc/my.cnf(CentOS)。低配 VPS 上最值得调的几个参数:

[mysqld]
innodb_buffer_pool_size = 512M   # 建议设为物理内存的 50%~70%
max_connections = 150            # 根据站点并发调整
slow_query_log = 1               # 开启慢查询日志
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 1              # 超过 1 秒的查询记入慢日志

改完重启生效:

systemctl restart mysql

注意:innodb_buffer_pool_size 是 InnoDB 的"内存缓存池",太小会频繁刷盘,太大又挤压系统内存,1G 内存的机器设 512M 是比较稳妥的起步值。

六、慢查询分析:把拖慢网站的 SQL 找出来

开启慢查询日志之后,用自带工具直接看:

mysqldumpslow -s t /var/log/mysql/slow.log | head -20

或者安装 Percona Toolkit,用 pt-query-digest 生成报告,能直观看到哪条 SQL 耗时最长、执行最频繁。找出问题 SQL 后,常见优化手段就三招:补索引、改查询条件、把大结果集分批。80% 的数据库变慢都是没走索引造成的,加一条索引往往立竿见影。

七、备份与恢复:定时任务 + 异地存放

备份是数据库运维的底线,配合 Crontab 定时执行:

# 每天凌晨 3 点备份全部数据库
0 3 * * * mysqldump --all-databases -uroot -p'密码' | gzip > /backup/db_$(date +\%F).sql.gz

恢复单库:

gunzip < /backup/db_2026-11-02.sql.gz | mysql -uroot -p

建议保留最近 7~15 天备份,并把备份文件同步到另一台机器或对象存储——数据库和备份放在同一台 VPS 上,等于把鸡蛋放在同一个篮子里。

八、常见故障排查

1. 数据库连不上?先看服务状态、bind-address 是否限制为 127.0.0.1、防火墙有没有放行,多数是这三处之一;

2. 忘记 root 密码?在配置中临时加 skip-grant-tables,重启后可免密进入重置,改完记得移除该参数;

3. 磁盘被撑爆?查看 /var/lib/mysql 下的 binlog 大小,MySQL 8.0 可设置 binlog_expire_logs_seconds 控制保留时长;

4. 提示表损坏?用 mysqlcheck 修复:

mysqlcheck -uroot -p --auto-repair myblog

九、结语

数据库不难,难的是平时不管、出事才慌。花一个下午照着本文把安装、权限、慢查询、备份这几件事配好,后面的网站运维能省下无数个不眠夜。文中命令都在 MySQL 8.0 上实际跑过,遇到问题先看 error.log,再查官方文档,基本都能解决。欢迎在评论区聊聊你踩过的数据库的坑。


手机扫码阅读

微信或手机浏览器扫一扫,随时随地随心阅读与分享

Nginx 从入门到实战:反向代理、HTTPS 与性能优化一次讲清

VPS 安全加固实战:从弱密码到全方位防护一次讲清

评 论