CentOS搭建:MySQL
CentOS搭建
MySQL5
CentOS中软件安装的常用方式:
- 在线源安装(yum)
- 离线程序安装(rpm)
- 源码二进制包安装(二进制glibc,无需编译)
- 源码包编译安装 (要编译)
环境依赖
| 软件/系统 | 版本 | 架构 | 包名 | 方式 | 备注 |
|---|---|---|---|---|---|
| Linux | CentOS7.X | x86_64 | mysql-5.7.44-el7-x86_64.tar.gz | 源码二进制包安装 | 官网下载 |
安装前检查
卸载系统自带mariadb
MariaDB Server 是最流行的开源关系型数据库之一。它由 MySQL 的原始开发者制作,并保证保持开源。在 CentOS 7 中默认安装有 MariaDB
# 查找mariadb
rpm -qa|grep mariadb例如:mariadb-libs-5.5.68-1.el7.x86_64
# 卸载查找到的mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64- 普通卸载模式:
rpm -e xxx(mysql_libs),如果提示有依赖其他文件,则可以用强力卸载。 - 强力卸载模式:
rpm -e --nodeps xxx(mysql_libs)
检查是否安装过MySQL
# 查找 mysql
rpm -qa | grep mysql
whereis mysql
sudo find / -name mysql# 卸载查找到的 mysql
sudo rpm -e --nodeps <mysql>
# 删除系统中mysql的文件
sudo rm -rf <mysql_file>检查有无my.cnf配置文件
cat /etc/my.cnf检查有无MySQL用户组
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql安装MySQL5
解压安装包
# 解压缩
sudo tar -zxvf mysql-5.7.44-el7-x86_64.tar.gz -C /soft/mysql环境变量配置
ll -a /etc/profile.d |grep mysql
# 编辑环境变量
sudo vi /etc/profile.d/mysql.shexport PATH=$PATH:/soft/mysql/mysql-5.7.44-el7-x86_64/bin# 环境变量生效
source /etc/profile.d/mysql.sh生效之后,打出mysql,按tab补全键两下,就可以看到所有的mysql/bin下的都能出来:
创建MySQL用户组和用户
sudo groupadd mysql
sudo useradd -g mysql mysql# 修改为非标准登录用户
sudo usermod -s /sbin/nologin mysql
# 查看是否修改成功
getent passwd mysql | cut -d: -f7创建MySQL配置自定义文件
# 数据目录
sudo mkdir -p /data/mysql/mysql-5.7.44-el7-x86_64/data
# 进程文件
sudo touch /data/mysql/mysql-5.7.44-el7-x86_64/mysql.pid
# 套接字文件
sudo touch /data/mysql/mysql-5.7.44-el7-x86_64/mysql.sock
# 日志文件
sudo mkdir -p /data/mysql/mysql-5.7.44-el7-x86_64/log
sudo touch /data/mysql/mysql-5.7.44-el7-x86_64/log/mysql.log更改MySQL目录下件权限
#更改文件的用户组和用户
sudo chown -R mysql:mysql /soft/mysql
sudo chown -R mysql:mysql /data/mysql
#给mysql目录下的所有文件加执行权限 todo 有疑问是否需要以下赋权???
chmod -R 775 /soft/mysql-5.7.44-el7-x86_64更改完之后ll可以查看一下
编辑MySQL配置文件
ll -a /etc/ |grep my.cnf
# 编辑
sudo vi /etc/my.cnf[client]
# 端口
port=3306
# 套接字文件
socket=/data/mysql/mysql-5.7.44-el7-x86_64/mysql.sock
[mysqld]
# 端口
port=3306
# 安装目录
basedir=/soft/mysql/mysql-5.7.44-el7-x86_64
# 插件目录,该目录不需要手动创建,在lib下面
plugin_dir=/soft/mysql/mysql-5.7.44-el7-x86_64/lib/plugin
# 进程文件
pid-file=/data/mysql/mysql-5.7.44-el7-x86_64/mysql.pid
# 套接字文件
socket=/data/mysql/mysql-5.7.44-el7-x86_64/mysql.sock
# 日志文件
log-error=/data/mysql/mysql-5.7.44-el7-x86_64/log/mysql.log
# 数据目录
datadir=/data/mysql/mysql-5.7.44-el7-x86_64/data# 修改 my.cnf 权限 todo
chmod -R 755 /etc/my.cnf配置文件my.cnf的配置
| [client] | [mysqld] | |
|---|---|---|
| 作用范围 | 适用于MySQL的所有客户端程序,如mysql、mysqladmin、mysqldump等,影响它们连接到MySQL服务器的行为。 | 专门用于配置MySQL服务器(mysqld)的行为,包括服务器的启动、运行和性能优化等。 |
| 常见配置项 | - 默认连接的MySQL服务器地址(host) - 默认端口(port) - 默认用户(user) - 密码(password,但出于安全考虑,通常不建议在配置文件中明文存储) - 字符集(character-set)等 | - 数据目录位置(datadir) - 监听端口(port) - 运行MySQL服务的用户(user) - 字符集和校对规则(character-set-server, collation-server) - 内存和缓存设置(如innodb_buffer_pool_size) - 日志文件位置(如log_error) - 最大连接数(max_connections)等 |
| 影响范围 | 影响所有使用此配置文件的MySQL客户端程序。 | 仅影响MySQL服务器的运行和性能。 |
| 修改生效方式 | 修改后,客户端程序在下次启动时会自动应用新的配置。但是,如果客户端程序已经在运行,则需要重启程序才能使更改生效。 | 修改后,通常需要重启MySQL服务才能使更改生效。 |
| 安全性考虑 | 在配置文件中存储密码等敏感信息时,要特别注意安全性,避免泄露。 | 配置文件中可能包含服务器的敏感信息,如数据目录位置、日志文件位置等,需要妥善保护配置文件的安全。 |
初始化MySQL,生成临时密码
cd /soft/mysql/mysql-5.7.44-el7-x86_64/bin
#切换到mysql执行程序目录下,执行命令,生成临时数据库密码
sudo ./mysqld --initialize --user=mysql
cat /data/mysql/mysql-5.7.44-el7-x86_64/log/mysql.log | grep password启动MySQL5
cd /soft/mysql/mysql-5.7.44-el7-x86_64/support-files
# 启动
sudo ./mysql.server start
# 停止
sudo ./mysql.server stop# 查看进程
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld添加到系统进程中
ll -a /etc/init.d |grep mysql
sudo cp /soft/mysql/mysql-5.7.44-el7-x86_64/support-files/mysql.server /etc/init.d/mysql
ll -a /etc/init.d/mysql*设置mysql自启动
sudo systemctl enable mysql服务化管理
# 启动
sudo systemctl start mysql
# 状态
sudo systemctl status mysql
# 停止
sudo systemctl stop mysql
# 重启
sudo systemctl restart mysql# 状态
sudo service mysql status
# 停止
sudo service mysql stop
# 启动
sudo service mysql start
# 重启
sudo service mysql restart# 查看
chkconfig --list
远程访问设置
登录
# 登录,初次密码是临时密码
mysql -u root -p修改root用户密码
set password for root@localhost = password('Root@1234!');开启 mysql 的远程访问权限
use mysql;
#允许远程登录
# 此命令仅改变了root用户可以从哪里连接,而不改变其权限。
update user set user.Host='%' where user.User='root';
#重载授权表:
flush privileges;退出
# 退出
exit;防火墙开放端口命令
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload防火墙关闭命令
# 状态
sudo systemctl status firewalld
# 停止
sudo systemctl stop firewalld
# 禁用开机自启动
sudo systemctl disable firewalldMySQL8
环境依赖
| 软件/系统 | 版本 | 架构 | 包名 | 方式 | 备注 |
|---|---|---|---|---|---|
| Linux | CentOS7.X | x86_64 | mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz | 源码二进制包安装 | 官网下载 |

