安装 MySQL
CentOS 7 默认的 yum
源中不包含 MySQL Community Server,因此我们需要首先添加官方的 Yum 软件源。
下载并安装 MySQL Yum 仓库
访问 MySQL 官方网站获取适合 CentOS 7 的 Yum 仓库下载链接,然后使用 wget
命令下载。
wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm
下载完成后,使用 yum
命令本地安装这个仓库包:
sudo yum localinstall mysql80-community-release-el7-5.noarch.rpm
安装成功后,系统会新增两个仓库:mysql80-community
(默认启用)和 mysql-connectors-community
。
安装 MySQL 服务器
可以直接通过 yum
命令安装 MySQL Community Server 了:
sudo yum install mysql-community-server
在安装过程中,yum
会提示导入 GPG 密钥,输入 y
并回车确认即可。
启动并设置开机自启
安装完成后,使用 systemctl
命令启动 MySQL 服务,并将其设置为开机自动启动:
sudo systemctl start mysqld sudo systemctl enable mysqld
可以使用 sudo systemctl status mysqld
命令来检查服务是否正在正常运行。
安全配置
MySQL 在首次启动时,会为 root
用户生成一个临时的随机密码,并存储在日志文件中,我们必须进行安全配置,包括修改密码、移除匿名用户等。
获取临时密码
临时密码位于 /var/log/mysqld.log
文件中,可以通过 grep
命令快速查找:
sudo grep 'temporary password' /var/log/mysqld.log
输出会类似如下形式,其中最后一部分就是临时密码:[Note] A temporary password is generated for root@localhost: aL!dkf7>s>K1
运行安全配置脚本
MySQL 提供了一个名为 mysql_secure_installation
的交互式脚本来引导我们完成基础的安全设置。
sudo mysql_secure_installation
脚本执行流程如下:
- 验证密码组件: 首先询问是否启用密码验证插件(Validate Password Plugin),建议选择
y
,这会强制要求新密码具备一定的复杂度(长度、大小写、数字、特殊字符)。 - 设置 root 密码: 输入之前获取的临时密码,然后按照提示设置一个新的、强固的
root
用户密码。 - 移除匿名用户: 询问是否移除匿名用户,选择
y
,匿名用户是潜在的安全风险。 - 禁止 root 远程登录: 询问是否禁止
root
用户从远程主机登录,强烈建议选择y
,日常管理应通过 SSH 登录服务器后,再以localhost
身份连接数据库。 - 移除测试数据库: 询问是否移除默认的
test
数据库,选择y
。 - 重新加载权限表: 选择
y
使所有更改立即生效。
至此,MySQL 的基础安全配置已完成。
基本数据库与用户管理
我们可以使用新设置的 root
密码登录 MySQL,并进行基本的数据库和用户管理操作。
登录 MySQL
mysql -u root -p
系统会提示输入密码,输入后即可进入 MySQL 命令行界面。
创建数据库和表
以下是一些基础的 SQL 命令示例:
-- 创建一个名为 'webapp' 的数据库 CREATE DATABASE webapp; -- 查看所有数据库 SHOW DATABASES; -- 使用 'webapp' 数据库 USE webapp; -- 创建一个 'users' 表 CREATE TABLE users ( id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(50) NOT NULL UNIQUE, email VARCHAR(100) NOT NULL, created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ); -- 查看表结构 DESCRIBE users; -- 插入一条数据 INSERT INTO users (username, email) VALUES ('admin', 'admin@example.com'); -- 查询数据 SELECT * FROM users;
创建专用数据库用户
为了安全起见,应用程序不应直接使用 root
用户,应为每个应用创建独立的数据库用户,并仅授予其必要的权限。
-- 创建一个新用户 'app_user',只能从本机(localhost)连接,密码为 'YourStrongPassword' CREATE USER 'app_user'@'localhost' IDENTIFIED BY 'YourStrongPassword'; -- 授予 'app_user' 对 'webapp' 数据库所有表的所有权限 GRANT ALL PRIVILEGES ON webapp.* TO 'app_user'@'localhost'; -- 刷新权限,使更改生效 FLUSH PRIVILEGES; -- 退出 MySQL EXIT;
配置文件与防火墙
MySQL 的主要配置文件是 /etc/my.cnf
,你可以根据服务器硬件和应用需求调整其中的参数,如字符集、最大连接数、缓存大小等。
参数 | 推荐值/说明 | 作用 |
---|---|---|
default-storage-engine | InnoDB | 设置默认存储引擎,InnoDB 支持事务、行级锁。 |
character-set-server | utf8mb4 | 设置服务器默认字符集,utf8mb4 完全支持包括 emoji 在内的 Unicode 字符。 |
collation-server | utf8mb4_unicode_ci | 设置默认排序规则。 |
max_connections | 151 (或更高) | 允许的最大并发连接数,需根据应用需求调整。 |
innodb_buffer_pool_size | 系统内存的 50%-70% | InnoDB 存储引擎最重要的缓存参数,对性能影响巨大。 |
修改配置后,需要重启 MySQL 服务才能生效:sudo systemctl restart mysqld
。
如果需要允许其他服务器远程连接此 MySQL 实例,除了在 MySQL 中创建可远程登录的用户(如 'user'@'%'
)外,还必须开放 CentOS 7 的防火墙端口 3306:
sudo firewall-cmd --permanent --add-port=3306/tcp sudo firewall-cmd --reload
开放远程端口会带来安全风险,请确保只对可信的 IP 地址开放,并使用强密码。
相关问答 FAQs
问题1:如果忘记了 MySQL 的 root 密码,该如何重置?
解答: 重置 root 密码需要以“安全模式”启动 MySQL,步骤如下:
- 停止 MySQL 服务:
sudo systemctl stop mysqld
- 跳过权限验证启动:
sudo mysqld_safe --skip-grant-tables &
- 无密码登录:
mysql -u root
- 修改密码: 在 MySQL 命令行中执行:
FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewStrongPassword';
- 正常重启服务: 使用
sudo killall mysqld
停止安全模式进程,然后正常启动:sudo systemctl start mysqld
,现在就可以用新密码登录了。
问题2:如何将数据库从一个服务器迁移到另一个 CentOS 7 服务器?
解答: 最常用的方法是使用 mysqldump
工具进行逻辑备份和恢复。
- 在源服务器上导出数据库:
mysqldump -u root -p --single-transaction --routines --triggers database_name > database_name.sql
这个命令会创建一个包含数据库结构、数据、存储过程和触发器的 SQL 文件。
- 将 SQL 文件传输到目标服务器: 可以使用
scp
或rsync
命令。scp database_name.sql user@target_server:/path/to/backup/
- 在目标服务器上导入数据库:
在目标服务器上登录 MySQL,创建一个空的数据库:CREATE DATABASE database_name;
。
退出 MySQL,在命令行中执行导入:mysql -u root -p database_name < /path/to/backup/database_name.sql
输入密码后,数据便会开始导入,导入完成后,记得在目标服务器上为应用创建相应的用户并授权。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复