MySQL/MariaDB 从入门到上手:安装、配置与日常维护

MySQL/MariaDB 从入门到上手:安装、配置与日常维护

有个朋友上周找我,说他网站慢得像蜗牛,让我帮忙看看。

登上去一查,CPU正常,内存够用,磁盘不忙。最后看数据库——好家伙,好几张表几十万条数据,连个索引都没建。查询全是全表扫描,不慢才怪。

我问他:你平时怎么维护数据库的?

他愣了一下:维护?不就装上去能用就行了吗?

这是他,也是很多人。数据库这东西,大家都觉得“能用就行”,直到崩了才开始学。其实数据库没那么玄乎,就是个存数据的地方,但你对它好一点,它就对你好一点。

今天从头捋一遍,MySQL(或者它的孪生兄弟 MariaDB)怎么装、怎么配、日常该干点啥。不讲高深原理,只说用得上的。


MySQL 还是 MariaDB?

这俩什么关系?MySQL 被 Oracle 收了之后,原班人马出来另立山头,搞了 MariaDB。用法一模一样,命令通用,连配置文件都差不多。

区别在哪?MariaDB 更新更激进,新功能上得快;MySQL 更稳重,Oracle 在背后撑着。个人站长、小公司用哪个都行,你熟悉哪个就用哪个。

本文以 MySQL 为例,MariaDB 用户照搬命令基本都能跑。


安装:比你想的简单

Ubuntu/Debian 装 MySQL:

bash

apt update
apt install mysql-server -y

CentOS/RHEL 装 MariaDB(默认源里是 MariaDB):

bash

yum install mariadb-server -y

装完启动:

bash

systemctl start mysql    # Ubuntu
systemctl start mariadb  # CentOS
systemctl enable mysql   # 开机自启

然后跑一个安全脚本,这一步千万别跳

bash

mysql_secure_installation

它会让你:设置 root 密码、删除匿名用户、禁止 root 远程登录、删除测试库。一路 y 下来就行。

反常识提醒:很多人装完数据库就不管了,root 空密码、允许远程、测试库留着。这就像你家门没锁,还贴张纸条“欢迎光临”。


基础配置:别用默认配置跑生产

配置文件在哪?Ubuntu 一般在 /etc/mysql/my.cnf,CentOS 在 /etc/my.cnf。用 vim 打开,改这几个地方:

1. 字符集

默认字符集不是 utf8mb4,存表情(emoji)会变问号。加在 [mysqld] 下面:

ini

[mysqld]
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci

2. 允许远程连接

默认只允许本地访问(bind-address = 127.0.0.1)。如果想从别的机器连,把这行注释掉,或者改成 0.0.0.0:

ini

# bind-address = 127.0.0.1
bind-address = 0.0.0.0

注意:允许远程有风险,配合防火墙和强密码使用。

3. 慢查询日志

以后排查问题用得上。加在 [mysqld] 下:

ini

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

执行超过 2 秒的 SQL 会被记下来。

改完重启:

bash

systemctl restart mysql

常用命令:增删改查和用户权限

登录数据库:

bash

mysql -u root -p

输密码,进去之后看到 mysql> 提示符。

查看所有数据库:

sql

SHOW DATABASES;

创建数据库:

sql

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

创建用户并授权:

sql

-- 创建用户(只允许本地登录)
CREATE USER 'myuser'@'localhost' IDENTIFIED BY '复杂密码';

-- 给用户某库的所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

如果想允许远程登录,把 localhost 改成 %(所有 IP)或具体 IP。

退出:

sql

EXIT;

日常维护:这些事定期做

数据库不是装完就一劳永逸的。每个月(或者每周)花十分钟做这几件事,能少踩很多坑。

1. 查看数据库大小

sql

SELECT table_schema, 
       ROUND(SUM(data_length+index_length)/1024/1024,2) AS size_mb 
FROM information_schema.tables 
GROUP BY table_schema;

看看哪个库在疯狂膨胀。

2. 查看慢查询日志

bash

tail -100 /var/log/mysql/slow.log

找出执行慢的 SQL,看看是不是忘了加索引。

3. 查看当前连接

sql

SHOW PROCESSLIST;

如果有几百个 Sleep 进程,可能是连接没释放,需要调整程序或数据库配置。

4. 备份(最重要的一条)

用 mysqldump 备份:

bash

mysqldump -u root -p --all-databases > backup_$(date +%Y%m%d).sql

恢复:

bash

mysql -u root -p < backup_20260319.sql

写个脚本,放 crontab 里每天自动跑。


常见问题:遇上了别慌

1. 忘记 root 密码

停掉数据库,用跳过权限表的方式启动:

bash

systemctl stop mysql
mysqld_safe --skip-grant-tables &
mysql -u root

进去之后改密码:

sql

FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';

重启正常模式。

2. 远程连接不上

三步排查:

  • 防火墙放行 3306 端口了吗?
  • 配置文件里 bind-address 改了吗?
  • 用户允许远程登录吗?('user'@'%'

3. 导入大文件报错

默认限制 16M,改配置文件:

ini

[mysqld]
max_allowed_packet = 128M

重启生效。

4. 磁盘满了

数据库会直接挂掉,连不上。所以磁盘监控很重要(之前的文章讲过)。


入门级优化:不用成为 DBA 也能做

1. 加索引

这是性价比最高的优化。经常作为查询条件的字段(比如用户名、订单号),加上索引:

sql

CREATE INDEX idx_username ON users(username);

没索引的查询是灾难。

**2. 避免 SELECT ***

只查需要的字段,别 SELECT *。数据量大时差很多。

3. 用 EXPLAIN 看查询计划

sql

EXPLAIN SELECT * FROM users WHERE username='admin';

看到 type=ALL 就是全表扫描,该加索引了。

4. 调几个关键参数

innodb_buffer_pool_size 是 InnoDB 的缓存池,设成内存的 70% 左右。在配置文件里加:

ini

[mysqld]
innodb_buffer_pool_size = 2G  # 假设内存 4G

重启生效。


数据库没你想的那么难

那天帮朋友加了几个索引,网站速度从 3 秒降到 0.3 秒。他感叹:原来数据库也要伺候啊。

我说:不是伺候,是互相尊重。你定期看看它,给它建建索引、做做备份,它就给你好好干活。你不理它,它早晚给你脸色看。

数据库没那么神秘,就是个存数据的仓库。但仓库需要打扫,需要整理,需要知道什么东西放哪。

今天这篇帮你入了门。接下来就是在用中学,慢慢你会发现,数据库其实挺听话的——你对它好,它对你好。

实操指南

服务器到底行不行?常用性能测试工具与压测实战

2026-3-18 14:07:15

知识库

什么是SSL:保护互联网通信安全的核心技术

2024-11-6 12:32:30

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