注意:下载哪个版本,首先需要确定一下系统的glibc版本,使用如下命令:
rpm -qa | grep glibc
安装前检查
卸载系统自带mariadb
MariaDB Server 是最流行的开源关系型数据库之一,由 MySQL 的原始开发者制作,并保证保持开源,在 CentOS 7 中默认安装有 MariaDB。
# 查找mariadb
rpm -qa|grep mariadb例如:mariadb-libs-5.5.68-1.el7.x86_64
# 卸载查找到的mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64- 普通卸载模式:
rpm -e xxx(mysql_libs),如果提示有依赖其他文件,则可以用强力卸载。 - 强力卸载模式:
rpm -e --nodeps xxx(mysql_libs)
检查是否安装过MySQL
# 查找 mysql
rpm -qa | grep mysql
whereis mysql
sudo find / -name mysql# 卸载查找到的 mysql
rpm -e --nodeps <mysql>
# 删除系统中mysql的文件
sudo rm -rf <mysql_file>检查有无my.cnf配置文件
cat /etc/my.cnf检查有无MySQL用户组
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql安装MySQL8
解压安装包
# 解压缩
sudo tar -xvf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz -C /soft/mysql安装依赖
sudo yum install libaio环境变量配置
ll -a /etc/profile.d |grep mysql
# 编辑环境变量
sudo vi /etc/profile.d/mysql.shexport PATH=$PATH:/soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/bin# 环境变量生效
source /etc/profile.d/mysql.sh生效之后,打出mysql,按tab补全键两下,就可以看到所有的mysql/bin下的都能出来:
创建MySQL用户组和用户
# 创建mysql用户组
sudo groupadd mysql
# 创建mysql用户,非标准登录用户
sudo useradd -g mysql mysql -s /sbin/nologin# 查看是否创建成功
getent passwd mysql
getent passwd mysql | cut -d: -f7创建MySQL配置自定义文件
# 数据目录
sudo mkdir -p /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/data
# 进程文件
sudo touch /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/mysql.pid
# 套接字文件
sudo touch /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/mysql.sock
# 日志文件
sudo mkdir -p /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/log
sudo touch /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/log/mysql.log更改MySQL目录下件权限
# 更改文件的用户组和用户
sudo chown -R mysql:mysql /soft/mysql
ll /soft/mysql/*
sudo chown -R mysql:mysql /data/mysql
ll /data/mysql/*更改完之后ll可以查看一下
编辑MySQL配置文件
ll -a /etc/ |grep my.cnf
# 编辑
sudo vi /etc/my.cnf[client]
# 端口
port=3306
# 套接字文件,保持和[mysqld]中的socket一致
socket=/data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/mysql.sock
[mysqld]
# 端口
port=3306
# 安装目录
basedir=/soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64
# 插件目录,该目录不需要手动创建,在lib下面
plugin_dir=/soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/lib/plugin
# 进程文件
pid-file=/data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/mysql.pid
# 套接字文件
socket=/data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/mysql.sock
# 日志文件
log-error=/data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/log/mysql.log
# 数据目录
datadir=/data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/data初始化MySQL,生成临时密码
cd /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/bin
#切换到mysql执行程序目录下,执行命令,生成临时数据库密码
sudo ./mysqld --initialize --user=mysql
cat /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/log/mysql.log | grep password启动MySQL8
cd /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/support-files/
# 启动
sudo ./mysql.server start
# 停止
sudo ./mysql.server stop# 查看进程
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld添加到系统进程中
sudo cp /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/support-files/mysql.server /etc/init.d/mysql设置mysql自启动
sudo systemctl enable mysql服务化管理
# 启动
sudo systemctl start mysql
# 状态
sudo systemctl status mysql
# 停止
sudo systemctl stop mysql
# 重启
sudo systemctl restart mysql# 状态
sudo service mysql status
# 停止
sudo service mysql stop
# 启动
sudo service mysql start
# 重启
sudo service mysql restart远程访问设置
# 登录,密码是临时密码
mysql -u root -p修改root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@1234!';- 在 MySQL 5.7.6 及以后的版本中,设置或更改用户密码的推荐方法是通过
ALTER USER语句或者通过CREATE USER语句(如果用户尚不存在)。
开启 mysql 的远程访问权限
use mysql;
#允许远程登录
# 此命令仅改变了root用户可以从哪里连接,而不改变其权限。
update user set user.Host='%' where user.User='root';
#重载授权表:
flush privileges;防火墙开放端口命令
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload防火墙关闭命令
# 状态
sudo systemctl status firewalld
# 停止
sudo systemctl stop firewalld
# 禁用开机自启动
sudo systemctl disable firewalld常见问题
1. Too Many Connections
查看连接信息
-- 查询当前连接数
show status like "Threads_connected";-- 查询数据库最大连接数
show variables like "max_connections"
-- 查看mysql服务启动以来同一时刻的最大连接数:
show status like 'Max_used_connections';-- 查询所有活动连接
show processlist;
-- 查询所有活动连接,排序
SELECT * FROM INFORMATION_SCHEMA.PROCESSLIST ORDER BY DB,TIME;参数解释 :
id连接的唯一标识符(线程ID);User建立连接的用户名;host建立连接的主机名及端口;db当前连接使用的数据库名;Command线程正在执行的命令类型;Time线程处在当前状态的时间(秒);State线程的状态信息;info线程正在执行的SQL语句(可能为NULL)。根据查询结果观察是否有长时间未被释放的连接,例如出现大量超过1小时的休眠状态的线程,请检查连接数据库代码是否有做连接超时处理及关闭数据库连接,允许的情况下可以配置检测连接是否有效。

-- 查询出超过1小时的连接并停止
select concat('kill',id,';') from information_schema.proccesslist
where command='Sleep' and TIME > 3600;增加最大连接数(大量连接在用)
- 临时方案,mysql重启后会恢复成以前连接数据
SET GLOBAL max_connections = 500;- 永久方案 修改 MySQL 配置文件(通常是
my.cnf或my.ini)
[mysqld]
max_connections = 500调整超时时间
- 临时方案,mysql重启后会恢复成以前超时时间
-- 将空闲超时时间设为300秒(5分钟)
SET GLOBAL wait_timeout=300
SET GLOBAL interactive_timeout=300- 永久方案 修改 MySQL 配置文件(通常是
my.cnf或my.ini)
[mysqld]
wait_timeout = 300
interactive_timeout = 300