Linux 系统安装与配置 MySQL 数据库完整指南

Linux 系统安装与配置 MySQL 数据库完整指南

前言

MySQL 是一款广泛使用的开源关系型数据库管理系统,被广泛应用于各类Web应用和服务器环境中。本文将详细介绍在主流Linux发行版(包括Ubuntu/Debian系列和CentOS/RHEL系列)上安装、配置和管理MySQL的完整流程,适合各类用户参考。

目录

1. 安装前准备

在安装MySQL之前,请执行以下准备工作:

  1. 确保系统网络连接正常

    1
    ping -c 3 www.baidu.com
  2. 切换到root用户或确保拥有sudo权限

    1
    2
    3
    4
    5
    # 切换到root用户
    su -

    # 或使用sudo权限(需要当前用户在sudoers列表中)
    sudo -i
  3. 更新系统软件包(推荐)

    • Ubuntu/Debian系统:

      1
      apt update && apt upgrade -y
    • CentOS/RHEL系统:

      1
      2
      3
      yum update -y
      # 或对于CentOS 8及以上使用dnf
      dnf update -y

2. 在 Ubuntu/Debian 系统安装 MySQL

Ubuntu/Debian系统默认软件源中包含MySQL,可以直接通过apt命令安装:

  1. 安装MySQL服务器

    1
    apt install mysql-server -y
  2. 安装完成后,MySQL服务会自动启动

  3. (可选)安装MySQL客户端

    1
    apt install mysql-client -y

3. 在 CentOS/RHEL 系统安装 MySQL

CentOS/RHEL系统默认软件源中通常是MariaDB(MySQL的分支),如果需要安装官方MySQL,需执行以下步骤:

  1. 下载并安装MySQL官方仓库

    • CentOS 7:

      1
      2
      wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
      rpm -ivh mysql80-community-release-el7-3.noarch.rpm
    • CentOS 8:

      1
      2
      wget https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
      rpm -ivh mysql80-community-release-el8-1.noarch.rpm
  2. 安装MySQL服务器

    1
    2
    3
    4
    5
    # CentOS 7
    yum install mysql-community-server -y

    # CentOS 8
    dnf install mysql-community-server -y
  3. 启动MySQL服务并设置开机自启

    1
    2
    3
    4
    5
    # 启动服务
    systemctl start mysqld

    # 设置开机自启
    systemctl enable mysqld

4. 验证 MySQL 服务状态

无论哪种Linux发行版,都可以使用以下命令检查MySQL服务状态:

1
2
3
systemctl status mysql    # Ubuntu/Debian系统
# 或
systemctl status mysqld # CentOS/RHEL系统

如果服务正常运行,会显示”active (running)”状态。

其他常用服务控制命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启动服务
systemctl start mysql/mysqld

# 停止服务
systemctl stop mysql/mysqld

# 重启服务
systemctl restart mysql/mysqld

# 查看服务是否开机自启
systemctl is-enabled mysql/mysqld

# 设置开机自启
systemctl enable mysql/mysqld

# 禁用开机自启
systemctl disable mysql/mysqld

5. 初始化安全配置

MySQL提供了一个安全配置脚本,可以帮助我们完成基本的安全设置:

  1. 运行安全配置脚本

    1
    mysql_secure_installation
  2. 按照提示完成以下配置:

    • 设置root用户密码(对于新安装,CentOS可能会生成临时密码,见下方说明)
    • 移除匿名用户
    • 禁止root用户远程登录
    • 移除测试数据库
    • 重新加载权限表

注意:对于CentOS系统的新安装,MySQL会生成一个临时root密码,可通过以下命令查看:

1
grep 'temporary password' /var/log/mysqld.log

如果找不到临时密码,可以尝试重置root密码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 停止MySQL服务
systemctl stop mysqld

# 跳过权限验证启动
mysqld_safe --skip-grant-tables &

# 登录MySQL
mysql -u root

# 在MySQL命令行中执行
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
exit;

