在Linux系统中配置MySQL数据库是许多应用部署的基础环节,涵盖安装、初始化、安全设置、用户管理、权限配置等多个步骤,以下以主流发行版(Ubuntu/Debian和CentOS/RHEL)为例,详细说明完整配置流程。
安装MySQL数据库
不同Linux发行版的包管理工具不同,安装命令有所差异:
-
Ubuntu/Debian系统:
更新软件包列表后,安装MySQL Server:sudo apt update sudo apt install mysql-server
安装过程中会自动启动MySQL服务,可通过
systemctl status mysql
检查状态。 -
CentOS/RHEL系统:
先下载MySQL官方仓库(如MySQL 8.0),然后安装:sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el8-7.noarch.rpm -y sudo yum install mysql-community-server -y
安装后启动服务:
sudo systemctl start mysqld
,并设置开机自启:sudo systemctl enable mysqld
。
初始化MySQL与安全配置
首次安装后,需运行安全配置脚本设置root密码、移除匿名用户等:
sudo mysql_secure_installation
脚本会分步引导操作,包括:
- 设置root密码:输入并确认密码(需包含大小写字母、数字、特殊字符)。
- 移除匿名用户:防止未授权访问。
- 禁止root远程登录:提升安全性,仅允许本地访问(生产环境建议保留)。
- 移除测试数据库:避免误操作。
- 重新加载权限表:使配置立即生效。
用户与权限管理
创建新用户
通过MySQL命令行登录(默认root用户):
sudo mysql -u root -p
创建用户并指定主机(如'user_name'@'localhost'
仅限本地访问,'user_name'@'%'
允许任意主机):
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'StrongPassword123!';
授权用户
为用户分配数据库权限(如db_name
数据库的SELECT
、INSERT
、UPDATE
权限):
GRANT SELECT, INSERT, UPDATE ON db_name.* TO 'new_user'@'localhost';
权限类型说明(表格):
| 权限类型 | 说明 | 示例范围 |
|—————-|——————————-|——————-|
| SELECT | 查询数据 | db_name.*
|
| INSERT | 插入数据 | db_name.table1
|
| UPDATE | 更新数据 | db_name.*
|
| DELETE | 删除数据 | db_name.*
|
| ALL PRIVILEGES | 所有权限(除GRANT OPTION外) | |
刷新权限使配置生效:
FLUSH PRIVILEGES;
撤销权限
若需收回用户权限:
REVOKE INSERT ON db_name.* FROM 'new_user'@'localhost';
配置远程访问(可选)
若需允许其他服务器访问MySQL,需修改以下配置:
- 修改MySQL配置文件:
编辑/etc/mysql/mysql.conf.d/mysqld.cnf
(Ubuntu)或/etc/my.cnf
(CentOS),注释或修改bind-address
:# bind-address = 127.0.0.1 # 注释此行或改为0.0.0.0 bind-address = 0.0.0.0 # 允许任意IP访问
- 开放防火墙端口:
- Ubuntu(ufw):
sudo ufw allow 3306/tcp
- CentOS(firewalld):
sudo firewall-cmd --permanent --add-port=3306/tcp && sudo firewall-cmd --reload
- Ubuntu(ufw):
- 创建允许远程访问的用户:
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'RemotePassword123!'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%'; FLUSH PRIVILEGES;
服务管理与配置优化
服务管理
- 启动/停止/重启服务:
sudo systemctl start/stop/restart mysql # Ubuntu sudo systemctl start/stop/restart mysqld # CentOS
- 查看服务状态:
sudo systemctl status mysql
- 查看错误日志:
sudo tail -f /var/log/mysql/error.log
(Ubuntu)或/var/log/mysqld.log
(CentOS)
性能优化(基础)
编辑MySQL配置文件(如/etc/mysql/my.cnf
),调整关键参数:
[mysqld] innodb_buffer_pool_size = 1G # InnoDB缓冲池,建议为物理内存的50%-70% max_connections = 200 # 最大连接数,根据服务器负载调整 character-set-server = utf8mb4 # 字符集,支持emoji等特殊字符
修改后重启MySQL服务使配置生效。
数据备份与恢复
备份数据
使用mysqldump
工具备份单个或所有数据库:
# 备份单个数据库(包含表结构) mysqldump -u root -p db_name > db_backup.sql # 备份所有数据库 mysqldump -u root -p --all-databases > full_backup.sql # 备份并压缩(节省空间) mysqldump -u root -p db_name | gzip > db_backup.sql.gz
恢复数据
# 恢复单个数据库(需先创建空数据库) mysql -u root -p db_name < db_backup.sql # 恢复所有数据库(覆盖现有数据) mysql -u root -p < full_backup.sql
FAQs
Q1:忘记MySQL root密码怎么办?
A:可通过跳过权限表重置密码(以Ubuntu为例):
- 停止MySQL服务:
sudo systemctl stop mysql
- 跳过权限表启动:
sudo mysqld_safe --skip-grant-tables &
- 无密码登录MySQL:
mysql -u root
- 更新root密码(MySQL 8.0+):
USE mysql; UPDATE user SET authentication_string=PASSWORD('NewPassword123!') WHERE User='root'; FLUSH PRIVILEGES;
- 重启MySQL服务:
sudo systemctl restart mysql
Q2:如何优化MySQL性能?
A:除调整配置文件参数外,可采取以下措施:
- 索引优化:为常用查询字段创建索引(如
CREATE INDEX idx_name ON table_name(column);
)。 - 定期维护:使用
ANALYZE TABLE
更新表统计信息,OPTIMIZE TABLE
碎片整理(适用于InnoDB)。 - 监控慢查询:开启慢查询日志(
slow_query_log=1
),定位并优化低效SQL。 - 调整存储引擎:InnoDB适合事务处理,MyISAM适合读密集型场景,根据需求选择。
通过以上步骤,可完成Linux环境下MySQL数据库的基础配置与管理,后续可根据实际需求进一步优化和扩展功能。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/23016.html