本篇目标
一、为什么运维必须懂数据库?
很多人认为:
数据库是开发的事情
实际上生产环境大量故障:
最后发现:
根因在数据库
一个典型请求路径:
用户请求
↓
业务程序
↓
数据库
↓
返回结果
所以:
不会数据库排障,很难做好运维。
二、安装 MySQL
Ubuntu:
apt update
apt install mysql-server -y
CentOS:
yum install mysql-server -y
启动并设置开机自启:
systemctl start mysqld
systemctl enable mysqld
查看状态:
systemctl status mysqld
查看监听:
ss -lntp | grep 3306
如果看到:
LISTEN *:3306
说明:
数据库已经启动
三、登录数据库
进入数据库:
mysql -uroot -p
查看数据库:
show databases;
创建数据库:
create database demo;
切换数据库:
use demo;
查看当前库:
select database();
这里建议建立一个习惯:
不要所有业务都放一个库
否则:
备份困难
迁移困难
权限混乱
四、创建业务用户
很多新人喜欢直接使用root用户,这是非常危险的。
创建用户:
create user 'app' identified by 'password';
授权:
grant all privileges on demo.* to 'app'@'%';
刷新权限:
flush privileges;
验证:
show grants for 'app'@'%';
推荐思路:
一个业务
↓
一个数据库
↓
一个用户
这样更容易维护。
五、为什么远程连不上数据库?
很多人:
数据库启动成功
↓
3306打开
↓
远程还是连不上
通常应该先检查监听地址。
查看配置:
grep bind-address /etc/mysql/mysql.conf.d/mysqld.cnf
如果:
bind-address=127.0.0.1
意味着:
仅允许本机访问
修改:
bind-address=0.0.0.0
重启:
systemctl restart mysql
再次确认:
ss -lntp | grep 3306
再次远程访问端口,此时应该就可以访问到了。
如果还是报错,则需要检查防火墙,云安全组策略等。
六、备份为什么重要?
运维有一句经典的话:
没备份 = 没上线
最简单备份:
mysqldump -uroot -p demo > demo.sql
恢复:
mysql demo < demo.sql
七、配置自动备份
生产环境不要这样:
mysqldump demo > backup.sql
因为:
更推荐:
定时备份
↓
按日期命名
↓
自动清理旧文件
↓
记录日志
↓
远程同步数据
创建备份目录:
mkdir -p /backup/mysql
创建脚本:
vim /usr/local/bin/mysql_backup.sh
写入:
#!/bin/bash
BACKUP_DIR="/backup/mysql"
DATE=$(date +%F_%H-%M-%S)
DB_NAME="demo"
DB_USER="root"
DB_PASS="your_password"
mkdir -p ${BACKUP_DIR}
mysqldump \
-u${DB_USER} \
-p${DB_PASS} \
--single-transaction \
--routines \
--events \
${DB_NAME} \
| gzip \
> ${BACKUP_DIR}/${DB_NAME}_${DATE}.sql.gz
find ${BACKUP_DIR} \
-type f \
-name "*.sql.gz" \
-mtime +7 \
-delete
脚本说明:
保证 InnoDB 热备
压缩,减少磁盘占用
自动删除 7 天前备份
赋予权限:
chmod +x /usr/local/bin/mysql_backup.sh
测试运行:
/usr/local/bin/mysql_backup.sh
查看结果:
ls -lh /backup/mysql
如果看到:
demo_2026-05-29_02-00-01.sql.gz
说明备份成功。
配置定时任务:
编辑:
crontab -e
每天凌晨 2 点执行:
0 2 * * * /usr/local/bin/mysql_backup.sh >> /var/log/mysql_backup.log 2>&1
含义:
每天凌晨2点
↓
执行脚本
↓
记录正常&错误日志
查看是否执行成功:
tail -f /var/log/mysql_backup.log
恢复备份:
gunzip < demo.sql.gz | mysql demo
记住:
没验证恢复的备份,不算备份。
八、数据库启动失败怎么排查?
第一步:
systemctl status mysql
第二步:
journalctl -u mysql -n 100
第三步:
检查磁盘:
df -h
检查权限:
ls -ld /var/lib/mysql
检查端口:
ss -lntp
常见原因:
排查思路:
服务状态
↓
日志
↓
磁盘
↓
权限
↓
配置
一般情况下日志中会显示详细的错误内容,顺藤摸瓜即可解决问题。
九、实战:应用连接数据库失败
开发反馈:
Connection refused
先不要改代码。
检查:
数据库是否运行:
systemctl status mysql
端口:
ss -lntp | grep 3306
测试连接:
telnet 数据库IP 3306
查看用户权限:
select host,user
from mysql.user;
大量问题最终都是:
而不是数据库坏了
十、数据库性能快速检查
查看连接:
show processlist;
查看运行状态:
show status;
查看资源:
top
free -h
iostat
十一、本篇总结
数据库运维最重要的不是优化,而是保证数据不会丢。