Linux---mysql数据库的安装---8.0版本----centos7---mysql-8.0.21-el7-x86_64.tar.gz
链接:https://pan.baidu.com/s/1bKviu2oQwB-6BIMVhHNLYA
提取码:4399
2.首先检测环境中是否安装过mysql:rpm -qa | grep mysql;有则卸载:rpm -e --nodeps + 上一行得到的信息
3.检查是否有mariadb:由于 在CentOS中默认安装有MariaDB,所以如果我们不删除MariaDB文件的话,安装MySQL时可能会发生冲突。所以要删除MariaDB文件
rpm -qa | grep mariadb 有则卸载:
rpm -e --nodeps + 上一行得到的信息
4.安装mysql的依赖包:yum install libaio

5.mysql一般安装在:/usr/local目录下:cd /usr/local;将压缩包上传并解压:
rz -be 上传
tar -zxvf mysql-8.0.21-el7-x86_64.tar.gz 解压 得到 mysql-8.0.21-el7-x86_64
对mysql-8.0.21-el7-x86_64进行重命名为mysql:mv mysql-8.0.21-el7-x86_64 mysql
6.创建数据库文件存放的文件夹。这个文件夹将来存放每个数据库的库文件
cd mysql
mkdir mysqldb
7.mysql安装目录赋予权限
[root@centos7 mysql]# chmod -R 777 /usr/local/mysql/
8.创建mysql组和用户
创建组:[root@centos7 mysql]# groupadd mysql
创建用户:[root@centos7 mysql]# useradd -r -g mysql -s /bin/false mysql (-s /bin/false参数指定mysql用户仅拥有所有权,而没有登录权限)
将用户添加到组中:[root@centos7 mysql]# chown -R mysql:mysql ./
步骤7、8图示:

9.修改mysql配置文件:[root@centos7 mysql]# vi /etc/my.cnf (如果有一定经验,可以在里面添加一些其他的配置)
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=/usr/local/mysql
# 设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/mysqldb
# 允许最大连接数
max_connections=10000
# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
# 服务端使用的字符集默认为UTF8
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
10.安装mysql
[root@centos7 mysql]# cd /usr/local/mysql/bin/
[root@centos7 bin]# ./mysqld --initialize --console

得到红色的初始密码,保存
11.启动mysql服务:进入mysql.server服务目录下并启动服务
[root@centos7 bin]# cd /usr/local/mysql/support-files
[root@centos7 support-files]# ./mysql.server start
如果第一次启动,当初始化执行会有报错:

此时不要担心,重新给mysql安装目录赋予一下权限后,再次执行即可;
如果还是报同样的错,在确定本机之前的mysql删除赶紧,配置文件改对,端口号没有被占用的情况下,有可能是因为所有的操作都是基于root权限下执行的:
support-files目录下的mysql.server 执行的是 mysqld_safe 而不是 mysqld,使用vim查看mysql.server的内容,找到第281行 可以看出,执行参数start时,运行的是$bindir目录下的/mysqld_safe 程序:而用root用户执行mysqld 跟mysqld_safe 不加--user=root参数 指定用户时会报错的。为了让mysqld_safe能过执行,需要对mysql.service文件进行一点点修改:在281行, 在执行mysqld_safe 时 ,加入了 --user=root 参数:

[root@centos7 support-files]# chmod -R 777 /usr/local/mysql
[root@centos7 support-files]# ./mysql.server start

12.现在将mysql添加到系统进程中,就可以使用服务进程操作mysql了
[root@centos7 bin]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld

13.设置mysql自启动
[root@centos7 bin]# chmod +x /etc/init.d/mysqld
[root@centos7 bin]# systemctl enable mysqld

此时mysql自启动就已经设置好了。
14.修改root用户登录密码
登录mysql:
cd /usr/local/mysql/bin/
./mysql -u root -p 回车,然后输入刚刚的初始密码,就会进入mysql
然后执行语句,修改密码为1234:
mysql> alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';

15.设置允许远程登录
mysql> use mysql
mysql> update user set user.Host='%'where user.User='root';
mysql> flush privileges;
mysql> quit
16.重启服务且测试
centos6与centos7的服务命令都支持:
[root@centos7 bin]# systemctl restart mysql
[root@centos7 bin]# service mysql restart
16-1:查看mysql是否启动:[root@centos7 bin]# systemctl status mysql

