MySQL安装与配置(续)

发布于:2025-06-07 ⋅ 阅读:(16) ⋅ 点赞:(0)

第2章:MySQL安装与配置(续)

2.3 Linux系统安装MySQL

在Linux系统上安装MySQL有多种方法,包括使用包管理器、源码编译安装和Docker容器安装。本节将详细介绍这些安装方法,以及在不同Linux发行版上的具体步骤。

2.3.1 使用包管理器安装

使用Linux发行版的包管理器安装MySQL是最简单和推荐的方法。以下是在主要Linux发行版上的安装步骤:

Ubuntu/Debian系统

步骤1:更新软件包列表

sudo apt update

步骤2:安装MySQL服务器

sudo apt install mysql-server

步骤3:启动MySQL服务

sudo systemctl start mysql

步骤4:设置MySQL开机自启动

sudo systemctl enable mysql

步骤5:检查MySQL服务状态

sudo systemctl status mysql

步骤6:初始化安全设置

在Ubuntu上,MySQL安装过程中通常不会提示设置root密码。您需要运行安全脚本来设置密码和其他安全选项:

sudo mysql_secure_installation

此脚本会引导您完成以下设置:

  • 设置密码验证插件(VALIDATE PASSWORD)
  • 设置root用户密码
  • 删除匿名用户
  • 禁止root远程登录
  • 删除测试数据库
  • 重新加载权限表

步骤7:验证安装

sudo mysql -u root -p

输入密码后,如果能成功登录MySQL命令行界面,则表示安装成功。

CentOS/RHEL/Fedora系统

步骤1:添加MySQL仓库

对于CentOS 7/RHEL 7:

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

对于CentOS 8/RHEL 8:

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm

对于Fedora:

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-fc33-1.noarch.rpm

(注:请根据您的Fedora版本选择适当的RPM包)

步骤2:安装MySQL服务器

sudo yum install mysql-community-server

步骤3:启动MySQL服务

sudo systemctl start mysqld

步骤4:设置MySQL开机自启动

sudo systemctl enable mysqld

步骤5:获取临时root密码

在CentOS/RHEL系统上,MySQL安装后会为root用户生成一个临时密码:

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

步骤6:初始化安全设置

sudo mysql_secure_installation

系统会提示输入临时密码,然后引导您设置新密码和其他安全选项。

步骤7:验证安装

mysql -u root -p

输入新设置的密码,验证是否能成功登录。

SUSE Linux Enterprise Server/openSUSE

步骤1:添加MySQL仓库

sudo zypper addrepo https://download.mysql.com/get/mysql80-community-release-sl15-3.noarch.rpm

(注:请根据您的SUSE版本选择适当的RPM包)

步骤2:刷新仓库

sudo zypper refresh

步骤3:安装MySQL服务器

sudo zypper install mysql-community-server

步骤4:启动MySQL服务

sudo systemctl start mysql

步骤5:设置MySQL开机自启动

sudo systemctl enable mysql

步骤6:初始化安全设置

sudo mysql_secure_installation

步骤7:验证安装

mysql -u root -p

2.3.2 源码编译安装

对于需要自定义MySQL功能或在不支持包管理器安装的系统上,可以选择源码编译安装。这种方法更复杂,但提供了最大的灵活性。

步骤1:安装必要的依赖

在Ubuntu/Debian系统上:

sudo apt install build-essential cmake libncurses5-dev bison libssl-dev libaio-dev

在CentOS/RHEL系统上:

sudo yum groupinstall "Development Tools"
sudo yum install cmake ncurses-devel bison openssl-devel libaio-devel

步骤2:下载MySQL源码

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.28.tar.gz

(注:请检查MySQL官网获取最新版本)

步骤3:解压源码包

tar -xzvf mysql-boost-8.0.28.tar.gz
cd mysql-8.0.28

步骤4:配置编译选项

mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DSYSCONFDIR=/etc \
-DWITH_BOOST=../boost/boost_1_73_0 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_SSL=system

步骤5:编译和安装

make -j $(nproc)
sudo make install

步骤6:配置MySQL

sudo groupadd mysql
sudo useradd -r -g mysql -s /bin/false mysql
sudo chown -R mysql:mysql /usr/local/mysql
sudo mkdir -p /usr/local/mysql/data
sudo chown -R mysql:mysql /usr/local/mysql/data

步骤7:初始化数据目录

cd /usr/local/mysql
sudo bin/mysqld --initialize --user=mysql

这将生成一个临时root密码,请注意记录这个密码。

步骤8:创建配置文件

sudo cp support-files/my-default.cnf /etc/my.cnf

步骤9:创建系统服务

创建systemd服务文件:

sudo vi /etc/systemd/system/mysql.service

添加以下内容:

[Unit]
Description=MySQL Server
After=network.target

[Service]
User=mysql
Group=mysql
ExecStart=/usr/local/mysql/bin/mysqld --user=mysql
Restart=on-failure

[Install]
WantedBy=multi-user.target

步骤10:启动MySQL服务

