1 首先从官网下载centso对应的mysql5.7
MySQL 5.7 Linux安装包下载:https://downloads.mysql.com/archives/community/
根据自己系统位数选择:
2 查询并卸载系统自带的Mariadb
rpm -qa | grep mariadb
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