在centos7.4下安装 mysql 5.7.25

本文详细介绍了在CentOS 7.4环境中安装MySQL 5.7.25的具体步骤,包括环境准备、安装过程、配置文件调整、初始化设置、权限管理等内容。

在centos7.4下安装 mysql 5.7.25

前言

在部署linux数据库的,往往因为客户有指定版本的要求,或者有软件安装的审计的需要制定对应的版本号, 我也遇到客户必须制定的mysql的版本的要求,mysql 版本号为v5.7.25。

mysql安装

环境检查

检查是否安装了mysql
rpm -qa| grep -i mysql

如有,类似

mysql-libs-5.1.52-1.el6_0.1.x86_64

卸载之

如果已经安装了mysql,先关闭mysql服务

killall mysqld
rpm -e --nodeps mysql-libs-5.1.52.x86_64

检查否存在 mariadb 数据库,如有,卸载之,卸载同上

rpm -qa | grep mariadb
彻底卸载mysql

如果已经安装了mysql

killall mysqld

使用 find / -name mysql 查找出所有的mysql删除对应的文件夹

查找结果如下:

[root@SZDC04291 soft]# find / -name mysql
/run/lock/subsys/mysql
/etc/linux/targeted/active/modules/100/mysql
/usr/lib64/mysql
/usr/local/mysql
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/bin/mysql
/home/app/soft/mysql-5.7.25-linux-glibc2.12-x86_64/include/mysql
/mysql
/mysql/bin/mysql
/mysql/include/mysql
/data/mysqldata/mysql

删除对应的mysql目录

[root@SZDC04291 soft]# rm -rf /run/lock/subsys/mysql*
[root@SZDC04291 soft]# rm -rf /etc/lib/linux/targeted/active/modules/100/mysql*
[root@SZDC04291 soft]# rm -rf /usr/lib64/mysql*
[root@SZDC04291 soft]# rm -rf /usr/local/mysql/*
[root@SZDC04291 soft]# rm -rf /mysql/*
[root@SZDC04291 soft]# rm -rf /mysql/bin/mysql/*
[root@SZDC04291 soft]# rm -rf /mysql/include/mysql/*
[root@SZDC04291 soft]# rm -rf /data/mysqldata/mysql/*

注意:卸载后/etc/my.cnf不会删除,需要进行手工删除

再次查找机器是否安装mysql

rpm -qa|grep -i mysql

无结果,说明已经卸载彻底,接下来直接安装mysql即可.

检查操作系统

如何查看linux版本是centos还是redhat

使用

cat /etc/redhat-release 

则会出现具体系统

Red Hat Enterprise Linux AS release 4 (Nahant Update 8) Kernel /r on an /m

CentOS release 7.4 (Final)

查看linux系统是64位还是32位
getconf LONG_BIT
64

下载mysql 5.7.25

注意:我们的实际环境是linux系统是64位,操作系统是CentOS release 7.4 (Final),大家根据实际情况下载对应的mysql 5.7.25

方法1: 到mysql官网下载安装包(64位) mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz

上传安装包至 /home/app/soft

方法2: 使用wget下载
cd /home/app/soft
wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
方法3: 使用两台linux服务器之前传送文件,速度最快。
scp mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz root@10.9.1.133:/home/app/soft

三种方式都是可以下载到全的安装,看大家那个比较方便。

解压包文件
cd /home/app/soft
tar -zxvf mysql-5.7.25-linux-glibc2.12-x86_64.tar.gz
mv  mysql-5.7.25-linux-glibc2.12-x86_64 /usr/local/mysql

配置编译

创建data目录
cd /usr/local/mysql
mkdir data
检查mysql组和用户

检查mysql组和用户是否存在,如无创建

cat /etc/group | grep mysql

类似出现如下:

mysql:x:490:

类似像如下

cat /etc/passwd | grep mysql

mysql:x:496:490::/home/mysql:/bin/bash

以上为存在的情况,如无,执行添加命令:

groupadd mysql
useradd -r -g mysql mysql

useradd -r参数表示mysql用户是系统用户,不可用于登录系统

修改所有者和组

/usr/local/mysql 的所有者及所属组改为 mysql