sudo systemctl daemon-reload
sudo systemctl start mysql
sudo systemctl enable mysql

步骤11:添加MySQL命令到系统路径

echo 'export PATH=$PATH:/usr/local/mysql/bin' | sudo tee -a /etc/profile
source /etc/profile

步骤12:初始化安全设置

mysql_secure_installation

步骤13:验证安装

mysql -u root -p

2.3.3 Docker容器安装

使用Docker安装MySQL是一种快速、隔离且可移植的方法,特别适合开发和测试环境。

步骤1:安装Docker

在Ubuntu/Debian系统上:

sudo apt update
sudo apt install docker.io
sudo systemctl start docker
sudo systemctl enable docker

在CentOS/RHEL系统上:

sudo yum install -y yum-utils
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker

步骤2:拉取MySQL镜像

sudo docker pull mysql:8.0

步骤3:创建数据卷(可选)

sudo docker volume create mysql_data

步骤4:运行MySQL容器

sudo docker run --name mysql_container \
-e MYSQL_ROOT_PASSWORD=your_password \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
-d mysql:8.0

参数说明:

  • --name mysql_container:容器名称
  • -e MYSQL_ROOT_PASSWORD=your_password:设置root用户密码
  • -p 3306:3306:将容器的3306端口映射到主机的3306端口
  • -v mysql_data:/var/lib/mysql:将数据目录挂载到Docker卷
  • -d:后台运行容器
  • mysql:8.0:使用的镜像

步骤5:验证容器运行状态

sudo docker ps

步骤6:连接到MySQL容器

sudo docker exec -it mysql_container mysql -uroot -p

输入设置的密码后,即可进入MySQL命令行界面。

步骤7:配置MySQL容器(可选)

创建自定义配置文件:

mkdir -p ~/mysql/conf.d
vi ~/mysql/conf.d/my.cnf

添加配置内容,例如:

