很多站长把网站跑起来之后,对数据库的态度往往是"能用就行":环境是面板一键装的,密码是自动生成的,从没看过配置,更没留意过慢查询。可等到网站变卡、数据库突然连不上、磁盘被日志撑爆的那天,才发现自己对这台"心脏"一无所知。本文按真实操作顺序,把 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,再查官方文档,基本都能解决。欢迎在评论区聊聊你踩过的数据库的坑。