chown -R mysql.mysql /usr/local/mysql
创建 my_default.cnf 文件

因为 mysql 5.7 版本开始 my_default.cnf 文件不会自带,需要手动创建。

cd /usr/local/mysql/support-files
vi  my_default.cnf

/usr/local/mysql/support-files 目录下创建 my_default.cnf

# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.


[mysqld]
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
port = 3306
socket = /tmp/mysql.sock
character-set-server=utf8

log-error = /usr/local/mysql/data/mysqld.log
pid-file = /usr/local/mysql/data/mysqld.pid
拷贝my_default.cnf/etc/my.cnf
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf
初始化 mysqld
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/

初始化完成之后,查看日志

tail -f  /usr/local/mysql/data/mysqld.log

mysql安装的时候是否有问题。

设置开机启动mysql

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

启动/停止/重启 mysql服务

启动mysql
service mysqld start
停止mysql
service mysqld stop
重启mysql
service mysqld restart
查看运行状态
service mysqld status
查看mysql进程
ps -ef | grep mysql
结束mysql进程

kill -9 进程号 或 killall mysqld

初始化mysql密码

ln -s 建立链接
mysql -u root -p

出现错误:-bash: mysql: command not found

原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。 首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:

建立命令的软件

ln -s /usr/local/mysql/bin/mysql /usr/bin
ln -s /usr/local/mysql/bin/mysqladmin /usr/bin
ln -s /usr/local/mysql/bin/mysqld_safe /usr/bin

加入环境变量

  编辑 /etc/profile,这样可以在任何地方用mysql命令了

vi /etc/profile

添加如下一行:

export PATH=$PATH:/usr/local/mysql//bin

使 /etc/profile 环境变量生效
source /etc/profile

这个就可以在 任何地方用 mysql 命令了。

添加密码

mysql 安装好了,但是没有设置root密码,如果此时访问mysql会报错,

忘记MySQL密码或者本地lcoalhostroot用户无法登录时。可用以下方法无密码登录

关闭mysqld服务
/etc/init.d/mysqld stop  关闭mysqld服务 (可以直接killall mysqld)
进入安全模式

在执行命令之前必须先关闭mysqld服务,请注意!

mysqld_safe --skip-grant-tables &
使用 mysql -u root -p 空密码进入shell模式
mysql -u root -p

// 查看用户用户

SELECT User, Host  FROM mysql.user;

mysql 5.7.25 有点特殊的地方是 没有password字段,密码字段是 authentication_string,我们刚开始的时候一直使用 password字段去修改报错。

因此,修改root的命令如下:

更改mysql用户密码 为

update mysql.user set authentication_string=password("123") where user='root';

mysql> use mysql;
mysql> update user set authentication_string =password('123') where user='root';
mysql> flush privileges; 
mysql> quit; 

修改密码方式还有其他几种:

方法1: 用SET PASSWORD命令 首先登录MySQL。

格式:mysql> set authentication_string for 用户名@localhost = password('新密码');

例子:mysql> set authentication_string for root@localhost = password('123');

方法2:用mysqladmin

格式:mysqladmin -u用户名 -p旧密码 authentication_string 新密码

例子:mysqladmin -uroot -p123456 authentication_string 123

方法3:用UPDATE直接编辑user表

首先登录MySQL。

mysql> use mysql;

mysql> update user set authentication_string =password('123') where user='root';

mysql> flush privileges;

mysql> quit;

**注意:修改root的密码以后,千万不需要重启mysql,因为还没有设置远程访问的权限,还有本地访问的权限,重启以后安全模式失效,还是登录不了mysql。 **

设置远程访问

允许root用户在任何地方进行远程登录,并具有所有库任何操作权限。

如果出现 提示”Access denied for user ‘root’@’localhost’ (using password: YES)”

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> select user,host from user;
+------------------+-----------+
| user             | host      |
+------------------+-----------+
| epass            | %         |
| epass            | localhost |
| mysql.infoschema | localhost |
| mysql.session    | localhost |
| mysql.sys        | localhost |
| root             | localhost |
+------------------+-----------+
6 rows in set (0.00 sec)

mysql> 

发现root只有本地权限,

那么,

