Bootstrap

Centos7安装mysql8.0教程

一、卸载MySQL

1、关闭MySQL

service mysqld stop

2、查看安装的MySQL

rpm -qa|grep -i mysql

在这里插入图片描述

3、卸载安装的MySQL

rpm -ev mysql-community-client-8.0.11-1.el7.x86_64 --nodeps
rpm -ev mysql-community-common-8.0.11-1.el7.x86_64 --nodeps
rpm -ev mysql-community-server-8.0.11-1.el7.x86_64  --nodeps
rpm -ev mysql-community-libs-8.0.11-1.el7.x86_64 --nodeps

4、删除MySQL相关目录

find / -name mysql
rm -rf /var/lib/mysql/
rm -rf /usr/lib64/mysql
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /etc/selinux/targeted/tmp/modules/100/mysql

在这里插入图片描述

5、删除my.cnf

rm -rf /etc/my.cnf

6、删除MySQL的默认密码

rm -rf /root/.mysql_sercret

7、检查卸载情况

rpm -qa|grep -i mysql

8、删除mariadb 的安装包

rpm -qa | grep mariadb
rpm -e mariadb-libs-5.5.60-1.el7_5.x86_64 --nodeps 卸载mariadb

二、在线安装

1、配置Mysql 8.0安装源

sudo rpm -Uvh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

2、安装Mysql 8.0

sudo yum --enablerepo=mysql80-community install mysql-community-server

提示下载插件选择:y
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

看到(完毕)表示已经安装完了。

三、本地安装

1、下载MySQL安装包到本地

下载链接:https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar

2、在/usr/local目录下新建目录MySQL

cd /usr/local
mkdir mysql
cd mysql

3、上传安装包

1、点击【传输】->点击【ZmoDem上传列表】->选择安装包点击确定->【开始ZmoDem上传】
2、或者:在/usr/local/mysql目录下使用rz -be命令上传mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar

在这里插入图片描述

4、安装MySQL程序包

tar -xvf mysql-8.0.11-1.el7.x86_64.rpm-bundle.tar
得到文件如下图:

在这里插入图片描述

2、 rpm -ivh mysql-community-common-8.0.11-1.el7.x86_64.rpm --nodeps --force 命令安装 common;
依次: libs,client,server

rpm -ivh mysql-community-common-8.0.11-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-libs-8.0.11-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-client-8.0.11-1.el7.x86_64.rpm --nodeps --force
rpm -ivh mysql-community-server-8.0.11-1.el7.x86_64.rpm --nodeps --force

在这里插入图片描述

5、查看已安装的MySQL

rpm -qa | grep mysql

6、初始化

mysqld --user=mysql --lower-case-table-names=1 --initialize-insecure --datadir=/var/lib/mysql;
chown mysql:mysql /var/lib/mysql -R;

1、初始化加上lower-case-table-names=1为了设置mysql不区分大小写
2、如果初始化报错:error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
该报错表示提示没有这个共享库:libaio,libaio包的作用是为了支持同步I/O。对于数据库之类的系统特别重要,因此在linux上安装数据库软件,就需要安装libaio,命令如下:
yum -y install libaio
出现Complete!则表示安装成功,安装完成后再执行初始化命令。
3、最后去修改my.cnf文件,加上lower-case-table-names=1

 vi /etc/my.cnf
 按[i]进入可编辑状态
 在[mysqld]下加入一行:lower_case_table_names=1
 按[Esc]后按[:wq]写入文件

四、启动MySQL

1.启动mysql服务

在线启动:

sudo service mysqld start
关闭mysql服务
service mysqld stop

等待运行结束

本地启动:

systemctl start mysqld;

2、查看mysql服务运行状态

service mysqld status

在这里插入图片描述

3、查看root临时密码

grep "A temporary password" /var/log/mysqld.log;
cat /var/log/mysqld.log | grep password

在这里插入图片描述

4、更改临时密码

