WordPress 要装数据库、网站数据要迁移、学习 SQL 想本地练手——服务器上最常用的数据库就是 MySQL(以及它的分支 MariaDB)。这篇文章从零开始:安装、建库建表、增删改查、备份恢复、远程连接一次讲清,照着操作就能把 MySQL 跑起来。
一、安装 MySQL / MariaDB
Debian/Ubuntu 默认源里是 MariaDB(MySQL 的兼容分支,用法一致);CentOS 7 默认是 MariaDB,CentOS 8+ 可以装 MySQL 官方源。
# Ubuntu / Debian(安装 MariaDB)
sudo apt update
sudo apt install -y mariadb-server mariadb-client
# CentOS 7
sudo yum install -y mariadb-server mariadb
# CentOS 8+ / Rocky(安装 MariaDB)
sudo dnf install -y mariadb-server
启动并设置开机自启:
sudo systemctl enable --now mariadb # 或 mysql(不同系统服务名不同)
sudo systemctl status mariadb
首次安全初始化(设置 root 密码、移除匿名用户,装完必做):
sudo mysql_secure_installation
二、登录与基础操作
sudo mysql # Ubuntu 上 root 默认用 socket 免密登录
mysql -u root -p # 输入密码登录
1. 管理数据库
SHOW DATABASES; -- 查看所有库
CREATE DATABASE blog DEFAULT CHARSET utf8mb4; -- 建库(utf8mb4 支持表情符号,必加)
USE blog; -- 切换数据库
DROP DATABASE blog; -- 删库(谨慎!)
2. 建表
CREATE TABLE users (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
SHOW TABLES; -- 查看所有表
DESC users; -- 查看表结构
3. 增删改查(CRUD)
-- 插入
INSERT INTO users (username, email) VALUES ('zhangsan', 'zs@example.com');
INSERT INTO users (username, email) VALUES ('lisi', 'ls@example.com');
-- 查询
SELECT * FROM users; -- 查全部
SELECT username, email FROM users WHERE id = 1;
SELECT * FROM users ORDER BY created_at DESC LIMIT 10;
-- 更新
UPDATE users SET email = 'new@example.com' WHERE username = 'zhangsan';
-- 删除
DELETE FROM users WHERE id = 2;
注意:UPDATE/DELETE 忘写 WHERE 会作用全表,生产环境先 SELECT 确认再动手。
三、创建用户并授权(安全必备)
不要用 root 连接业务程序,给每个应用建独立账号:
CREATE USER 'bloguser'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON blog.* TO 'bloguser'@'localhost'; -- 只给 blog 库权限
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'bloguser'@'localhost'; -- 查看权限
REVOKE ALL PRIVILEGES ON blog.* FROM 'bloguser'@'localhost'; -- 收回权限
DROP USER 'bloguser'@'localhost'; -- 删除用户
四、备份与恢复
备份(mysqldump):
# 备份单个库
mysqldump -u root -p blog > /backup/blog.sql
# 备份所有库
mysqldump -u root -p --all-databases > /backup/all.sql
# 带压缩,配合 crontab 定时备份
mysqldump -u root -p blog | gzip > /backup/blog-$(date +%F).sql.gz
恢复:
mysql -u root -p blog < /backup/blog.sql # 恢复到指定库
mysql -u root -p < /backup/all.sql # 恢复所有库
注意:恢复前确认目标库存在;mysqldump 备份时建议加 --single-transaction(InnoDB 一致快照,不锁表)。
五、远程连接配置
默认 MySQL 只监听本机(127.0.0.1),远程连接需要两步:
1. 修改监听地址
sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf # Ubuntu MariaDB
# 或 /etc/my.cnf.d/server.cnf(CentOS)
把 bind-address = 127.0.0.1 改为 0.0.0.0,重启:
sudo systemctl restart mariadb
2. 创建允许远程登录的用户
CREATE USER 'bloguser'@'%' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON blog.* TO 'bloguser'@'%';
FLUSH PRIVILEGES;
3. 防火墙/安全组放行 3306 端口
安全警告:3306 暴露公网极易被爆破,只放行你的办公 IP,或用 SSH 隧道代替直接暴露(详见 SSH 隧道教程)。
六、常见问题排查
ERROR 1698 (28000): Access denied for user 'root'@'localhost':Ubuntu 上 root 用 socket 认证,sudo mysql进入后执行ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';;Can't connect to local MySQL server through socket:服务没启动,systemctl status mariadb查看并启动;- 远程连不上:先确认
bind-address、再确认用户是'user'@'%'、最后查安全组 3306; Access denied密码错误:忘记密码用 skip-grant-tables 重置(见 MySQL 忘记密码专题);- 中文乱码:建库建表一律用
utf8mb4,连接串加charset=utf8mb4。
总结:MySQL 上手就四件事——systemctl start mariadb 启动服务、CREATE DATABASE 建库建表、INSERT/SELECT/UPDATE/DELETE 四类操作、mysqldump 备份。生产环境记住三条铁律:建库加 utf8mb4、业务用独立账号、修改删除先 SELECT,数据库基本稳了。



