【Linux安装MySQL-5.7.28】

本文详细指导如何在Linux系统上检测并移除MySQL/MariaDB,解压安装MySQL-5.7.28,创建用户组与用户,配置my.cnf,初始化数据库,设置开机自启动,以及添加远程访问权限,包括防火墙配置。
摘要由CSDN通过智能技术生成

下载

官网:https://downloads.mysql.com/archives/community/
在这里插入图片描述

配置环境

# 检测系统是否自带 mysql
rpm -qa|grep mysql
# 如果[rpm -qa|greo mysql]检测出 mysql 就强制删除 mysql,否则跳过删除步骤
rpm -e --nodeps [检测出的 mysql]

# 检测系统是否自带 mariadb
rpm -qa|grep mariadb
# 如果[rpm -qa|grep mariadb]检测出 mariadb 就强制删除 mariadb,否则跳过删除步骤
rpm -e --nodeps [检测出的 mariadb]

例:

[root@localhost ~]# rpm -qa|grep mysql
[root@localhost ~]# rpm -qa|grep mariadb
mariadb-libs-5.5.56-2.el7.x86_64
[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
警告:/etc/my.cnf 已另存为 /etc/my.cnf.rpmsave
[root@localhost ~]# rpm -qa|grep mariadb
[root@localhost ~]# rpm -qa|grep mysql
[root@localhost ~]#

# 查询 mysql程序
whereis mysql
# 查找名称为 mysql 的目录或文件
find / -name mysql
# 删除相关目录或文件
rm -rf [查出的目录或文件,用空格分开]
# 验证是否删除完毕
whereis mysql
find / -name mysql

例:

[root@localhost ~]# whereis mysql
mysql:[root@localhost ~]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/usr/lib64/mysql
/usr/local/src/mysql-5.7.28/bin/mysql
/usr/local/src/mysql-5.7.28/include/mysql
/usr/local/src/mysql-5.7.28/data/mysql
[root@localhost ~]# rm -rf /etc/selinux/targeted/active/modules/100/mysql /usr/lib64/mysql /usr/local/src/mysql-5.7.28/bin/mysql /usr/local/src/mysql-5.7.28/include/mysql /usr/local/src/mysql-5.7.28/data/mysql
[root@localhost ~]# whereis mysql
mysql:[root@localhost ~]# find / -name mysql
[root@localhost ~]#

安装

解压并进入 /usr/java/mysql/mysql-5.7.28 目录

# 切换到mysql压缩包存放目录
cd /app
# 解压
tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
# 创建 mysql目录
mkdir /usr/java/mysql
# 将解压后的文件目录移动到 /usr/java/mysql 文件夹下并重命名为 mysql-5.7.28
mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/java/mysql/mysql-5.7.28
# 切换到 /mysql-5.7.28 目录
cd /usr/java/mysql/mysql-5.7.28

例:

[root@localhost ~]# cd /app
[root@localhost app]# tar -zxvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
mysql-5.7.28-linux-glibc2.12-x86_64/bin/myisam_ftdump
mysql-5.7.28-linux-glibc2.12-x86_64/bin/myisamchk

……

mysql-5.7.28-linux-glibc2.12-x86_64/docs/INFO_BIN
mysql-5.7.28-linux-glibc2.12-x86_64/docs/INFO_SRC
[root@localhost app]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/java/mysql/mysql-5.7.28
mv: 无法将"mysql-5.7.28-linux-glibc2.12-x86_64" 移动至"/usr/java/mysql/mysql-5.7.28": 没有那个文件或目录
[root@localhost app]# mkdir /usr/java/mysql
[root@localhost app]# mv mysql-5.7.28-linux-glibc2.12-x86_64 /usr/java/mysql/mysql-5.7.28
[root@localhost app]# cd /usr/java/mysql
[root@localhost mysql]# cd ./mysql-5.7.28
[root@localhost mysql-5.7.28]#

创建用户组和用户

# 检查 mysql 用户组是否存在
cat /etc/group|grep mysql

# 创建 mysql 用户组
groupadd mysql

# 检查 mysql 用户是否存在
cat /etc/passwd|grep mysql

# 在 mysql 用户组中创建一个 mysql 用户 -r:不可用于登录的系统用户 -g:为新组使用 GID
# useradd -r -g [用户组] [用户]
useradd -r -g mysql mysql

例:存在就不创建了

[root@localhost mysql-5.7.28]# cat /etc/group|grep mysql
mysql❌1000:
[root@localhost mysql-5.7.28]# cat /etc/passwd|grep mysql
mysql❌997:1000::/home/mysql:/bin/bash
[root@localhost mysql-5.7.28]#

# 创建 data 目录
mkdir data

# 将 /usr/local/mysql/mysql-5.7.28 的所有者以及所属组改为mysql
chown -R mysql.mysql /usr/java/mysql/mysql-5.7.28

# 切换到 /usr/java/mysql/mysql-5.7.28/support-files 目录
cd ./support-files
# 创建 my-default.cnf 文件
touch my-default.cnf
# 编辑 my-default.cnf 文件 
vi my-default.cnf
# 进入文件后 按“i”进入编辑模式
# 按“Esc”退出编辑模式
# 输入“:wq”保存退出

例:

[root@localhost mysql-5.7.28]# mkdir data
[root@localhost mysql-5.7.28]# chown -R mysql.mysql /usr/java/mysql/mysql-5.7.28
[root@localhost mysql-5.7.28]# cd ./support-files
[root@localhost support-files]# touch my-default.cnf
[root@localhost support-files]# vi my-default.cnf

my-default.cnf 文件内容如下

[mysqld]
#设置MySQL的安装目录
basedir=/usr/java/mysql/mysql-5.7.28
#设置MySQL数据库的数据存放目录
datadir=/usr/java/mysql/mysql-5.7.28/data
#设置端口
port=3306
#是否区分大小写,1表示存储时表名为小写,操作时不区分大小写;0表示区分大小写;不能动态设置,必须重启生效
lower_case_table_names=1
socket=/tmp/mysql.sock
#设置字符集
character-set-server=utf8
#default-character-set=utf8
#是否将每个表的数据单独存储,1表示单独存储;0表示关闭独立表空间,可以通过查看数据目录,查看文件结构的区别
innodb_file_per_table=1
#日志存放目录
log-error=/usr/java/mysql/mysql-5.7.28/data/mysqld.log
pid-file=/usr/java/mysql/mysql-5.7.28/data/mysqld.pid
#允许时间类型的数据为零(去掉NO_ZERO_IN_DATE,NO_ZERO_DATE)
#sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

#开启查询缓存
explicit_defaults_for_timestamp=true

#show variables like ‘%character%’;

# 拷贝my-default.cnf 至 /etc/目录 并改名为 my.cnf
cp my-default.cnf /etc/my.cnf

#初始化 mysql
../bin/mysqld --initialize --user=mysql --basedir=/usr/java/mysql/mysql-5.7.28/ --datadir=/usr/java/mysql/mysql-5.7.28/data/

例:

[root@localhost support-files]# cp my-default.cnf /etc/my.cnf
[root@localhost support-files]# cd …/
[root@localhost mysql-5.7.28]# ./bin/mysqld --initialize --user=mysql --basedir=/usr/java/mysql/mysql-5.7.28/ --datadir=/usr/java/mysql/mysql-5.7.28/data/
[root@localhost mysql-5.7.28]#

# 如果报错:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory 就安装libaio
yum install libaio

查看临时密码

cat /usr/java/mysql/mysql-5.7.28/data/mysqld.log

例:密码为mysqld.log文件最后一行的 ioaTfG=)e9%p