我们需要给root 加上 127.0.0.1,% 还有指定服务器ip访问的权限,

// 设置127.0.0.1访问的root权限
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("127.0.0.1","root",PASSWORD("123456"));

// 设置%所有ip访问的root权限,注意这个版本有点奇怪,按照道理设置所有%就可以访问了,但一定要设置 127.0.0.1 和 localhost 也要加权限。具体原因还没有查明
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("%","root",PASSWORD("123456"));

// 我们还可以指定对应的服务器的访问权限
mysql> INSERT INTO mysql.user(host,user,authentication_string) VALUES("10.6.9.96","root",PASSWORD("123456"));
//刷新权限
mysql> flush privileges;
//退出
mysql> quit;

如果出现 Field 'ssl_cipher' doesn't have a default value错误怎么解决?

使用 grant all on root.* to 'root'@'localhost';grant all on root.* to 'root'@'127.0.0.1';命令

此时,使用 select user,host from user; 查看是否权限都有了

如果有,重新mysql,让设置生效即可访问了。

或者 可以简单一点一些,

使用 grant all privileges on *.* to root@"%" identified by "Qa~!@#4^" ; //给mysql用户分配远程访问权限 需要使用 flush privileges; 刷新权限。

service mysqld restart

测试本地是否可以访问

使用 mysql -uroot -h127.0.0.1 -p 登录并授权localhost本地root登录

也可以使用 mysql -uroot -p 登录一下测试是否可以登录

其他的问题

怎样保护“/tmp/mysql.sock ”不被删除

怎样保护“/tmp/mysql.sock ”不被删除

如果你有这个问题,事实上任何人可以删除MySQL通讯套接字“/tmp/mysql.sock”,在Unix的大多数版本上,你能通过为其设置sticky(t)位来保护你的“/tmp”文件系统。作为root登录并且做下列事情:

在shell模式下:

shell> chmod +t /tmp

这将保护你的“/tmp”文件系统使得文件仅能由他们的所有者或超级用户(root)删除。

你能执行ls -ld /tmp 检查sticky位是否被设置,如果最后一位许可位是t,该位被设置了。

mysql -h localhost和mysql -h 127.0.0.1的区别

mysql -h localhost和mysql -h 127.0.0.1的区别, 通过localhost连接到mysql是使用UNIX socket,而通过127.0.0.1连接到mysql是使用TCP/IP。

看看状态:mysql -h localhost
  • mysql -h localhost > status

Connection id: 639

Current database: mysql

Current user: root@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ”

Using delimiter: ;

Server version: 5.7.25-log Source distribution

Protocol version: 10

Connection: Localhost via UNIX socket

看看状态:mysql -h 127.0.0.1
  • mysql -h 127.0.0.1 > status

Connection id: 640

Current database: mysql

Current user: root@localhost

SSL: Not in use

Current pager: stdout

Using outfile: ”

Using delimiter: ;

Server version: 5.7.25-log Source distribution

Protocol version: 10

Connection: 127.0.0.1 via TCP/IP

安装时的一些错误

  • -bash: ./scripts/mysql_install_db: 类似错误

出现-bash: ./scripts/mysql_install_db: /usr/bin/perl: bad interpreter:没有那个文件或目录

解决办法:

yum -y install perl perl-devel
  • 出现 libaio.so.1: cannot open shared object 类似错误

Installing MySQL system tables..../bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

解决办法:

yum -y install libaio-devel
  • ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘

登录时有可能报这样的错:

ERROR 2002 (HY000): Can‘t connect to local MySQL server through >socket ‘/var/lib/mysql/mysql.sock‘ (2),原因 是/var/lib/mysql>的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:

sudo chown -R root:root /var/lib/mysql

service mysqld restart

mysql5.7.25相关资料

  1. 在centos7.4下安装 mysql 5.7.25

  2. mysql官网下载

  3. linux ubuntu mysql5.7.25安装

  4. 安装MySQL5.7.25解压版及遇到的问题

  5. windows下安装mysql5.7.25过程及注意事项

  6. 在阿里云Windows服务器下安装MySQL5.7.25并配置远程访问

转载于:https://my.oschina.net/kinglyphp/blog/3028806

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值