[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
max_connections=200

重新运行容器,挂载配置文件:

sudo docker stop mysql_container
sudo docker rm mysql_container
sudo docker run --name mysql_container \
-e MYSQL_ROOT_PASSWORD=your_password \
-p 3306:3306 \
-v mysql_data:/var/lib/mysql \
-v ~/mysql/conf.d:/etc/mysql/conf.d \
-d mysql:8.0

2.3.4 初始化设置

无论使用哪种方法安装MySQL,完成安装后都需要进行一些初始化设置,以确保MySQL安全且符合您的需求。

基本安全配置

步骤1:运行安全配置脚本

sudo mysql_secure_installation

此脚本会引导您完成以下设置:

  • 设置密码验证策略
  • 更改root密码
  • 删除匿名用户
  • 禁止root远程登录
  • 删除测试数据库
  • 重新加载权限表
创建数据库和用户

步骤1:登录MySQL

mysql -u root -p

步骤2:创建新数据库

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

步骤3:创建新用户

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';

步骤4:授予权限

GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;

步骤5:验证用户权限

SHOW GRANTS FOR 'myuser'@'localhost';
配置MySQL服务器

步骤1:找到配置文件

MySQL的主配置文件通常位于以下位置之一:

  • /etc/my.cnf
  • /etc/mysql/my.cnf
  • /etc/mysql/mysql.conf.d/mysqld.cnf(Ubuntu/Debian)

步骤2:编辑配置文件

sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

步骤3:添加或修改配置选项

以下是一些常用的配置选项:

[mysqld]
# 基本设置
user                  = mysql
pid-file              = /var/run/mysqld/mysqld.pid
socket                = /var/run/mysqld/mysqld.sock
port                  = 3306
basedir               = /usr
datadir               = /var/lib/mysql
tmpdir                = /tmp

# 字符集设置
character-set-server  = utf8mb4
collation-server      = utf8mb4_unicode_ci

# InnoDB设置
innodb_buffer_pool_size = 512M
innodb_log_file_size    = 128M
innodb_flush_log_at_trx_commit = 1
innodb_flush_method     = O_DIRECT

# 连接设置
max_connections       = 200
max_allowed_packet    = 64M

# 日志设置
log_error             = /var/log/mysql/error.log
slow_query_log        = 1
slow_query_log_file   = /var/log/mysql/mysql-slow.log
long_query_time       = 2

步骤4:重启MySQL服务

sudo systemctl restart mysql

步骤5:验证配置

mysql -u root -p -e "SHOW VARIABLES LIKE 'character_set%';"
mysql -u root -p -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"

2.3.5 服务管理

在Linux系统上,MySQL服务通常通过systemd或service命令进行管理。

使用systemd管理服务(现代Linux发行版)

启动MySQL服务

sudo systemctl start mysql

sudo systemctl start mysqld

停止MySQL服务

sudo systemctl stop mysql

重启MySQL服务

sudo systemctl restart mysql

检查MySQL服务状态

sudo systemctl status mysql

设置开机自启动

sudo systemctl enable mysql

禁用开机自启动

sudo systemctl disable mysql
使用service命令管理服务(旧版Linux发行版)

启动MySQL服务

sudo service mysql start

停止MySQL服务

sudo service mysql stop

重启MySQL服务

sudo service mysql restart

检查MySQL服务状态

sudo service mysql status

2.3.6 验证安装

完成安装和配置后,应该验证MySQL是否正常工作:

步骤1:检查MySQL服务状态

sudo systemctl status mysql

步骤2:检查MySQL版本

mysql --version

步骤3:连接到MySQL服务器

mysql -u root -p

步骤4:执行基本SQL命令

SHOW DATABASES;
CREATE DATABASE test;
USE test;
CREATE TABLE sample (id INT, name VARCHAR(50));
INSERT INTO sample VALUES (1, 'Test Data');
SELECT * FROM sample;
DROP DATABASE test;
EXIT;

步骤5:检查MySQL日志

sudo tail -f /var/log/mysql/error.log

步骤6:检查网络连接

sudo netstat -tuln | grep 3306

sudo ss -tuln | grep 3306

2.3.7 常见问题及解决方法

在Linux系统上安装和配置MySQL时可能遇到的一些常见问题及其解决方法:

问题1:无法启动MySQL服务

症状systemctl start mysql命令失败,或服务启动后立即停止。

解决方法

  1. 检查错误日志:
    sudo tail -f /var/log/mysql/error.log
    
  2. 检查权限问题:
    sudo chown -R mysql:mysql /var/lib/mysql
    
  3. 检查磁盘空间:
    df -h
    
  4. 检查配置文件语法:
    mysqld --verbose --help
    
问题2:忘记root密码

解决方法

  1. 停止MySQL服务:
    sudo systemctl stop mysql
    
  2. 以跳过授权表的方式启动MySQL:
    sudo mysqld_safe --skip-grant-tables &
    
  3. 连接到MySQL:
    mysql -u root
    
  4. 重置密码:
    USE mysql;
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
    FLUSH PRIVILEGES;
    EXIT;
    
  5. 停止并正常重启MySQL服务:
    sudo pkill mysqld
    sudo systemctl start mysql
    
问题3:MySQL占用过多内存

症状:系统内存使用率高,可能导致性能问题或OOM(内存不足)错误。

解决方法

  1. 调整InnoDB缓冲池大小:
    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    
    修改以下参数:
    innodb_buffer_pool_size = 256M  # 根据系统内存调整
    
  2. 重启MySQL服务:
    sudo systemctl restart mysql
    
问题4:MySQL连接被拒绝

症状:无法远程连接到MySQL服务器,出现"Access denied"错误。

解决方法

  1. 检查MySQL是否监听远程连接:

    sudo netstat -tuln | grep 3306
    

    确保显示0.0.0.0:3306或特定IP地址,而不仅仅是127.0.0.1:3306

  2. 修改MySQL配置文件,允许远程连接:

    sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
    

    注释掉或修改以下行:

    # bind-address = 127.0.0.1
    bind-address = 0.0.0.0
    
  3. 创建允许远程连接的用户:

    CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password';
    GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%';
    FLUSH PRIVILEGES;
    
  4. 检查防火墙设置:

    sudo ufw status  # Ubuntu
    sudo firewall-cmd --list-all  # CentOS
    

    如果需要,添加防火墙规则:

    sudo ufw allow 3306/tcp  # Ubuntu
    sudo firewall-cmd --permanent --add-port=3306/tcp  # CentOS
    sudo firewall-cmd --reload  # CentOS
    
问题5:MySQL性能问题

症状:查询执行缓慢,系统负载高。

解决方法

  1. 启用慢查询日志,识别问题查询:

    slow_query_log = 1
    slow_query_log_file = /var/log/mysql/mysql-slow.log
    long_query_time = 1  # 记录执行时间超过1秒的查询
    
  2. 使用EXPLAIN分析查询:

    EXPLAIN SELECT * FROM large_table WHERE non_indexed_column = 'value';
    
  3. 添加适当的索引:

    CREATE INDEX idx_column ON table_name(column_name);
    
  4. 优化MySQL配置参数:

    • 增加InnoDB缓冲池大小
    • 调整查询缓存
    • 优化临时表设置
  5. 考虑硬件升级:

    • 使用SSD存储
    • 增加系统内存
    • 升级CPU
问题6:数据库损坏

症状:MySQL无法启动,日志中显示表损坏错误。

解决方法

  1. 使用mysqlcheck工具检查和修复数据库:

    sudo mysqlcheck -u root -p --auto-repair --check --all-databases
    
  2. 如果问题仍然存在,尝试使用InnoDB恢复工具:

    sudo innodb_force_recovery=1  # 添加到配置文件的[mysqld]部分
    

    然后重启MySQL并尝试导出数据。

  3. 如果有备份,考虑从备份恢复。

通过以上步骤,您应该能够在Linux系统上成功安装、配置和管理MySQL数据库服务器。Linux环境提供了强大的灵活性和性能,使其成为运行MySQL的理想平台,特别是对于生产环境。


网站公告

今日签到

点亮在社区的每一天
去签到