[root@localhost mysql-5.7.28]# cat /usr/java/mysql/mysql-5.7.28/data/mysqld.log

2022-09-13T05:58:23.547294Z 0 [Warning] InnoDB: New log files created, LSN=45790
2022-09-13T05:58:23.582895Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2022-09-13T05:58:23.641862Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 13c0992b-3329-11ed-8fa4-000c29aa3554.
2022-09-13T05:58:23.644255Z 0 [Warning] Gtid table is not ready to be used. Table ‘mysql.gtid_executed’ cannot be opened.
2022-09-13T05:58:24.647971Z 0 [Warning] CA certificate ca.pem is self signed.
2022-09-13T05:58:25.064410Z 1 [Note] A temporary password is generated for root@localhost: ioaTfG=)e9%p

[root@localhost mysql-5.7.28]#

设置开机自启动

# 复制启动脚本到开机初始化目录
cp support-files/mysql.server /etc/init.d/mysqld

# 赋予可执行权限
chmod +x /etc/init.d/mysqld

# 添加服务
chkconfig --add mysqld

#显示服务列表
chkconfig --list

[root@localhost mysql-5.7.28]# cp support-files/mysql.server /etc/init.d/mysqld
[root@localhost mysql-5.7.28]# chmod +x /etc/init.d/mysqld
[root@localhost mysql-5.7.28]# chkconfig --add mysqld
[root@localhost mysql-5.7.28]# chkconfig --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。

要列出 systemd 服务,请执行 ‘systemctl list-unit-files’。
查看在具体 target 启用的服务请执行
‘systemctl list-dependencies [target]’。

mysqld 0:关 1:关 2:开 3:开 4:开 5:开 6:关
netconsole 0:关 1:关 2:关 3:关 4:关 5:关 6:关
network 0:关 1:关 2:开 3:开 4:开 5:开 6:关
[root@localhost mysql-5.7.28]#

启动服务修改密码

# 启动mysql
service mysqld start

# 进入 mysql
./bin/mysql -u root -p
#输入默认初始密码
# 修改密码
set password=password('123456');

# 赋予权限
grant all privileges on *.* to root@'%' identified by '123456';
# grant : 赋权命令
# all privileges : 当前用户的所有权限
# on : 介词
# . : 当前用户对所有数据库和表的操作权限
# to : 介词
# root@'%' : 权限赋给 root 用户,所有 IP 都能连接
# identified by '123456' :连接时输入密码为123456

#MySQL用户数据和权限有修改后,希望在"不重启MySQL服务"的情况下直接生效,那么就需要执行这个命令
flush privileges
#flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mysql库(MySQL数据库的内置库)中提取到内存里。通常是在修改ROOT帐号的设置后,怕重启后无法再登录进来,那么直接flush之后就可以看权限设置是否生效。

例:

[root@localhost mysql-5.7.28]# service mysqld start
Starting MySQL SUCCESS!
[root@localhost mysql-5.7.28]# ./bin/mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.28

Copyright © 2000, 2019, Oracle and/or its affiliates. All rights reserved.

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> set password=password(‘123456’);
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on * . * to root@‘%’ identified by ‘123456’;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

添加远程访问权限

use mysql;
update user set host='%' where user='root';
flush privileges;

例:

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> update user set host=‘%’ where user=‘root’;
ERROR 1062 (23000): Duplicate entry ‘%-root’ for key ‘PRIMARY’
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

退出mysql指令模式

# 退出mysql
quit;

mysql> quit;
Bye
[root@localhost ~]#

# 开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent

[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
success
[root@localhost ~]#

连接测试:要是不行就重启一下服务器
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值