跳到主要内容
不要错过新客户专属 20% 折扣优惠! 优惠码: KAVESNET20 已复制 |
MySQL

MySQL / MariaDB 数据库管理:安装、用户、备份

在 Linux VDS 上安装 MySQL/MariaDB,创建用户与数据库、dump/import、性能调优与远程访问安全。

KavesNET 团队 2025年10月9日 3 分钟阅读
MySQL MariaDB 数据库管理图片

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

cron 文章3-2-1 备份文章

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 手动安装 · 服务器备份

标签 MySQL MariaDB 数据库 教程

相关 文章

您可能也喜欢这些。

联系我们