Linux 系统安装与配置 MySQL 数据库完整指南
Linux 系统安装与配置 MySQL 数据库完整指南
前言
MySQL 是一款广泛使用的开源关系型数据库管理系统,被广泛应用于各类Web应用和服务器环境中。本文将详细介绍在主流Linux发行版(包括Ubuntu/Debian系列和CentOS/RHEL系列)上安装、配置和管理MySQL的完整流程,适合各类用户参考。
目录
- 1. 安装前准备
- 2. 在 Ubuntu/Debian 系统安装 MySQL
- 3. 在 CentOS/RHEL 系统安装 MySQL
- 4. 验证 MySQL 服务状态
- 5. 初始化安全配置
- 6. 登录 MySQL 数据库
- 7. 基本配置调整
- 8. 配置远程访问
- 9. 数据库与用户管理
- 10. 数据备份与恢复
- 11. 卸载 MySQL
- 12. 常见问题解决
1. 安装前准备
在安装MySQL之前,请执行以下准备工作:
确保系统网络连接正常
1
ping -c 3 www.baidu.com切换到root用户或确保拥有sudo权限
1
2
3
4
5# 切换到root用户
su -
# 或使用sudo权限(需要当前用户在sudoers列表中)
sudo -i更新系统软件包(推荐)
Ubuntu/Debian系统:
1
apt update && apt upgrade -yCentOS/RHEL系统:
1
2
3yum update -y
# 或对于CentOS 8及以上使用dnf
dnf update -y
2. 在 Ubuntu/Debian 系统安装 MySQL
Ubuntu/Debian系统默认软件源中包含MySQL,可以直接通过apt命令安装:
安装MySQL服务器
1
apt install mysql-server -y安装完成后,MySQL服务会自动启动
(可选)安装MySQL客户端
1
apt install mysql-client -y
3. 在 CentOS/RHEL 系统安装 MySQL
CentOS/RHEL系统默认软件源中通常是MariaDB(MySQL的分支),如果需要安装官方MySQL,需执行以下步骤:
下载并安装MySQL官方仓库
CentOS 7:
1
2wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
rpm -ivh mysql80-community-release-el7-3.noarch.rpmCentOS 8:
1
2wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
rpm -ivh mysql80-community-release-el8-1.noarch.rpm
安装MySQL服务器
1
2
3
4
5# CentOS 7
yum install mysql-community-server -y
# CentOS 8
dnf install mysql-community-server -y启动MySQL服务并设置开机自启
1
2
3
4
5# 启动服务
systemctl start mysqld
# 设置开机自启
systemctl enable mysqld
4. 验证 MySQL 服务状态
无论哪种Linux发行版,都可以使用以下命令检查MySQL服务状态:
1 | |
如果服务正常运行,会显示”active (running)”状态。
其他常用服务控制命令:
1 | |
5. 初始化安全配置
MySQL提供了一个安全配置脚本,可以帮助我们完成基本的安全设置:
运行安全配置脚本
1
mysql_secure_installation按照提示完成以下配置:
- 设置root用户密码(对于新安装,CentOS可能会生成临时密码,见下方说明)
- 移除匿名用户
- 禁止root用户远程登录
- 移除测试数据库
- 重新加载权限表
注意:对于CentOS系统的新安装,MySQL会生成一个临时root密码,可通过以下命令查看:
1 | |
如果找不到临时密码,可以尝试重置root密码:
1 | |
6. 登录 MySQL 数据库
使用以下命令登录MySQL:
1 | |
输入设置的root密码后,将进入MySQL命令行界面,显示类似以下内容:
1 | |
7. 基本配置调整
MySQL的主要配置文件位置:
- Ubuntu/Debian:
/etc/mysql/mysql.conf.d/mysqld.cnf - CentOS/RHEL:
/etc/my.cnf或/etc/my.cnf.d/mysql-server.cnf
常用配置调整:
编辑配置文件
1
2
3
4
5# Ubuntu/Debian
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS/RHEL
nano /etc/my.cnf常见配置项修改(根据需求调整):
1
2
3
4
5
6
7
8
9
10
11
12
13
14# 设置数据库默认字符集
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
# 调整最大连接数
max_connections = 1000
# 调整查询缓存大小(MySQL 8.0已移除查询缓存)
# query_cache_size = 64M
# 设置慢查询日志
slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2保存配置文件并重启MySQL服务使配置生效
1
systemctl restart mysql/mysqld
8. 配置远程访问
默认情况下,MySQL只允许本地访问。如需从远程主机访问,需进行以下配置:
修改MySQL配置文件,注释掉bind-address
1
2
3
4
5
6
7
8
9# 编辑配置文件
# Ubuntu/Debian
nano /etc/mysql/mysql.conf.d/mysqld.cnf
# CentOS/RHEL
nano /etc/my.cnf
# 找到并注释掉这一行
# bind-address = 127.0.0.1重启MySQL服务
1
systemctl restart mysql/mysqld登录MySQL,授权远程访问权限
1
mysql -u root -p在MySQL命令行中执行:
1
2
3
4
5
6
7
8
9
10
11
12-- 允许root用户从任何IP访问(不推荐生产环境)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '你的密码' WITH GRANT OPTION;
-- 允许指定用户从特定IP访问
CREATE USER 'username'@'192.168.1.100' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'192.168.1.100';
-- 刷新权限
FLUSH PRIVILEGES;
-- 退出
exit;(如需要)配置防火墙允许3306端口
Ubuntu/Debian(使用ufw):
1
2ufw allow 3306/tcp
ufw reloadCentOS/RHEL(使用firewalld):
1
2firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
9. 数据库与用户管理
以下是MySQL常用的数据库和用户管理命令:
登录MySQL后执行:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29-- 创建数据库
CREATE DATABASE dbname CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
-- 查看所有数据库
SHOW DATABASES;
-- 删除数据库(谨慎操作)
DROP DATABASE dbname;
-- 创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
-- 授予用户权限(全部权限)
GRANT ALL PRIVILEGES ON dbname.* TO 'username'@'localhost';
-- 授予用户特定权限
GRANT SELECT, INSERT, UPDATE ON dbname.* TO 'username'@'localhost';
-- 撤销用户权限
REVOKE DELETE ON dbname.* FROM 'username'@'localhost';
-- 查看用户权限
SHOW GRANTS FOR 'username'@'localhost';
-- 删除用户
DROP USER 'username'@'localhost';
-- 刷新权限
FLUSH PRIVILEGES;修改用户密码:
1
2
3
4
5-- MySQL 5.7及之前版本
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('newpassword');
-- MySQL 8.0及以上版本
ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';
10. 数据备份与恢复
使用mysqldump命令备份数据库:
1
2
3
4
5
6
7
8# 备份单个数据库
mysqldump -u root -p dbname > dbname_backup.sql
# 备份所有数据库
mysqldump -u root -p --all-databases > all_databases_backup.sql
# 备份数据库结构(不包含数据)
mysqldump -u root -p --no-data dbname > dbname_structure.sql恢复数据库:
1
2
3
4
5# 恢复单个数据库(需先创建空数据库)
mysql -u root -p dbname < dbname_backup.sql
# 恢复所有数据库
mysql -u root -p < all_databases_backup.sql自动备份脚本示例:
1
2# 创建备份脚本
nano /usr/local/bin/backup_mysql.sh脚本内容:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16#!/bin/bash
DATE=$(date +%Y-%m-%d_%H-%M-%S)
BACKUP_DIR="/var/backups/mysql"
DB_NAME="your_database_name"
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 备份数据库
mysqldump -u root -p'your_password' $DB_NAME > $BACKUP_DIR/$DB_NAME_$DATE.sql
# 压缩备份文件
gzip $BACKUP_DIR/$DB_NAME_$DATE.sql
# 删除7天前的备份
find $BACKUP_DIR -name "$DB_NAME*.sql.gz" -mtime +7 -delete设置权限并添加到定时任务:
1
2
3
4
5
6
7# 设置执行权限
chmod +x /usr/local/bin/backup_mysql.sh
# 添加到crontab,每天凌晨3点执行
crontab -e
# 添加以下行
0 3 * * * /usr/local/bin/backup_mysql.sh
11. 卸载 MySQL
如需完全卸载MySQL,执行以下步骤:
停止MySQL服务
1
systemctl stop mysql/mysqld卸载相关包
Ubuntu/Debian:
1
2
3apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* -y
apt autoremove -y
apt autocleanCentOS/RHEL:
1
2
3yum remove mysql-community-server mysql-community-client -y
# 或使用dnf
dnf remove mysql-community-server mysql-community-client -y
删除残留文件和目录
1
2
3
4
5# Ubuntu/Debian
rm -rf /etc/mysql /var/lib/mysql /var/log/mysql
# CentOS/RHEL
rm -rf /etc/my.cnf /var/lib/mysql /var/log/mysqld.log
12. 常见问题解决
忘记root密码
参考第5节中的重置root密码方法无法远程连接MySQL
- 检查bind-address配置是否已注释
- 检查用户是否有远程访问权限
- 检查防火墙是否开放3306端口
- 检查网络连接和IP地址是否正确
MySQL服务无法启动
- 查看错误日志:
tail -f /var/log/mysql/error.log(Ubuntu)或tail -f /var/log/mysqld.log(CentOS) - 检查端口是否被占用:
netstat -tulpn | grep 3306 - 检查数据目录权限:
ls -ld /var/lib/mysql
- 查看错误日志:
中文乱码问题
- 确保数据库使用utf8mb4字符集
- 检查配置文件中的字符集设置
- 创建数据库时指定字符集
MySQL连接数过多
- 调整配置文件中的max_connections参数
- 检查应用程序是否正确释放连接
- 考虑使用连接池管理数据库连接
总结
本文详细介绍了在主流Linux系统上安装、配置和管理MySQL的完整流程,包括安全设置、远程访问配置、用户管理、数据备份等关键操作。根据实际需求,你可以选择性地实施这些配置,以确保MySQL数据库的安全、稳定和高效运行。
在生产环境中,还需要考虑更多因素,如主从复制、集群部署、性能监控等高级配置,这些可以在掌握基础操作后逐步深入学习。