MySQL是最流行的关系型数据库之一,广泛用于Web应用、内容管理系统和各类业务系统。本文介绍在搬瓦工VPS上安装MySQL 8.0的完整流程,涵盖Ubuntu/Debian和CentOS两大主流系统,包括安全初始化、用户管理和远程访问配置。
Tip: 搬瓦工VPS默认提供root权限,安装数据库前建议先完成系统更新。如果内存较小(512MB),建议同时配置Swap以避免OOM。
Ubuntu 22.04及以上版本的官方仓库已包含MySQL 8.0,可直接安装:
apt update
apt install mysql-server -y
安装完成后MySQL会自动启动。确认服务状态:
systemctl status mysql
systemctl enable mysql
查看安装的MySQL版本:
mysql --version
CentOS默认仓库中没有MySQL 8.0,需要先添加官方YUM源:
# 添加MySQL官方YUM源(CentOS 8/9/Stream)
rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-9.noarch.rpm
# 安装MySQL Server
dnf install mysql-server -y
# 启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld
CentOS安装后,MySQL会生成一个临时root密码,查看方式:
grep 'temporary password' /var/log/mysqld.log
安装完成后必须运行mysql_secure_installation进行安全配置,这是MySQL安装后最重要的一步:
mysql_secure_installation
脚本会依次询问以下内容:
完成后使用密码登录MySQL:
mysql -u root -p
生产环境中不应直接使用root账户操作数据库,正确做法是为每个应用创建独立的数据库和用户:
# 登录MySQL
mysql -u root -p
# 创建数据库(指定UTF-8编码)
CREATE DATABASE myapp_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
# 创建用户(仅允许本地连接)
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
# 授予权限
GRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';
# 刷新权限
FLUSH PRIVILEGES;
# 验证用户权限
SHOW GRANTS FOR 'myapp_user'@'localhost';
如果需要创建多个数据库,重复以上步骤即可。建议每个项目使用独立的数据库用户,便于权限管理和安全隔离。
默认情况下MySQL只监听本地连接(127.0.0.1)。如果需要从其他服务器连接数据库,需要修改配置:
# 编辑MySQL配置文件
nano /etc/mysql/mysql.conf.d/mysqld.cnf # Ubuntu/Debian
# 或
nano /etc/my.cnf # CentOS
# 找到bind-address行,修改为:
bind-address = 0.0.0.0
重启MySQL使配置生效:
systemctl restart mysql
创建允许远程连接的用户:
# 允许从指定IP连接
CREATE USER 'remote_user'@'192.168.1.100' IDENTIFIED BY 'RemotePass123!';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'remote_user'@'192.168.1.100';
# 或允许从任意IP连接(不推荐用于生产)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'RemotePass123!';
GRANT ALL PRIVILEGES ON myapp_db.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;
Tip: 开启远程访问后务必配置防火墙,仅放行可信IP访问3306端口。
对于搬瓦工VPS常见的1GB-2GB内存配置,建议调整以下MySQL参数:
# 编辑配置文件,在[mysqld]段添加:
[mysqld]
# 内存相关
innodb_buffer_pool_size = 256M # 约为可用内存的50-70%
innodb_log_file_size = 64M
# 连接相关
max_connections = 50
wait_timeout = 300
# 字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2
修改后重启MySQL:
systemctl restart mysql
日常维护中常用的MySQL命令:
# 查看所有数据库
SHOW DATABASES;
# 查看数据库大小
SELECT table_schema AS 'Database',
ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS 'Size (MB)'
FROM information_schema.tables
GROUP BY table_schema;
# 查看当前连接数
SHOW PROCESSLIST;
# 查看MySQL状态
STATUS;
# 查看变量设置
SHOW VARIABLES LIKE 'max_connections';
SHOW VARIABLES LIKE 'innodb_buffer_pool_size';
更多MySQL性能调优请参考MySQL性能优化与安全配置指南,数据库备份请参考VPS数据库自动备份方案。
Tip: 更多教程请查看新手教程。