1 首先从官网下载centso对应的mysql5.7

MySQL 5.7 Linux安装包下载:https://downloads.mysql.com/archives/community/

根据自己系统位数选择:

dbeaver 离线安装mysqldump 离线安装mysql5.7_MySQL

2 查询并卸载系统自带的Mariadb

rpm -qa | grep mariadb

dbeaver 离线安装mysqldump 离线安装mysql5.7_mysql_02

rpm -e --nodeps mariadb-5.5.56-2.el7.x86_64

其他的类似这样命令删除干净

2 创建数据库数据存储目录、日志目录及临时目录

# 创建mysql用户组
groupadd mysql
# 创建一个用户名为mysql的用户,并加入mysql用户组
useradd -g mysql mysql
# 制定password 为111111
passwd mysql
mkdir -p /data/mysql/data/
 mkdir -p /data/mysql/log/
 mkdir -p /data/mysql/tmp/
# 更改所属的组和用户
chown -R mysql /data/mysql/
chgrp -R mysql /data/mysql/

并添加/data/mysql权限,防止后面启动时无权限报错

3 将下载的tar包复制到/usr/local目录下并解压,将解压后包名mv为mysql

tar xzvf mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.7.28-linux-glibc2.12-x86_64 mysql

4 mysql用户修改mysql基本配置,编译/etc/my.cnf,没有则新建,以下内容(后面步骤不做说明都是mysql用户)

[client] 
port = 3306 
socket = /data/mysql/tmp/mysql.sock                        # 用于本地连接的socket套接字,mysqld守护进程生成了这个文件
[mysqld]
#skip-grant-tables=1 
server-id = 1                                  # Mysql服务的唯一编号 每个mysql服务Id需唯一
port = 3306                                    # MySQL监听端口
bind-address=0.0.0.0
basedir = /usr/local/mysql                      # MySQL安装根目录
datadir = /data/mysql/data                      # MySQL数据文件所在位置
tmpdir  = /data/mysql/tmp                                  # 临时目录,比如load data infile会用到
socket = /data/mysql/tmp/mysql.sock        # 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
pid-file = /data/mysql/log/mysql.pid      # pid文件所在目录
character-set-server = utf8mb4                  # 数据库默认字符集,主流字符集支持一些特殊表情符号(特殊表情符占用4个字节)
collation-server = utf8mb4_general_ci          # 数据库字符集对应一些排序等规则,注意要和character-set-server对应
init_connect='SET NAMES utf8mb4'                # 设置client连接mysql时的字符集,防止乱码
lower_case_table_names = 1                      # 是否对sql语句大小写敏感,1表示不敏感
max_connections = 400                          # 最大连接数
max_connect_errors = 1000                      # 最大错误连接数
explicit_defaults_for_timestamp = true          # TIMESTAMP如果没有显示声明NOT NULL,允许NULL值

log_error = /data/mysql/log/error.log                          # 数据库错误日志文件
slow_query_log = 1                              # 慢查询sql日志设置
long_query_time = 1                            # 慢查询时间;超过1秒则为慢查询
slow_query_log_file = /data/mysql/log/slow.log                  # 慢查询日志文件
min_examined_row_limit = 100                    # 检索的行数必须达到此值才可被记为慢查询,查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
expire_logs_days = 5                            # MySQL binlog日志文件保存的过期时间,过期后自动删除

5 安装数据库

# 初始化数据库,并指定启动mysql的用户
cd /usr/local/mysql/bin

./mysqld --initialize --user=mysql

如启动失败,查看my.cnf中配置的datadir目录下生成一个error.log内容具体定位什么问题,一般主要是目录没创建或者没权限。

安装完成后,在my.cnf中配置的datadir目录下生成一个error.log文件,里面记录了root用户的随机密码。
其中日志关键字:A temporary password is generated for root@localhost: Ux<<lCbrr8&d”
这里面的Ux<<lCbrr8&d,这个就是我们要找的密码了,每个都不一样。

或者在 grep 'temporary password' /data/mysql/log/*

6 开启开机自启动服务

# 复制启动脚本到资源目录
cp /usr/local/mysql/support-files/mysql.server  /etc/rc.d/init.d/mysqld
 
# 增加mysqld服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysqld
 
# 将mysqld服务加入到系统服务
chkconfig --add mysqld
 
# 检查mysqld服务是否已经生效
chkconfig --list mysqld
 
# 启动mysql
service mysqld start
#检查
service mysqld status

7 修改环境变量

vim ~/.bashrc
#or vim /etc/profile
#add  export PATH=$PATH:/usr/local/mysql/bin
source ~/.bashrc

8 登录修改密码

#登陆mysql,输入随机密码,err.log找
mysql -uroot -p

若密码无效,则my.cnf中配置#skip-grant-tables=1 去掉注释,重启mysql服务:service mysql stop/service mysql start

#修改root用户密码
update user set authentication_string=password('123456') where user='root';

#上一步执行报错时,先执行下面那段
alter user 'root'@'localhost' identified by '#20as3SElksds0ew98';

将my.cnf中配置#skip-grant-tables=1 再注释,再重启mysql服务

9 授权root用户的所有权限并设置远程访问

#重新登陆mysql并使用mysql db
use mysql;

#授权 root 用户的所有权限并设置远程访问
update user set host='%' where user='root';
#刷新权限列表
flush privileges;

10  防火墙设置,否则远程登录还是报错:

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.1.165' (113)
systemctl disable firewalld
 service firewalld stop