centos mysql 安装与排坑(含vagrant mysql镜像)

  • 狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 面试必备 + 面试必备 【博客园总入口 】

  • 疯狂创客圈 经典图书 : 《SpringCloud、Nginx高并发核心编程》 大厂必备 + 大厂必备 + 大厂必备 【博客园总入口 】

  • 入大厂+涨工资必备: 高并发【 亿级流量IM实战】 实战系列 【 SpringCloud Nginx秒杀】 实战系列 【博客园总入口 】


《SpringCloud Nginx 高并发核心编程》 环境搭建 - 系列

组件 链接地址
【必须】 虚拟机Linux 开发环境准备 https://www.cnblogs.com/crazymakercircle/p/14194688.html
Linux openresty 安装 Linux openresty 安装
【必须】Linux Redis 安装(带视频) Linux Redis 安装(带视频)
【必须】Linux Zookeeper 安装(带视频) Linux Zookeeper 安装, 带视频
Windows Redis 安装(带视频) Windows Redis 安装(带视频)
RabbitMQ 离线安装(带视频) RabbitMQ 离线安装(带视频)
ElasticSearch 安装, 带视频 ElasticSearch 安装, 带视频
Nacos 安装(带视频) Nacos 安装(带视频)
【必须】Eureka Eureka 入门,带视频
【必须】springcloud Config 入门,带视频 springcloud Config 入门,带视频
【必须】SpringCloud 脚手架打包与启动 SpringCloud脚手架打包与启动
Linux 自启动 假死自启动 定时自启 Linux 自启动 假死启动

centos mysql 虚拟机镜像

疯狂创客圈网盘,为大家准备了springcloud.box 虚拟机镜像,里边预装了java 、 redis 、zookeeper、kafka、Eureka、springcloud config、mysql 等必须的组件,省去大家准备开发环境的烦恼,何不妙哉。网盘地址请参见【博客园总入口 】

如果真正要自己安装,请使用下面的教程。 这也是笔者的安装笔记,并且会持续进行问题记录。

安装mysql

在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。

1 下载并安装MySQL官方的 Yum Repository

由于CentOS 的yum源中没有mysql,需要到mysql的官网下载yum repo配置文件。下载命令:

[root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm

执行过程如下:

[root@localhost work]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
--2020-12-27 02:02:22--  http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
.....
HTTP request sent, awaiting response... 200 OK
Length: 25548 (25K) [application/x-redhat-package-manager]
Saving to: ‘mysql57-community-release-el7-10.noarch.rpm’

100%[==================================================================================================>] 25,548       127KB/s   in 0.2s

2020-12-27 02:04:42 (127 KB/s) - ‘mysql57-community-release-el7-10.noarch.rpm’ saved [25548/25548]


使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,

然后进行repo的安装:

rpm -ivh mysql57-community-release-el7-10.noarch.rpm

执行过程如下:

[root@localhost work]# rpm -ivh mysql57-community-release-el7-10.noarch.rpm
warning: mysql57-community-release-el7-10.noarch.rpm: Header V3 DSA/SHA1 Signature, key ID 5072e1f5: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:mysql57-community-release-el7-10 ################################# [100%]

执行完成后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo

使用yum命令即可完成安装

必须进入到 /etc/yum.repos.d/目录后再执行以下脚本, 然后就可以直接yum安装了。

[root@localhost ~]# yum install mysql-server

这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。


[root@localhost yum.repos.d]# yum install mysql-server
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 .....
Installed:
  mysql-community-libs.x86_64 0:5.7.32-1.el7 mysql-community-libs-compat.x86_64 0:5.7.32-1.el7 mysql-community-server.x86_64 0:5.7.32-1.el7

Dependency Installed:
  mysql-community-client.x86_64 0:5.7.32-1.el7                         mysql-community-common.x86_64 0:5.7.32-1.el7

Dependency Updated:
  openssl.x86_64 1:1.0.2k-21.el7_9             openssl-libs.x86_64 1:1.0.2k-21.el7_9             postfix.x86_64 2:2.10.1-9.el7

Replaced:
  mariadb-libs.x86_64 1:5.5.44-2.el7.centos

Complete!

启动msyql:

启动MySQL

systemctl start mysqld 

登录:

获取安装时的临时密码(在第一次登录时就是用这个密码):grep ‘temporary password’ /var/log/mysqld.log

[root@localhost yum.repos.d]# grep 'temporary password' /var/log/mysqld.log
2020-12-27T02:34:04.063826Z 1 [Note] A temporary password is generated for root@localhost: LXwH6NSf*kVh

使用临时密码,登录mysql

mysql -u root -p


然后输入密码(刚刚获取的临时密码)LXwH6NSf*kVh

登录成功后,修改密码

1、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,

输入设值语句 “ set global validate_password_policy=LOW; ” 进行设值,

2、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,

输入设值语句 “ set global validate_password_length=6; ” 进行设值,

3、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,

输入修改语句 “ ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘123456’; ” 可以看到修改成功,表示密码策略修改成功了!!!

执行过程如下:

[root@localhost yum.repos.d]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.32

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> set global validate_password_policy=LOW
    -> ;
Query OK, 0 rows affected (0.03 sec)

mysql> set global validate_password_length=6;
Query OK, 0 rows affected (0.01 sec)

mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
Query OK, 0 rows affected (0.04 sec)

注意:一定要记得在写sql的时候要在语句完成后加上" ; "

常用命令

1、启动MySQL

systemctl start mysqld

2、关闭MySQL

systemctl stop mysqld

3、重启MySQL

systemctl restart mysqld

4、查看MySQL运行状态

systemctl status mysqld

5、设置开机启动

systemctl enable mysqld

6、关闭开机启动

systemctl disable mysqld

问题排解

mysql帐号不允许从远程登陆

默认情况下,mysql帐号不允许从远程登陆,只能在localhost登录。本文提供了二种方法设置mysql可以通过远程主机进行连接。

  • 一、改表法
    在localhost登入mysql后,更改 “mysql” 数据库里的 “user” 表里的 “host” 项,将”localhost”改称”%”
#mysql -u root -p
Enter password:
mysql>use mysql;
mysql>update user set host = '%' where user = 'root';
mysql>select host, user from user;


​ 说明: % 代表任意的客户端,可替换成具体IP地址。

  • 二、授权法

例如: 你想myuser使用mypassword(密码)从任何主机连接到mysql服务器的话。

mysql>GRANT ALL PRIVILEGES ON . TO ‘myuser’@’%’IDENTIFIED BY ‘mypassword’ WITH GRANT OPTION;

如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码

mysql>GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES


配置默认编码为utf8:

vi /etc/my.cnf 

#添加

 [mysqld]

 character_set_server=utf8 
 init_connect='SET NAMES utf8'
其他配置文件:

/etc/my.cnf 日志文件:/var/log//var/log/mysqld.log

服务启动脚本:/usr/lib/systemd/system/mysqld.service

socket文件:/var/run/mysqld/mysqld.pid

不区分大小写

找到你安装MySQL的时候的my.cnf这个文件
如下图所示:在 mysqld下添加一行
lower_case_table_names=1 (1不区分大小写,0区分大小写,默认为0)

远程连接 Mysql 太慢问题

尝试解决了一下上面的连接超时问题,但是发现并没有什么用,还是会出现上面的问题。于是便怀疑是不是远程连接 Mysql 太慢导致了连接超时?因为我在 CentOS7 服务端和 Windows 本地的 Navicat 连接 mysql 都没问题。在网上查询了下,发现在 mysql 的配置文件 /etc/my.cnf 中增加如下配置参数:

# 注意该配置是加在[mysqld]下面

[mysqld]

skip-name-resolve

然后需要重启 mysql 服务。因为根据说明,如果 mysql 主机查询和解析 DNS 会导致缓慢或是有很多客户端主机时会导致连接很慢。同时,请注意在增加该配置参数后,mysql的授权表中的host字段就不能够使用域名而只能够使用ip地址了,因为这是禁止了域名解析的结果。

从防火墙开放端口,或者关闭防火墙

#通过systemctl status firewalld查看firewalld状态

[root@localhost yum.repos.d]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)

