环境
CentOS7 安装mysql8 步骤;
window下的Navicat 连接MySql8;
第一部分 CentOS7安装mysql8
1.1 安装前清理工作;
1.1.1 清理原有的mysql数据库;
使用以下命令查找出安装的mysql软件包和依赖包:
rpm -pa | grep mysql
显示结果如下:
mysql80-community-release-el7-1.noarch
mysql-community-server-8.0.11-1.el7.x86_64
mysql-community-common-8.0.11-1.el7.x86_64
mysql-community-libs-8.0.11-1.el7.x86_64
mysql-community-client-8.0.11-1.el7.x86_64
使用以下命令依次删除上面的程序
yum remove mysql-xxx-xxx-
删除mysql的配置文件,卸载不会自动删除配置文件,首先使用如下命令查找出所用的配置文件;
find / -name mysql
或
whereis mysql
可能的显示结果如下:
/etc/logrotate.d/mysql/etc/selinux/targeted/active/modules/100/mysql/etc/selinux/targeted/tmp/modules/100/mysql/var/lib/mysql/var/lib/mysql/mysql/usr/bin/mysql/usr/lib64/mysql/usr/local/mysql
根据需求使用以下命令 依次 对配置文件进行删除
rm -rf /var/lib/mysql
注意:卸载后/etc/my.cnf不会删除,需要进行手工删除
rm -rf /etc/my.cnf
1.1.2 删除MariaDB的文件,
由于MySQL在CentOS7中收费了,所以已经不支持MySQL了,取而代之在CentOS7内部集成了mariadb,而安装MySQL的话会和MariaDB的文件冲突,所以需要先卸载掉MariaDB.
使用rpm 命令查找出要删除的mariadb文件;
rpm -pa | grep mariadb
可能的显示结果如下:
mariadb-libs-5.5.56-2.el7.x86_64
删除上面的程序
rpm -e mariadb-libs-5.5.56-2.el7.x86_64
可能出现错误提示如下:
依赖检测失败:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
使用强制删除:
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
至此就将原来有的mysql 和mariadb数据库删除了;
1.2 安装mysql
1.2.1 下面mysql官网提供的mysql repo源
centos的yum 源中默认是没有mysql的,所以我们需要先去官网下载mysql的repo源并安装;
mysql官网下载链接:mysql repo下载地址 如下:
1.22右键复制链接,通过wget下载
wget https://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
1.2.3 安装 yum repo文件并更新 yum 缓存;
rpm -ivh mysql57-community-release-el7-11.noarch.rpm
执行结果:
会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repo mysql-community-source.repo
更新 yum 命令
yum clean all
yum makecache
1.2.4 使用 yum安装mysql
当我们在使用yum安装mysql时,yum默认会从yum仓库中安装mysql最新的GA版本;如何选择自己的版本;
第一步: 查看mysql yum仓库中mysql版本,使用如下命令
yum repolist all | grep mysql
可以看到 MySQL 5.5 5.6 5.7为禁用状态 而MySQL 8.0为启用状态;
第二步 使用yum-config-manager 命令修改相应的版本为启用状态,其他版本为禁用状态,以mysql8为例
yum-config-manager --enable mysql80-community
或者可以编辑 mysql repo文件,
cat /etc/yum.repos.d/mysql-community.repo
将相应版本下的enabled改成 1 ,其他版本改成 0 即可;
1.2.5 安装mysql 命令如下:
yum install mysql-community-server
设置mysql不区分大小写
修改配置文件:vim /etc/my.cnf
#添加如下配置:
#只有在安装完成之后,初始化数据库之前,修改my.cnf,然后再初始化数据库才有效
#如果你不在意数据的话直接删除数据
#1 停止MySQL
#2 删除 MySQL的数据 /var/lib/mysql
#3 修改该 lower_case_table_names = 1
#4 启动 mysql
lower_case_table_names= 1
1.2.6 开启mysql 服务
systemctl start mysqld.service
1.2.7 获取初始密码登录mysql
mysql在安装后会创建一个root@locahost账户,并且把初始的密码放到了/var/log/mysqld.log文件中;
cat /var/log/mysqld.log | grep password
或
grep 'temporary password' /var/log/mysqld.log
使用初始密码登录mysql ,四个密码最后一个是登陆密码
mysql -u root -p
修改初始密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
mysql新的安全机制要求,mysql的密码必须包含英文大小写、数字以及特殊字符
查看密码策略的相关信息
show variables like ‘%password%’;
validate_password_policy:密码策略,默认为MEDIUM策略
validate_password_dictionary_file:密码策略文件,策略为STRONG才需要
validate_password_length:密码最少长度
validate_password_mixed_case_count:大小写字符长度,至少1个
validate_password_number_count :数字至少1个
validate_password_special_char_count:特殊字符至少1个
上述参数是默认策略MEDIUM的密码检查规则。
mysql主要有三种密码策略
1.2.8 在防火墙中开启3306端口
CentOS7默认使用的是firewall作为防火墙,我这里改为习惯常用的iptables防火墙
第一步: 关闭firewall防火墙
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl mask firewalld.service
第二步: 安装iptables防火墙
yum install iptables-services -y
第三步: 启动iptable防火墙
systemctl enable iptables
systemctl start iptables
第四步: 编辑防火墙增加端口 防火墙文件位置为: /etc/sysconfig/iptables
vim /etc/sysconfig/iptables
在倒数第三行上增加
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
第五步: 重启防火墙
systemctl enable iptables.service
systemctl start iptables.service
1.2.9 将mysql 服务加入开机启动项,并启动mysql进程
systemctl enable mysqld.service
systemctl start mysqld.service
常用mysql服务命令:
登录mysql
mysql-u username -p
退出mysql
quit
启动mysql
systemctl start mysqld.service
结束
systemctl stop mysqld.service
重启
systemctl restart mysqld.service
开机自启
systemctl enable mysqld.service
查看mysql版本select version();
删除mysql服务
chkconfig --list | grep -i mysql
chkconfig --del mysql
第二部分 Navicat 连接 Mysql8
2.1 开启mysql远程服务:
2.1.1 修改mysql数据库下的user表中host的值
可能是你的帐号不允许从远程登陆,只能在localhost。这个时候只要在localhost的那台电脑,登入mysql后,更改 "mysql" 数据库里的 "user" 表里的 "host" 项,从"localhost"改称"%"登录mysql数据库 执行如下命令:
mysql -u root -p
use mysql;
update userset host='%' where user='root';
select host, user, authentication_string, plugin from user;
2.1.2 使用授权的方式
赋予任何主机访问数据的权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
如果想myuser用户使用mypassword密码从任何主机连接到mysql服务器的话。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
如果你想允许用户myuser从ip为192.168.1.6的主机连接到mysql服务器,并使用mypassword作为密码
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3'IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
2.2 在使用 Navicat for Mysql连接mysql 8.0时会报如下错误:
Authentication plugin 'caching_sha2_password' cannot be loaded:
mysql8.0 引入了新特性 caching_sha2_password;这种密码加密方式客户端不支持;客户端支持的是mysql_native_password 这种加密方式;
我们可可以查看mysql 数据库中user表的 plugin字段;
可以使用命令将他修改成mysql_native_password加密模式:
update user set plugin='mysql_native_password' where user='root';
再用Navicat链接 就可以链接成功;
windows安装mysql8
1、官网下载软件MySQL8
直接点击我红色记号笔圈出的超链接,这句话的中文意思是:不用了,直接开始下载
2. 设置系统环境变量
这个不多说了百度上一堆,配置这个只是为了命令行方便...
3. 编写配置文件
如解压位置为D:\App\MySQL\mysql-8.0.11-winx64
就在此处手动创建my.ini文件,文件内容如下:
[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8
[mysqld]
#设置3306端口
port = 3306#设置mysql的安装目录
basedir=D:\App\MySQL\mysql-8.0.11-winx64
#设置mysql数据库的数据的存放目录
datadir=D:\App\MySQL\mysql-8.0.11-winx64\data
#允许最大连接数
max_connections=200#服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
注意修改安装目录与数据存放目录
4. 数据库初始化
用管理员身份运行命令行,进入安装MySQL下的bin目录输入如下命令:
自动生成root用户,可以不带密码:
mysqld --initialize-insecure
或者带随机密码:
mysqld --initialize
随机密码被保存在错误日志里,位于(前面配置好的datadir)数据文件夹下,文件名为:主机名.err
注意:如果要重新初始化,必须先清空data文件夹。(包括停止下一步的服务)
我看的教程就是没有这一步,导致:
服务无法启动。
服务器没有报告任何错误。
请键入 NET HELPMSG 3534 以获得更多的帮助。
mysqld --initialize --console
注意!执行输出结果里面有一段:
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: rI5rvf5x5G,E 其中root@localhost:后面的“rI5rvf5x5G,E”就是初始密码(不含首位空格)。在没有更改密码前,需要记住这个密码,后续登录需要用到。
5. 安装并启动服务
在命令行下执行。
安装服务:
mysqld -install
启动服务:
net start mysql
回退的时候反过来
停止、卸载服务:
net stop mysql
mysqld -remove
6. 进入MySQL
无密码进入:
mysql -u root
有密码的进入方式:
mysql -u root -p
有密码的话进去就要求输入,随机密码的话位置上面提到过了。
感动,终于看到了:
mysql>
最后说下如果客户端连接如果出现caching-sha2-password问题
解决方案如下:
首先:ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'PASSWORD EXPIRE NEVER; #修改加密规则
接着:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #更新一下用户的密码
最后:FLUSH PRIVILEGES; #刷新权限
2、客户端连接时,提示客户端版本过低(即:mysql 1521错误)
网上大部分的解决办法是使用:set password for '用户名' @ '主机名' = old_password('密码');
执行时发现old_password函数已经不支持了。。。
3、Java连接Mysql8时要注意一下几点:
1)驱动不再是com.mysql.jdbc.Driver,正确可用的应该是:com.mysql.cj.jdbc.Driver
2)注意项目引入的Mysql版本,应该是:
mysql
mysql-connector-java
8.0.11
3)如果连接仍然提示连接失败(Communications link failure),注意修改my.ini两项配置为如下:
interactive_timeout=604800wait_timeout=604800
正文完毕~~~~~下面是我的application.properties:
spring.datasource.url=jdbc:mysql://localhost:3306/wechat?serverTimezone=UTC&characterEncoding=utf8&useUnicode=true&useSSL=false
spring.datasource.username=root
spring.datasource.password=*****spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.max-idle=10spring.datasource.max-wait=10000spring.datasource.min-idle=5spring.datasource.initial-size=5server.port= 80server.session.timeout=10#防止乱码
spring.http.encoding.force=truespring.http.encoding.charset=UTF-8spring.http.encoding.enabled=trueserver.tomcat.uri-encoding=UTF-8# 配置jsp文件的位置,默认位置为:src/main/webapp
spring.mvc.view.prefix=/pages/# 配置jsp文件的后缀
spring.mvc.view.suffix=.jsp
#Mybaties
mybatis.type-aliases-package=wechatService.myb.entity
mybatis.mapper-locations=classpath:mybatis/mapper/*.xml
mybatis.config-location=classpath:mybatis/mybatis-config.xml
#cache 多个用逗号分开
spring.cache.cache-names=userCache
spring.cache.jcache.config=classpath:ehcache.xml
#LOG日志
logging.level.wechatService=WARN
logging.level.wechatService.myb.mapper=DEBUG
logging.file=logs/WeChatServer.log
Centos7重置Mysql 8的 root 密码
问题产生背景:
安装完 最新版的 mysql8后忘记了密码,想重置root密码;找了网上好多资料都不尽相同,根据自己的问题总结如下:
第一步:修改配置文件免密码登录mysql
vim /etc/my.cnf
在 [mysqld]最后加上如下语句 并保持退出文件;
skip-grant-tables
重启mysql服务:
service mysqld restart
第二步免密码登录到mysql上;直接在命令行上输入:
mysql//或者
mysql -u root -p//password直接回车
第三步: 给root用户重置密码;
首先查看当前root用户相关信息,在mysql数据库的user表中;
select host, user, authentication_string, plugin from user;
修改root密码规则和外部访问:
#不支持下面的密码格式
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
ERROR1819(HY000): Your password does not satisfy the current policy requirements
#mysql8的密码格式必须是大小写+数字+特殊字符
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'myPwd@123';
Query OK,0 rows affected (0.08sec)
mysql>
需要创建用户和配置远程访问权限
创建用户:
创建用户(myuser:用户名;%:任意ip,也可以指定,root默认就是localhost;123456:登录密码)
mysql> CREATE USER 'myuser'@'%' IDENTIFIED BY 'myPwd@123';
配置权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'IDENTIFIED BY 'myPwd@123' WITH GRANT OPTION;
修改root密码规则和允许访问的 IP 主机:
mysql> update user set host='%',plugin='mysql_native_password' where user='root';
Query OK,0 rows affected (0.32sec)
Rows matched:1 Changed: 0 Warnings: 0mysql> select host, user, authentication_string, plugin fromuser;+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| host | user | authentication_string | plugin |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
| % | root | *10FD17EEA8DD928E433A24DFFD3805DC5381D138 | mysql_native_password |
| % | zs | *10FD17EEA8DD928E433A24DFFD3805DC5381D138 | mysql_native_password |
| localhost | mysql.infoschema | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.session | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
| localhost | mysql.sys | $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED | caching_sha2_password |
+-----------+------------------+------------------------------------------------------------------------+-----------------------+
5 rows in set (0.03sec)
mysql>FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.04sec)