MySQL / MariaDB 数据库管理:安装、用户、备份
在 Linux VDS 上安装 MySQL/MariaDB,创建用户与数据库、dump/import、性能调优与远程访问安全。
WordPress、电商、企业应用——底层都是数据库。MySQL 与其分支 MariaDB 是世界上使用最广的关系型数据库。本文涵盖在 Linux VDS 上安装、用户/DB 管理、备份与常见性能问题。
MySQL vs MariaDB——选哪个?
- MySQL:Oracle 所有,商业 + 社区版
- MariaDB:MySQL 的开源分支,约 95% 兼容,部分场景更快
大多数项目可互换——系统装了哪个都行。WordPress 都支持。新装推荐 MariaDB。
1. 安装
# Ubuntu/Debian
sudo apt update
sudo apt install mariadb-server -y
# AlmaLinux/RHEL
sudo dnf install mariadb-server -y
sudo systemctl enable --now mariadb
状态:
sudo systemctl status mariadb
2. 安全(总是第一步)
sudo mysql_secure_installation
- Set root password:强密码
- Remove anonymous users:Yes
- Disallow root login remotely:Yes
- Remove test database:Yes
- Reload privilege tables:Yes
3. 连接
sudo mysql -u root -p
退出:EXIT; 或 Ctrl+D
4. 创建数据库
CREATE DATABASE blog_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
SHOW DATABASES;
utf8mb4 支持 emoji 和非拉丁字符。旧 utf8 是 3 字节,emoji 会坏。
5. 创建用户 + 授权
CREATE USER 'blog_user'@'localhost' IDENTIFIED BY '强密码';
GRANT ALL PRIVILEGES ON blog_db.* TO 'blog_user'@'localhost';
GRANT SELECT ON blog_db.* TO 'reader'@'localhost';
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY '密码';
GRANT ALL ON app_db.* TO 'app_user'@'192.168.1.50';
FLUSH PRIVILEGES;
@'localhost' 只允许本机,@'%' 允许任何地方(不安全——只配合具体 IP)。
6. 查看 / 撤销权限
SHOW GRANTS FOR 'blog_user'@'localhost';
REVOKE INSERT, UPDATE ON blog_db.* FROM 'blog_user'@'localhost';
DROP USER '旧_user'@'localhost';
7. 备份(mysqldump)
单库
mysqldump -u root -p blog_db > blog_db.sql
压缩:
mysqldump -u root -p blog_db | gzip > blog_db_$(date +%Y%m%d).sql.gz
所有库
mysqldump -u root -p --all-databases | gzip > all_dbs.sql.gz
生产:无锁备份
mysqldump -u root -p --single-transaction --routines --triggers blog_db > blog_db.sql
--single-transaction 提供一致性备份且无锁(InnoDB 表)。
cron 自动化:
0 3 * * * mysqldump -u root -p'密码' blog_db | gzip > /backup/blog_$(date +\%Y\%m\%d).sql.gz
8. 恢复
mysql -u root -p blog_db < blog_db.sql
zcat blog_db.sql.gz | mysql -u root -p blog_db
DB 不存在则先 CREATE。
9. 远程访问
默认 MySQL 只监听 localhost。要远程:
/etc/mysql/mariadb.conf.d/50-server.cnf:
bind-address = 0.0.0.0
sudo systemctl restart mariadb
CREATE USER 'remote_user'@'YOUR_IP' IDENTIFIED BY '强密码';
GRANT ALL ON db_name.* TO 'remote_user'@'YOUR_IP';
FLUSH PRIVILEGES;
UFW 中只对指定 IP 开 3306:
sudo ufw allow from YOUR_IP to any port 3306
⚠️ 绝不要 bind-address = 0.0.0.0 + GRANT % + UFW 开放——公开的 MySQL = 暴力破解目标。
10. 性能调优
/etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
innodb_buffer_pool_size = 2G
query_cache_size = 64M
query_cache_type = 1
max_connections = 200
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 3
sudo systemctl restart mariadb
11. 实用命令
SELECT table_schema "Database",
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) "Size (MB)"
FROM information_schema.tables GROUP BY table_schema;
SHOW PROCESSLIST;
SELECT * FROM mysql.slow_log ORDER BY query_time DESC LIMIT 10;
REPAIR TABLE table_name;
OPTIMIZE TABLE table_name;
12. phpMyAdmin(GUI)
sudo apt install phpmyadmin -y
Apache 配置或手动 /etc/apache2/conf-available/phpmyadmin.conf。浏览器 http://vds-ip/phpmyadmin。
⚠️ 生产环境别把 phpMyAdmin 暴露在公网——用 .htaccess 限 IP 或 Cloudflare Access。
常见错误
- “Access denied for user”:密码错或用户
@'host'不匹配 - “Too many connections”:增大
max_connections,杀掉 idle - “Disk full”:日志变大 → 清理
/var/log/mysql/ - “InnoDB: Operating system error number 28”:磁盘满 → Linux 磁盘扩容
- “Can’t connect to MySQL server”:服务关 →
sudo systemctl status mariadb - 慢查询:开启 slow log,
EXPLAIN SELECT ...,加 INDEX
结论
MySQL/MariaDB 是核心基础设施——不论 WordPress 还是自家软件。5 分钟装好;备份 + 安全 + 调优 = 生产就绪。
KavesNET VDS 用 NVMe SSD,是 MySQL 的理想环境——磁盘 I/O 是 DB 的命脉。
相关:WordPress 手动安装 · 服务器备份
相关 文章
您可能也喜欢这些。
什么是 NVMe SSD?它对服务器性能的影响(对比 SATA SSD)
什么是 NVMe?它与 SATA SSD 有何区别?用 IOPS、延迟与真实数据说明 NVMe 为何已成为服务器标准。
阅读更多
什么是独立服务器(Dedicated Server)?谁真正需要它?
什么是独立服务器?它与 VDS 有何区别、何时必须使用?优势、成本与服务器托管(co-location)替代方案,尽在本指南。
阅读更多
VDS 租用指南:下单前必查的 10 项标准
从 CPU 型号到磁盘类型,从 DDoS 防护到备份——租用 VDS 前必须核实的 10 项标准,逐条讲解。别选错套餐。
阅读更多