终于解决了!在虚拟机上面安装了N次mysql5.7数据库,踩了无数的坑。有时候是安装过程出错,有时候是初始化出错,总之就是各种各样的错误。mysql服务安装成功了命令又不管用,作为小白的我很头疼啊!在网上查找了很多资料总是做完之后mysql服务还是不能用。肿么办?终于,在我东拼西凑之下mysql服务成功启动,mysql命令也成功进入mysql窗口,防火墙也设置OK,windows系统下的Navicat也成功连接到了CentOS7下的mysql服务。
我太难了!!!
mysql官网下载linux安装的mysql
我这里安装的是mysql5.7.17,与上述截图版本不一致,上面仅供演示参考,但是安装步骤一致。
①把在windows系统下下载好的mysql-xxx.tar.gz压缩包使用Xshell或者是其他连接工具,上传到服务器。
②有网络条件的可以使用wget命令直接下载到centos7。
wget后面url的选择
一般在使用别人的的路径的时候下载的版本都是不可选择的,那么怎么才能选择自己想要的下载版本呢?选择DownLoad后 进入这个页面:
在centos7命令行输入:
#虚拟机上下载mysql-xxx.tar.gz
wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
如果wget不存在?命令行,先执行:
yum -y install wget #安装wget
然后在执行一遍下载命令。
在rpm中利用grep工具搜索有关mariadb的软件包
rpm -qa | grep mariadb
rpm是RedHat软件包管理工具
-qa 表示 query all
| 表示 将两个命令隔开,左边命令的输出就会作为右边命令的输入
grep 是一个文本搜索工具
如果有,删除搜索出来的软件包名
rpm -e 搜索出来的软件包名
rpm -e --nodeps 强制删除
再使用命令 rpm -qa | grep mariadb 进行检查确认一遍是否完全删除。
卸载删除mysql数据库
这一步很重要,以免后面安装有残留的文件有影响。由于我之前安装了N次,所以我要找到所有的mysql相关的文件删除它。
查找安装的mysql:
rpm -qa | grep mysql #查找安装的mysql文件
yum remove mysql-* #卸载所有的mysql文件
查找mysql相关的文件:
find / -name mysql #查找根目录下/,名字包含mysql的所有文件
rm -rf 搜索出来的文件名(例如 rm -rf /usr/local/mysql) #删除文件
删!删!删!全部删除!!!
我的安装路径是 /usr/local/mysql (所有的文件全部在mysql下面)
友情提示:
如果不安装在这个路径下的话可能会出现错误,看,
虽然在配置文件里面配置了basedir,但是启动的时候还是会去到/usr/local/mysql/bin/下面去寻找mysqld,这时候就需要安全启动:
./bin/mysqld_safe --basedir=/mysql/mysql-5.7.17/,这是我之前配置的安装路径。mysqld_safe具体的使用方法还请自行百度。
回到第一步:把mysql-xxx.tar.gz上传到服务器:/usr/local/ 下。
①如果你是用的是Xshell,可以新建文件传输,然后把文件拖拽到指定的位置。
②也可以直接进入到 /usr/local/ 目录下,把文件拖拽到XShell里面,上传。
在这种情况下有可能会报错:rz命令找不到。这时可以在命令行执行:
yum install lrzsz
文件上传完成后执行命令:
解压文件到当前目录:/usr/local/
解压出来的文件重命名:
首先检查mysql是否进行分组:
cat /etc/group | grep mysql
cat /etc/passwd | grep mysql
查询之后存在分组???
如果之前创建过分组怎么办?删掉分组,万一出问题怎么办?(小心别掉坑里去)
用户分组不能删除、报错怎么办?
这是mysql的进程被占用的原因,可以杀进程或者是重启一次反正也用不了多长时间[龇牙]
创建分组
groupadd mysql #创建组
useradd -r -g mysql mysql #添加组用户
chown -R mysql:mysql /usr/local/mysql
创建data文件夹:
mkdir /usr/local/mysql/data #data文件夹里存放的是数据库数据
data文件夹授权:进入mysql目录下
cd /usr/local/mysql/
chown -R mysql:mysql data #授权data文件夹
cd .. #返回上一级
chown 777 mysql/ 赋予最高权限(所有用户都可以使用)
vi /etc/my.cnf
配置信息如下:
[mysql]
#修改默认字符集
default-character-set=utf8
#这个是绑定客户端socket文件路径,不然出错还要创建
socket=/usr/local/mysql/mysql.sockt
[mysqld]
#用于后续修改密码时,如果随机密码不对,可以跳过密码验证登录的,修改完密码后再删掉。skip-grant-tables
socket=/usr/local/mysql/mysql.sockt
log_error=/usr/local/mysql/data/error.log
pid_file=/usr/local/mysql/data/mysql.pid
basedir=/usr/local/mysql/
datadir=/usr/local/mysql/data
port = 3306
#忽略大小写
lower_case_table_names=1
#服务端默认字符集
character-set-server=utf8
#最大连接数
max_connections=2000
#创建数据库时默认数据引擎
default-storage-engine=INNODB
explicit_defaults_for_timestamp=true
chown 777 /etc/my.cnf
检查是否有libaio库?
rpm -qa|grep libaio
没有则安装
yum install libaio
进入mysql的bin目录下
cd /usr/local/mysql/bin
#初始化数据库
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
vi /etc/profile #环境变量配置文件
export PATH=$PATH:/usr/database/mysql/bin #文件最后面加上
source /etc/profile #配置文件生效
自启动配置
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --list
显示服务列表,如果看到mysqld的服务,并且3,4,5都是”on/开启 “的话则成功
如果是off/关闭,则键入:chkconfig --level 345 mysqld on 命令
启动&关闭&重启mysql服务的命令
service mysqld start #启动
service mysqld stop #停止
service mysqld restart #重启
启动服务报错?
错误原因,没有初始化权限表。
进入mysql目录下:
cd /usr/local/mysql
chown -R mysql.mysql . #初始化当前目录的权限
ps -ef | grep mysql
由于前面配置文件配置了跳过检测密码,命令行直接输入mysql
mysql #未找到命令错误
因为linux系统的命令是去/usr/bin目录下去寻找,找不到mysql当然会报错。这时,就需要设置一下软连接到/usr/bin下面:
ln -s /usr/local/mysql/bin/mysql /usr/bin/
UPDATE mysql.user SET authentication_string=PASSWORD('新密码') where USER='root';
flush privileges; #刷新授权
重置密码后一定要执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
flush privileges;
设置任何ip都可以登录:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密码' WITH GRANT OPTION;
flush privileges;
退出mysql:
quit;
vi /etc/my.cnf
注释掉,跳过密码检测的配置。重启mysql服务:
service mysqld restart
查看防火墙开放的端口:
firewall-cmd --list-ports
没有开放的端口
如果没有3306端口,是连接不上的,输入下面命令,使防火墙开放 3306端口(使用TCP协议的/永久开放的/公开的性质)
#开放3306端口
firewall-cmd --zone=public --add-port=3306/tcp --permanent
参数 | 描述 |
---|---|
–add-port=3306/tcp | 添加端口,格式为:端口/通讯协议 |
–remove-port=3306/tcp | 移除端口,格式为:端口/通讯协议 |
–zone | 作用域 |
–permanent | 永久生效,没有此参数重启后失效 |
同样的方法,也可以用它来开放8080端口。
端口开放后怎么关闭开放端口呢?把add改成remove就OK了。
重启防火墙
firewall-cmd --reload
systemctl stop firewalld.service #暂时停用防火墙
systemctl disable firewalld.service #永久关闭防火墙,不建议使用
同样的道理,有停用就有开启;有禁用就有启用:
systemctl startfirewalld.service #暂时停用防火墙
systemctl enable firewalld.service #永久关闭防火墙,不建议使用
如果不做以上防火墙的设置,连接mysql会报错误:UnKnown Error。
https://blog.csdn.net/weixin_36756708/article/details/97130901?utm_source=app
https://www.cnblogs.com/richiewlq/p/7521343.html
https://blog.csdn.net/yhl_jxy/article/details/53534194?utm_source=app
https://blog.csdn.net/qq_34691713/article/details/84106957
https://blog.csdn.net/WYA1993/article/details/88890883
https://blog.csdn.net/fireblue1990/article/details/74147190
https://www.cnblogs.com/jzz228/p/11147072.html
https://www.imooc.com/article/45082