最近总有小老弟问我:“哥,我想转行当DBA,该咋整啊?” 问得好!今天就掏心窝子聊聊,怎么用最接地气的方式,把数据库玩得明明白白。咱不说虚的,直接上干货,看完这篇你至少能少走三年弯路!
别被“管理员”这词唬住了,说人话就是数据库的全职保姆。举个栗子🌰:你负责的数据库就像个嗷嗷待哺的娃,得喂数据(维护)、治病(故障处理)、教它跑步(性能优化)。要是娃饿着了(数据丢失)或者跑不动(系统卡死),老板第一个找的就是你!
核心生存法则(划重点!):
别急着复制粘贴命令,先搞懂原理!安装数据库就像搭积木:
# 卸载系统自带的旧版本(防冲突)
sudo yum remove mariadb* -y
# 下载官方仓库(注意系统版本!)
wget https://dev.mysql.com/get/mysql80-community-release-el7-11.noarch.rpm
# 安装仓库+数据库服务
sudo rpm -ivh mysql80-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server -y
# 重点来了!初始化数据库
sudo mysqld --initialize --user=mysql --console
# 记住输出的临时密码!长得像 root@localhost: Abc12345
避坑指南:初始化报错?八成是权限问题,用chown -R mysql:mysql /var/lib/mysql
Oracle安装比MySQL复杂十倍,但记住三个核心文件:
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1
别用navicat导数据了!学会用官方工具才是王道:
# 全量备份(凌晨3点跑)
mysqldump -uroot -p --all-databases --single-transaction > /backup/full_$(date +%F).sql
# 增量备份(配合binlog)
mysqlbinlog --start-datetime="2025-05-06 00:00:00" binlog.000001 > /backup/increment_001.sql
恢复技巧:先还原全量备份,再按顺序执行增量binlog
误删数据不用慌,用闪回功能原地复活:
-- 查看删除记录(时间别搞错!)
SELECT*FROM user_recyclebin WHERE original_name='EMPLOYEES';
-- 闪回数据表
FLASHBACK TABLE employees TO BEFORE DROP;
这个功能相当于数据库的“后悔药”
遇到系统卡顿,先抓慢查询:
-- 开启慢查询日志(临时生效)
SETGLOBAL slow_query_log =ON;
SETGLOBAL long_query_time =1; -- 超过1秒就记录
-- 用explain看执行计划
EXPLAIN SELECT*FROM orders WHERE user_id=123;
关键指标:看type列是不是ALL(全表扫描),rows列数值是不是过大
加索引不是越多越好!黄金原则:
用Zabbix模板省时省力:
# 在被监控服务器装agent
yum install zabbix-agent2 -y
# 修改配置文件
vim /etc/zabbix/zabbix_agent2.conf
Server=监控服务器IP
Hostname=当前主机名
# 导入官方MySQL模板[[2,6]]
必监控项:
当磁盘快满时自动清理日志:
#!/usr/bin/python3
import shutil
import psutil
disk = psutil.disk_usage('/')
if disk.percent > 90:
shutil.rmtree('/var/log/mysql/old_logs')
print("清理完成!")
else:
print("磁盘空间充足")
把这个脚本挂到Zabbix的报警动作里,从此半夜不会被叫醒
把下面脚本存为/scripts/backup.sh
:
#!/bin/bash
DATE=$(date +%F_%H%M)
BACKUP_DIR="/backup/mysql"
# 全量备份
mysqldump -uroot -pP@ssw0rd --all-databases > ${BACKUP_DIR}/full_${DATE}.sql
# 保留7天备份
find ${BACKUP_DIR} -name "*.sql" -mtime +7 -execrm -f {} \;
# 微信通知(需配置企业微信机器人)
curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx' \
-H 'Content-Type: application/json' \
-d '{"msgtype": "text","text": {"content": "备份已完成,文件大小:'$(du -sh ${BACKUP_DIR})'"}}'
然后加个crontab定时任务:
0 2 * * * /scripts/backup.sh >/dev/null 2>&1
从此备份不用操心
用paramiko库同时操作多台服务器:
import paramiko
hosts = ['192.168.1.101', '192.168.1.102']
for ip in hosts:
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(ip, username='root', password='your_pwd')
stdin, stdout, stderr = ssh.exec_command('df -h')
print(f"{ip} 磁盘使用情况:\n{stdout.read().decode()}")
这个脚本能让你5分钟查完所有服务器的磁盘
学习路线图:
基础运维(3个月) → SQL优化(6个月) → 高可用架构(1年) → 云数据库(持续学习)
记住:每天解决一个报错,比看10本书都管用!
最后说句掏心窝的:DBA这行没有速成班,遇到报错别慌,官方文档能解决90%的问题。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有