第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
命令失败,或服务启动后立即停止。
解决方法:
- 检查错误日志:
sudo tail -f /var/log/mysql/error.log
- 检查权限问题:
sudo chown -R mysql:mysql /var/lib/mysql
- 检查磁盘空间:
df -h
- 检查配置文件语法:
mysqld --verbose --help
问题2:忘记root密码
解决方法:
- 停止MySQL服务:
sudo systemctl stop mysql
- 以跳过授权表的方式启动MySQL:
sudo mysqld_safe --skip-grant-tables &
- 连接到MySQL:
mysql -u root
- 重置密码:
USE mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES; EXIT;
- 停止并正常重启MySQL服务:
sudo pkill mysqld sudo systemctl start mysql
问题3:MySQL占用过多内存
症状:系统内存使用率高,可能导致性能问题或OOM(内存不足)错误。
解决方法:
- 调整InnoDB缓冲池大小:
修改以下参数:sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
innodb_buffer_pool_size = 256M # 根据系统内存调整
- 重启MySQL服务:
sudo systemctl restart mysql
问题4:MySQL连接被拒绝
症状:无法远程连接到MySQL服务器,出现"Access denied"错误。
解决方法:
检查MySQL是否监听远程连接:
sudo netstat -tuln | grep 3306
确保显示
0.0.0.0:3306
或特定IP地址,而不仅仅是127.0.0.1:3306
。修改MySQL配置文件,允许远程连接:
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
注释掉或修改以下行:
# bind-address = 127.0.0.1 bind-address = 0.0.0.0
创建允许远程连接的用户:
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%'; FLUSH PRIVILEGES;
检查防火墙设置:
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性能问题
症状:查询执行缓慢,系统负载高。
解决方法:
启用慢查询日志,识别问题查询:
slow_query_log = 1 slow_query_log_file = /var/log/mysql/mysql-slow.log long_query_time = 1 # 记录执行时间超过1秒的查询
使用
EXPLAIN
分析查询:EXPLAIN SELECT * FROM large_table WHERE non_indexed_column = 'value';
添加适当的索引:
CREATE INDEX idx_column ON table_name(column_name);
优化MySQL配置参数:
- 增加InnoDB缓冲池大小
- 调整查询缓存
- 优化临时表设置
考虑硬件升级:
- 使用SSD存储
- 增加系统内存
- 升级CPU
问题6:数据库损坏
症状:MySQL无法启动,日志中显示表损坏错误。
解决方法:
使用
mysqlcheck
工具检查和修复数据库:sudo mysqlcheck -u root -p --auto-repair --check --all-databases
如果问题仍然存在,尝试使用InnoDB恢复工具:
sudo innodb_force_recovery=1 # 添加到配置文件的[mysqld]部分
然后重启MySQL并尝试导出数据。
如果有备份,考虑从备份恢复。
通过以上步骤,您应该能够在Linux系统上成功安装、配置和管理MySQL数据库服务器。Linux环境提供了强大的灵活性和性能,使其成为运行MySQL的理想平台,特别是对于生产环境。