16-2:防火墙相关配置(可选,个人学习用可直接关闭防火墙)
查看防火墙开发端口:firewall-cmd --list-all
在防火墙中将3306端口开发:
[root@centos7 bin]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@centos7 bin]# firewall-cmd --reload
//--permanent为永久生效,没有此参数 服务器重启后配置失效
17.使用navicat测试连接:如果报错:10060 "Unknown error"
检查你的阿里或腾讯的服务器控制台是否开启3306端口访问权限
手动添加安全组规则:

此时再次测试连接,连接成功;
18.长时间未连接数据库,再连接有可能报错:ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2)。
Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘:
1.临时解决,即重启:去到mysql的bin目录下:service mysql restart,控制台打印:Redirecting to /bin/systemctl restart mysql.service,重新登录即可。
2.以上用service mysql restart命令去直接重启报错,证明这个命令不行。可以尝试一下其他启动命令。如mysqld –user=root,之后便成功了。当然这一步也可以把user=root这个配置到/etc/my.cnf中的[mysqld]下,这样再用service mysql restart这种命令就会恢复正常。
此时root权限执行 find / -name mysql.sock,找到mysql.sock的路径为:/tmp/mysql.sock:
3.最简单的解决方式是查看mysql的配置文件vi /etc/my.cnf,查看socket的配置项:

然后直接建立软链接:

然后再次登录一切正常。
问题到这里是解决了,但是我们开始就说过cron机制会定期清理tmp目录没有变动的文件(有资料显示说是240小时清理一次),也就是说这个mysql.sock还会被清理掉,那有什么办法解决这一问题吗,答案当然是有的,我们只要在my.cnf配置中添加以下配置项就可以:

然后重启数据库:service mysql restart
问题解决。
解决 ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2)
出现这个问题就如报错所说缺少这个mysql.sock文件 接下来按下面执行就会生成:
进入mysql的support-files目录执行这条命令
./mysql.server start
执行后显示启动成功就ok了
再进入'/tmp/mysql.sock' 就能看到这个文件了
再连接数据库就没问题了!
另一种方法已测:
mysql报错Can‘t connect to local MySQL server through socket ‘/tmp/mysql.sock‘ (2):
修改/etc/my.cnf文件,注释掉mysql.sock配置
kill -9 “mysql进程号”
重启mysql服务:service mysqld restart
再次连接mysql就没问题

ERROR! MySQL is not running, but lock file (/var/lock/subsys/mysql) exists解决:
删除var/lock/subsys/mysql下的mysql 文件
19.
问题:Access denied for user 'root'@'%' to database 'test'
mysql8使用root登录
新建用户test,新建数据库test,当把test库的所有权限授权给test用户时,报错
Access denied for user 'root'@'%' to database 'test'
这种情况一般出现在mysql加固后,root部分权限被收回,导致root没法授权所有权限
可以查看一下root权限
select * from mysql.user where user='root' \G
看看是否有那些列字段为N
解决办法:
重新给root添加收回的权限,也就是将N改成Y然后刷新权限
update mysql.user set Grant_priv='Y',Super_priv='Y' where user = 'root';
update mysql.user set Insert_priv ='Y',Delete_priv ='Y',Create_priv ='Y',Drop_priv ='Y' where user = 'root';
(把N的字段改为Y,以上两个是举例)
flush privileges;
然后重新给其他用户授权,如果还报同样的错
可以尝试重启mysql服务
service mysqld restart
-----------------------------------
20.
com.mysql.jdbc.CommunicationsException: The last packet successfully received from the server was58129 seconds ago.The last packet sent successfully to the server was 58129 seconds ago, which is longer than the server configured value of 'wait_timeout'. You should consider either expiring and/or testing connection validity before use in your application, increasing the server configured values for client timeouts, or using the Connector/J connection property 'autoReconnect=true' to avoid this problem.
查了一下,原来是mysql超时设置的问题
如果连接闲置8小时 (8小时内没有进行数据库操作), mysql就会自动断开连接, 要重启tomcat.
解决方案:https://blog.csdn.net/ly5156/article/details/6717520
21.忘记密码
①:修改登录设置,免密登录:vi /etc/my.cnf,在[mysqld]的段中加上一句:skip-grant-tables
②:重新启动mysqld:/etc/init.d/mysqld restart,mysql重启成功
③:正常登录数据库,无需密码,使用mysql库:USE mysql;
④:执行:select user,host from user;

⑤:修改密码成功,此时可以注释掉刚刚配置的跳过密码登录的配置;
⑥:使用navicat等远程连接失败报错:linux2002 - Can't connect to server on '' (10061),需要开启远程连接配置:参见第15点

浙公网安备 33010602011771号