CentOS搭建:MySQL
accttodo 12/31/2023 Linux
目录
参考:
- Centos7安装Mysql5.7(超详细版) (opens new window)
- centos7安装mysql5.7(或其他版本) (opens new window)
- Centos7 两种方式安装 MySQL5.7 步骤 yum 、本地 tar 文件 (opens new window)
- ERROR 2002 (HY000): Cant connect to local MySQL server through socket的解决方法 (opens new window)
- Centos7环境下安装MySQL8详细教程 (opens new window)
# CentOS搭建:MySQL5
CentOS中软件安装的常用方式:
- 在线源安装(yum)
- 离线程序安装(rpm)
- 源码二进制包安装(二进制glibc,无需编译)
- 源码包编译安装 (要编译)
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 方式 | 备注 |
---|---|---|---|---|---|
Linux | CentOS7.X | x86_64 | mysql-5.7.44-el7-x86_64.tar.gz (opens new window) | 源码二进制包安装 | 官网下载 (opens new window) |
# 安装前检查
# 卸载系统自带mariadb
MariaDB Server 是最流行的开源关系型数据库之一。它由 MySQL 的原始开发者制作,并保证保持开源。在 CentOS 7 中默认安装有 MariaDB
# 查找mariadb
rpm -qa|grep mariadb
1
2
2
例如:mariadb-libs-5.5.68-1.el7.x86_64
# 卸载查找到的mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
1
2
2
- 普通卸载模式:
rpm -e xxx(mysql_libs)
,如果提示有依赖其他文件,则可以用强力卸载。 - 强力卸载模式:
rpm -e --nodeps xxx(mysql_libs)
# 检查是否安装过MySQL
# 查找 mysql
rpm -qa | grep mysql
whereis mysql
sudo find / -name mysql
1
2
3
4
2
3
4
# 卸载查找到的 mysql
sudo rpm -e --nodeps <mysql>
# 删除系统中mysql的文件
sudo rm -rf <mysql_file>
1
2
3
4
2
3
4
# 检查有无my.cnf配置文件
cat /etc/my.cnf
1
# 检查有无MySQL用户组
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
1
2
2
# 安装MySQL5
解压安装包
# 解压缩
sudo tar -zxvf mysql-5.7.44-el7-x86_64.tar.gz -C /soft/mysql
1
2
2
环境变量配置
ll -a /etc/profile.d |grep mysql
# 编辑环境变量
sudo vi /etc/profile.d/mysql.sh
1
2
3
2
3
export PATH=$PATH:/soft/mysql/mysql-5.7.44-el7-x86_64/bin
1
# 环境变量生效
source /etc/profile.d/mysql.sh
1
2
2
生效之后,打出mysql,按tab补全键两下,就可以看到所有的mysql/bin下的都能出来:
# 创建MySQL用户组和用户
sudo groupadd mysql
sudo useradd -g mysql mysql
1
2
2
# 修改为非标准登录用户
sudo usermod -s /sbin/nologin mysql
# 查看是否修改成功
getent passwd mysql | cut -d: -f7
1
2
3
4
2
3
4
# 创建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
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 更改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
1
2
3
4
5
2
3
4
5
更改完之后ll
可以查看一下
# 编辑MySQL配置文件
ll -a /etc/ |grep my.cnf
# 编辑
sudo vi /etc/my.cnf
1
2
3
2
3
[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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 修改 my.cnf 权限 todo
chmod -R 755 /etc/my.cnf
1
2
2
# 配置文件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
1
2
3
2
3
cat /data/mysql/mysql-5.7.44-el7-x86_64/log/mysql.log | grep password
1
# 启动MySQL
cd /soft/mysql/mysql-5.7.44-el7-x86_64/support-files
# 启动
sudo ./mysql.server start
# 停止
sudo ./mysql.server stop
1
2
3
4
5
2
3
4
5
# 查看进程
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld
1
2
3
2
3
添加到系统进程中
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*
1
2
3
2
3
设置mysql自启动
sudo systemctl enable mysql
1
服务化管理
# 启动
sudo systemctl start mysql
# 状态
sudo systemctl status mysql
# 停止
sudo systemctl stop mysql
# 重启
sudo systemctl restart mysql
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 状态
sudo service mysql status
# 停止
sudo service mysql stop
# 启动
sudo service mysql start
# 重启
sudo service mysql restart
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 查看
chkconfig --list
# 远程访问设置
登录
# 登录,初次密码是临时密码
mysql -u root -p
1
2
2
修改root用户密码
set password for root@localhost = password('Root@1234!');
1
开启 mysql 的远程访问权限
use mysql;
#允许远程登录
# 此命令仅改变了root用户可以从哪里连接,而不改变其权限。
update user set user.Host='%' where user.User='root';
#重载授权表:
flush privileges;
1
2
3
4
5
6
2
3
4
5
6
退出
# 退出
exit;
1
2
2
防火墙开放端口命令
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
1
2
3
4
2
3
4
防火墙关闭命令
# 状态
sudo systemctl status firewalld
# 停止
sudo systemctl stop firewalld
# 禁用开机自启动
sudo systemctl disable firewalld
1
2
3
4
5
6
2
3
4
5
6
# CentOS搭建:MySQL8
# 环境依赖
软件/系统 | 版本 | 架构 | 包名 | 方式 | 备注 |
---|---|---|---|---|---|
Linux | CentOS7.X | x86_64 | mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz (opens new window) | 源码二进制包安装 | 官网下载 (opens new window) |
注意:下载哪个版本,首先需要确定一下系统的glibc版本,使用如下命令:
rpm -qa | grep glibc
1
# 安装前检查
# 卸载系统自带mariadb
MariaDB Server 是最流行的开源关系型数据库之一,由 MySQL 的原始开发者制作,并保证保持开源,在 CentOS 7 中默认安装有 MariaDB。
# 查找mariadb
rpm -qa|grep mariadb
1
2
2
例如:mariadb-libs-5.5.68-1.el7.x86_64
# 卸载查找到的mariadb
sudo rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
1
2
2
- 普通卸载模式:
rpm -e xxx(mysql_libs)
,如果提示有依赖其他文件,则可以用强力卸载。 - 强力卸载模式:
rpm -e --nodeps xxx(mysql_libs)
# 检查是否安装过MySQL
# 查找 mysql
rpm -qa | grep mysql
whereis mysql
sudo find / -name mysql
1
2
3
4
2
3
4
# 卸载查找到的 mysql
rpm -e --nodeps <mysql>
# 删除系统中mysql的文件
sudo rm -rf <mysql_file>
1
2
3
4
2
3
4
# 检查有无my.cnf配置文件
cat /etc/my.cnf
1
# 检查有无MySQL用户组
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
1
2
2
# 安装MySQL8
解压安装包
# 解压缩
sudo tar -xvf mysql-8.0.39-linux-glibc2.17-x86_64.tar.xz -C /soft/mysql
1
2
2
安装依赖
sudo yum install libaio
1
环境变量配置
ll -a /etc/profile.d |grep mysql
# 编辑环境变量
sudo vi /etc/profile.d/mysql.sh
1
2
3
2
3
export PATH=$PATH:/soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/bin
1
# 环境变量生效
source /etc/profile.d/mysql.sh
1
2
2
生效之后,打出mysql,按tab补全键两下,就可以看到所有的mysql/bin下的都能出来:
# 创建MySQL用户组和用户
# 创建mysql用户组
sudo groupadd mysql
# 创建mysql用户,非标准登录用户
sudo useradd -g mysql mysql -s /sbin/nologin
1
2
3
4
2
3
4
# 查看是否创建成功
getent passwd mysql
getent passwd mysql | cut -d: -f7
1
2
3
2
3
# 创建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
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 更改MySQL目录下件权限
# 更改文件的用户组和用户
sudo chown -R mysql:mysql /soft/mysql
ll /soft/mysql/*
sudo chown -R mysql:mysql /data/mysql
ll /data/mysql/*
1
2
3
4
5
2
3
4
5
更改完之后ll
可以查看一下
# 编辑MySQL配置文件
ll -a /etc/ |grep my.cnf
# 编辑
sudo vi /etc/my.cnf
1
2
3
2
3
[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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 初始化MySQL,生成临时密码
cd /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/bin
#切换到mysql执行程序目录下,执行命令,生成临时数据库密码
sudo ./mysqld --initialize --user=mysql
1
2
3
2
3
cat /data/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/log/mysql.log | grep password
1
# 启动MySQL
cd /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/support-files/
# 启动
sudo ./mysql.server start
# 停止
sudo ./mysql.server stop
1
2
3
4
5
2
3
4
5
# 查看进程
ps -ef|grep -v grep |grep mysql
ps -ef|grep -v grep |grep mysqld
1
2
3
2
3
添加到系统进程中
sudo cp /soft/mysql/mysql-8.0.39-linux-glibc2.17-x86_64/support-files/mysql.server /etc/init.d/mysql
1
设置mysql自启动
sudo systemctl enable mysql
1
服务化管理
# 启动
sudo systemctl start mysql
# 状态
sudo systemctl status mysql
# 停止
sudo systemctl stop mysql
# 重启
sudo systemctl restart mysql
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 状态
sudo service mysql status
# 停止
sudo service mysql stop
# 启动
sudo service mysql start
# 重启
sudo service mysql restart
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 远程访问设置
# 登录,密码是临时密码
mysql -u root -p
1
2
2
修改root用户密码
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@1234!';
1
- 在 MySQL 5.7.6 及以后的版本中,设置或更改用户密码的推荐方法是通过
ALTER USER
语句或者通过CREATE USER
语句(如果用户尚不存在)。
开启 mysql 的远程访问权限
use mysql;
#允许远程登录
# 此命令仅改变了root用户可以从哪里连接,而不改变其权限。
update user set user.Host='%' where user.User='root';
#重载授权表:
flush privileges;
1
2
3
4
5
6
2
3
4
5
6
防火墙开放端口命令
# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
# 重启防火墙
firewall-cmd --reload
1
2
3
4
2
3
4
防火墙关闭命令
# 状态
sudo systemctl status firewalld
# 停止
sudo systemctl stop firewalld
# 禁用开机自启动
sudo systemctl disable firewalld
1
2
3
4
5
6
2
3
4
5
6