在 Ubuntu 20 配置 MySQL 时的关键注意事项
MySQL 是一种广泛使用的开源关系型数据库管理系统,常被用于 Web 开发和其他应用程序的数据存储。对于 Ubuntu 20 用户,正确配置 MySQL 非常重要,既要确保其高效运行,又要保障其安全性。本文将详细说明在 Ubuntu 20 系统中配置 MySQL 时需要特别注意的关键事项。
1. 安装 MySQL
1.1 使用 apt 安装 MySQL
在 Ubuntu 20 中,MySQL 8.0 是默认版本。可以通过以下命令来安装 MySQL 服务器:
sudo apt update
sudo apt install mysql-server -y
解释:
sudo apt update
用于更新本地的软件包索引,确保你安装的 MySQL 版本是最新的。sudo apt install mysql-server -y
命令安装 MySQL 服务器。
1.2 启动和检查 MySQL 服务
安装完成后,MySQL 服务会自动启动。你可以使用以下命令检查 MySQL 服务的状态:
sudo systemctl status mysql
如果服务未启动,可以手动启动:
sudo systemctl start mysql
并确保 MySQL 在系统启动时自动启动:
sudo systemctl enable mysql
1.3 配置防火墙
如果你的系统启用了防火墙(例如 UFW),你需要允许 MySQL 服务通过防火墙:
sudo ufw allow mysql
这会自动配置防火墙规则,允许默认的 MySQL 端口 3306 进行连接。
2. 安全性配置
MySQL 的默认安装通常没有开启很多安全措施,为了确保 MySQL 安全运行,推荐进行以下配置。
2.1 运行 mysql_secure_installation
MySQL 提供了一个安全配置脚本 mysql_secure_installation
,可以帮助你完成一系列安全设置,包括:
- 设置 root 密码
- 删除匿名用户
- 禁止 root 用户远程登录
- 删除测试数据库
运行以下命令启动安全配置向导:
sudo mysql_secure_installation
根据提示进行设置,推荐设置一个强密码,并删除测试数据库和匿名用户。这个脚本将极大提升 MySQL 的安全性。
2.2 修改 bind-address
默认情况下,MySQL 绑定到所有的网络接口。如果你只需要从本地访问数据库,可以通过修改 MySQL 配置文件来限制只允许本地访问。
编辑 /etc/mysql/mysql.conf.d/mysqld.cnf
文件:
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
找到并修改 bind-address
参数:
bind-address = 127.0.0.1
这将使 MySQL 仅允许从本地连接。如果需要远程访问,则可以将其设置为服务器的 IP 地址,或者使用 0.0.0.0
绑定到所有接口。
2.3 配置 root 用户权限
默认情况下,MySQL 的 root 用户可以在所有地方访问数据库。如果不打算远程管理 MySQL,可以通过下述命令限制 root 用户只允许从本地访问。
sudo mysql -u root
然后执行以下 SQL 语句:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
将 your_password
替换为你想设置的强密码。
2.4 使用 mysql_native_password
认证插件
MySQL 8.0 默认使用新的身份验证插件 caching_sha2_password
,但一些较旧的客户端可能不支持。为了确保兼容性,可以将 root
用户的认证插件改为 mysql_native_password
:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password';
3. 数据库用户和权限管理
在配置 MySQL 时,合理管理数据库用户和权限是非常重要的。你不应使用 root 用户进行日常数据库操作,而应为不同的应用程序和用户创建专门的数据库用户。
3.1 创建数据库和用户
创建一个数据库和一个具有该数据库权限的用户:
CREATE DATABASE mydatabase;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'user_password';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
解释:
CREATE DATABASE mydatabase;
创建一个新的数据库。CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'user_password';
创建一个新用户,并为其设置密码。GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
为该用户赋予对mydatabase
数据库的所有权限。
3.2 刷新权限
每次修改用户权限后,都需要执行以下命令来刷新 MySQL 的权限表,使更改生效:
FLUSH PRIVILEGES;
4. 配置 MySQL 自动启动
MySQL 安装完成后,通常会自动配置为随系统启动。但是,如果需要手动配置 MySQL 作为系统服务启动,可以使用以下命令:
sudo systemctl enable mysql
5. 性能优化和配置
MySQL 的性能配置在生产环境中至关重要,合理的配置可以显著提升数据库性能。
5.1 调整 innodb_buffer_pool_size
innodb_buffer_pool_size
是 MySQL 中最重要的性能参数之一,决定了 InnoDB 存储引擎缓存数据的大小。对于大部分服务器,建议将其设置为服务器物理内存的 60%-80%。
例如,如果服务器有 8GB 内存,可以将其设置为 4GB:
innodb_buffer_pool_size = 4G
5.2 配置查询缓存
尽管在 MySQL 8.0 中查询缓存默认已禁用,但如果你的应用对读取数据有较高的需求,并且数据不频繁变化,可以考虑启用查询缓存。
编辑 MySQL 配置文件:
query_cache_type = 1
query_cache_size = 64M
5.3 配置 max_connections
max_connections
控制 MySQL 允许的最大连接数。根据应用的负载,适当调整此值。默认为 151,但如果有大量并发连接,可以适当提高此值。
max_connections = 500
6. 定期备份
确保数据库的安全性和完整性是非常重要的,定期备份是预防数据丢失的关键。
使用 mysqldump
工具可以进行数据库备份:
mysqldump -u root -p mydatabase > /path/to/backup/mydatabase.sql
总结
配置 MySQL 数据库时,除了基本的安装和服务启动外,安全性、性能优化和用户权限管理都是非常关键的。对于 Ubuntu 20 用户,在安装和配置 MySQL 时,需要特别注意以下几点:
- 运行
mysql_secure_installation
来增强 MySQL 的安全性。 - 修改
bind-address
以限制远程访问。 - 使用
mysql_native_password
来保证兼容性。 - 管理数据库用户和权限,避免使用 root 用户。
- 配置性能优化参数,如
innodb_buffer_pool_size
和max_connections
。
通过合理配置和优化 MySQL,能够确保数据库的安全、稳定和高效运行。