# 重启MySQL服务
systemctl restart mysqld

6. 登录 MySQL 数据库

使用以下命令登录MySQL:

1
mysql -u root -p

输入设置的root密码后,将进入MySQL命令行界面,显示类似以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.26-0ubuntu0.20.04.2 (Ubuntu)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

7. 基本配置调整

MySQL的主要配置文件位置:

  • Ubuntu/Debian:/etc/mysql/mysql.conf.d/mysqld.cnf
  • CentOS/RHEL:/etc/my.cnf/etc/my.cnf.d/mysql-server.cnf

常用配置调整:

  1. 编辑配置文件

    1
    2
    3
    4
    5
    # Ubuntu/Debian
    nano /etc/mysql/mysql.conf.d/mysqld.cnf

    # CentOS/RHEL
    nano /etc/my.cnf
  2. 常见配置项修改(根据需求调整):

    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
  3. 保存配置文件并重启MySQL服务使配置生效

    1
    systemctl restart mysql/mysqld

8. 配置远程访问

默认情况下,MySQL只允许本地访问。如需从远程主机访问,需进行以下配置:

  1. 修改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
  2. 重启MySQL服务

    1
    systemctl restart mysql/mysqld
  3. 登录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;
  4. (如需要)配置防火墙允许3306端口

    • Ubuntu/Debian(使用ufw):

      1
      2
      ufw allow 3306/tcp
      ufw reload
    • CentOS/RHEL(使用firewalld):

      1
      2
      firewall-cmd --zone=public --add-port=3306/tcp --permanent
      firewall-cmd --reload

9. 数据库与用户管理

以下是MySQL常用的数据库和用户管理命令:

  1. 登录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;
  2. 修改用户密码:

    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. 数据备份与恢复

  1. 使用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
  2. 恢复数据库:

    1
    2
    3
    4
    5
    # 恢复单个数据库(需先创建空数据库)
    mysql -u root -p dbname < dbname_backup.sql

    # 恢复所有数据库
    mysql -u root -p < all_databases_backup.sql
  3. 自动备份脚本示例:

    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,执行以下步骤:

  1. 停止MySQL服务

    1
    systemctl stop mysql/mysqld
  2. 卸载相关包

    • Ubuntu/Debian:

      1
      2
      3
      apt purge mysql-server mysql-client mysql-common mysql-server-core-* mysql-client-core-* -y
      apt autoremove -y
      apt autoclean
    • CentOS/RHEL:

      1
      2
      3
      yum remove mysql-community-server mysql-community-client -y
      # 或使用dnf
      dnf remove mysql-community-server mysql-community-client -y
  3. 删除残留文件和目录

    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. 常见问题解决

  1. 忘记root密码
    参考第5节中的重置root密码方法

  2. 无法远程连接MySQL

    • 检查bind-address配置是否已注释
    • 检查用户是否有远程访问权限
    • 检查防火墙是否开放3306端口
    • 检查网络连接和IP地址是否正确
  3. 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
  4. 中文乱码问题

    • 确保数据库使用utf8mb4字符集
    • 检查配置文件中的字符集设置
    • 创建数据库时指定字符集
  5. MySQL连接数过多

    • 调整配置文件中的max_connections参数
    • 检查应用程序是否正确释放连接
    • 考虑使用连接池管理数据库连接

总结

本文详细介绍了在主流Linux系统上安装、配置和管理MySQL的完整流程,包括安全设置、远程访问配置、用户管理、数据备份等关键操作。根据实际需求,你可以选择性地实施这些配置,以确保MySQL数据库的安全、稳定和高效运行。

在生产环境中,还需要考虑更多因素,如主从复制、集群部署、性能监控等高级配置,这些可以在掌握基础操作后逐步深入学习。


Linux 系统安装与配置 MySQL 数据库完整指南
https://www.psnow.sbs/2025/09/11/Linux-系统安装与配置-MySQL-数据库完整指南/
作者
Psnow
发布于
2025年9月11日
许可协议