1、安装包准备
去官网下载(MySQL :: Download MySQL Community Server)对应系统以及版本的安装包,
2、卸载旧版
# rpm -qa|grep mariadb
mariadb-libs-5.5.52-1.el7.x86_64
#rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
3、解压安装包文件
tar xvf mysql-8.0.12-1.el7.x86_64.rpm-bundle.tar
4、安装数据库
rpm -ivh mysql-community-common-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-compat-8.0.12-1.el7.x86_64.rpm
5、初始化数据库
mysqld --initialize --user=mysql
6、启动数据库
systemctl start mysqld
7、设置开机自动启动并查看是否设置成功
systemctl enable mysqld
systemctl is-enabled mysqld
8、查看密码
grep 'temporary password' /var/log/mysqld.log
9、登录重置root@localhost密码
利用第8步获取到的MySQL初始密码登录MySQL
set password="gm%nhC5CW7qSEB7W";
10、修改MySQL密码认证插件方式
MySQL 8 采用新的认证插件,使用旧版本的客户端会无法连接
处理方法:
alter user root@'%' identified WITH mysql_native_password by '9C%wke?gjQA*4';
alter user root@'%' identified WITH by '6Y*.uVe&l!tY';
ALTER USER 'root'@'%' IDENTIFIED BY 'Ai%7KP+L$8exgJqi' PASSWORD EXPIRE NEVER;
create user root@'%' identified with mysql_native_password by 'SHqaJqG25J($rRKz';
注:mysql8.0默认使用caching_sha2_password身份验证机制——从原来的 mysql_native_password更改为 caching_sha2_password。
从 5.7 升级 8.0 版本的不会改变现有用户的身份验证方法,但新用户会默认使用新的 caching_sha2_password 。客户端不支持新的加密方式。
方法之一,修改用户的密码和加密方式
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
[mysqld]
default_authentication_plugin=mysql_native_password
11、修改mysql时区
查看mysql当前时间:select curtime(); 或 select now();
查看mysql当前时区:show variables like "%time_zone%";
1.临时修改
#修改mysql全局时区为北京时间,即我们所在的东8区:set global time_zone = '+8:00';
#修改当前会话时区:set time_zone = '+8:00';
#立即生效:flush privileges;
2.通过修改my.cnf配置文件来修改时区
vim /etc/my.cnf
##在[mysqld]区域中加上
default-time_zone = '+8:00'
重启mysql使新时区生效
3.初始化mysql时修改
如果不方便重启mysql,又想临时解决时区问题,可以通过php或其他语言在初始化mysql时初始化mysql时区这里,以php为例,在mysql_connect()下使用:
mysql_query("SET time_zone = '+8:00'")
这句代码的作用是在mysql连接时,就会将时区的参数设置为东8区,也就是北京时间。但需要注意的是,这样只能解决mysql在时间上的问题,但mysql的某些系统函数仍然不能使用,如now()等。