如果要关闭防火墙设置,可能通过systemctl stop firewalld这条指令来关闭该功能。

systemctl stop firewalld.service   #关闭防火墙

启动防火墙

systemctl start firewalld

#再次通过systemctl status firewalld查看firewalld状态,显示running即已开启了。

增加防火墙放行的规则:

#再次执行执行firewall-cmd --permanent --zone=public --add-port=3306/tcp,提示success,表示设置成功,

firewall-cmd --permanent --zone=public --add-port=3306/tcp

这样就可以继续后面的设置了。重新加载防火墙

firewall-cmd --reload

说明:开发环境,关闭防火墙即可

报错:Specified key was too long; max key length is 767 bytes

1 ERROR 1071 (42000): Specified key was too long; max key length is 767 bytes

版本5.6 解决方案;通过root账号,设置两个全局变量:

set global innodb_large_prefix=on;
set global innodb_file_format=Barracuda;

报错:MySql Host is blocked because of many connection errors;

具体异常

MySql Host is blocked because of many connection errors; unblock with ‘mysqladmin flush-hosts’

  • 原因分析:

查看 tomcat 的日志文件,发现在报错开始部分出现了这个错误。经过查询,发现这个错误的 原因 是:同一个 ip 在短时间内产生太多(超过 mysql 数据库 maxconnectionerrors 的最大值)中断的数据库连接而导致的阻塞。

  • 解决方法:

进入 CentOS7 服务器:

  • 方法一:提高允许的maxconnectionerrors数量(治标不治本):
  1. 进入 Mysql 数据库查看 maxconnectionerrors: show variables like ‘%max_connection_errors%’;
  2. 修改 maxconnectionerrors 的数量为 1000: set global max_connect_errors = 1000;
  3. 查看是否修改成功:show variables like ‘%max_connection_errors%’;
  • 方法二:使用 mysqladmin flush-hosts 命令清理一下 hosts 文件:
  1. 查找 mysqladmin 的路径:whereis mysqladmin
  2. 执行命令,如:/usr/local/mysql5.5.35/bin/mysqladmin -uroot -pyourpwd flush-hosts

注: 方法二清理 hosts 文件,也可以直接进入 mysql 数据库执行命令:mysql> flush hosts;

回到◀疯狂创客圈▶

疯狂创客圈 - Java高并发研习社群,为大家开启大厂之门

你可能感兴趣的:(java)