mysql -uroot -p
提示输入密码,输入临时密码后显示登录成功
然后执行语句:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';
若提示ERROR 1819 (HY000): Your password does not satisfy the current policy requirements(密码不符合当前策略)
修改密码策略,一般为大小写字母+数字+特殊符号

在这里插入图片描述
在这里插入图片描述

5、配置远程访问

查看默认mysql用户
输入:use mysql;
输入:select host, user, authentication_string, plugin from user;
发现root的host是localhost,不是%,可以加个host是%的root账号:
输入:CREATE USER 'root'@'%' IDENTIFIED BY 'Sed123456+';
create user 'root'@'%' identified with mysql_native_password by 'Sed123456+';
若创建错误,提供删除语句:
输入:Delete FROM user Where User='root' and Host='%';
然后为用户授权:
grant all privileges on *.* to 'root'@'%';
最后刷新权限:flush privileges;
退出mysql:
quit;

用navicat配置远程连接数据库时有可能会报如下错误,这是由于mysql配置了不支持远程连接引起的:
1130 - Host ‘windows-7.shared’ is not allowed to connect to this MySQL server
将Host设置为通配符%
Host列指定了允许用户登录所使用的IP,比如user=root Host=192.168.1.1。这里的意思就是说root用户只能通过192.168.1.1的客户端去访问。 user=root Host=localhost,表示只能通过本机客户端去访问。而%是个通配符,如果Host=192.168.1.%,那么就表示只要是IP地址前缀为“192.168.1.”的客户端都可以连接。如果Host=%,表示所有IP都有连接权限。
注意:在生产环境下不能为了省事将host设置为%,这样做会存在安全问题,具体的设置可以根据生产环境的IP进行设置;

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6、开启防火墙3306端口

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

7、客户端连接mysql报错

MySQL 8.0 配置mysql_native_password身份验证插件的密码

登录MySQL后输入:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword';

8、mysql数据库不区分大小写表名

修改/etc/my.cnf文件中的lower_case_table_names值:
其中0:区分大小写,1:不区分大小写
需要在安装MySQL时写入lower_case_table_names=1,否则无效

输入:vim /etc/my.cnf
按[i]进入可编辑状态
在[mysqld]下加入一行:lower_case_table_names=1
按[Esc]后按[:wq]写入文件
重启数据库:service mysqld restart
#==========================================
如果登录用户没有修改权限:
# 将目录/etc 及其下面的所有文件、子目录的owner用户改成 root01
chown -R root01:root01 /etc
#给目录opt设置权限
chmod 760 /etc

五、MySQL命令

查看MySQL版本

mysql -V

数据库命令

#创建一个数据库dsm
create database dsm;
#查看所有数据库
show databases;
#切换到mysql数据库
use mysql;
#查看数据库中所有表
show tables;
#执行sql文件
source /home/sql/test.sql;

六、MySQL配置

1、报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column…

修改 my.cnf 文件的 sql_mode (一次性解决问题)

查找 my.cnf 文件: find / -name my.cnf 或者 whereis my.cnf
获取 sql_mode字段内容: SELECT @@sql_mode;
去掉 sql_mode字段中的 only_full_group_by
编辑 my.cnf: vim /etc/my.cnf 将上一步骤的 sql_mode 字段内容添加至 my.cnf
保存,重启: service mysqld restart
sql_mode 字段参考:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

2、MySQL中Java写入时间少14小时

查看时区

mysql> show variables like '%time_zone%';
+------------------+--------+
| Variable_name    | Value  |
+------------------+--------+
| system_time_zone | CST    |
| time_zone        | SYSTEM |
+------------------+--------+
2 rows in set (0.02 sec)

java写入时间少14小时。这是因为:在解析成预编译语句的时候,误将CST(China Standard Time utc+8)解析成CST(Central Standard Tim UTC-6),美国中部标准时间,所以少14个小时。
可以通过修改my.cnf
在 [mysqld] 之下加
default-time-zone=timezone
来修改时区。如:
default-time-zone = ‘+8:00’
修改完了记得记得重启MySQL
重启MySQL:service mysqld restart

#北京时间
default-time-zone = '+8:00'
;