Mysql8.0.12 安装配置(Centos7)

尝试用源码安装mysql 在启动时出错
其中有一项

mysqld_safe mysqld from pid file /var/run/mysql/mysql.pid ended

网上所有方法都试过了,各种花式报错......
最终用rpm成功安装,贴出步骤:

  1. 安装前清理原有的mysql数据库
  2. 下载mysql.rpm
  3. 安装yum源
  4. 更新yum源
  5. 安装MySQL并启动
  6. 启动 | 设置密码
  7. 设置远程连接
  8. 遇到的问题
  9. 常用命令

安装前清理原有的mysql数据库

  • 安装前清理原有的mysql数据库
rpm -qa | grep mysql
# 可能显示查找结果如下:
mysql80-community-release-el7-1.noarch
mysql-community-server-8.0.11-1.el7.x86_64
mysql-community-common-8.0.111.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
# 可能显示结果如下
/etc/selinux/targeted/active/modules/100/mysql
/usr/lib64/mysql
/usr/share/mysql
# 依次 对配置文件进行删除
rm -rf /etc/selinux/targeted/active/modules/100/mysql
rm -rf /usr/lib64/mysql
rm -rf /usr/share/mysql
  • 删除CentOS7默认的数据库mariadb
#查找mariadb
rpm -qa | grep mariadb
#可能出现的结果
mariadb-libs-5.5.56-2.el7.x86_64
#将查找出来的结果进行强制删除
rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

下载mysql.rpm

  • 下载rpm包到windows 并拷贝到Centos任意目录下 (我的在 /usr/src/)

Mysql下载地址

安装yum源

  • 首先进入到rpm目录下
cd /usr/src/
  • 安装
yum localinstall mysql80-community-release-el7-1.noarch.rpm

更新yum源

yum clean all
yum makecache

安装MySQL

yum install mysql-community-server

总计:389 M
总下载量:349 M
安装大小:1.7 G
安装过程中需要用户输入 y 确认


启动 | 设置密码

  • 启动
systemctl start mysqld
  • 查看默认密码
cat /var/log/mysqld.log | grep password
  • 登陆Mysql ,提示输入默认密码并登陆
mysql -u root -p
  • 修改密码, 只为测试密码不想设得太复杂,譬如只想设置root的密码为root
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirement

但是报错: 您的密码不符合当前的要求,密码必须包含数字大小写字母与标点符号类似与默认密码那样

原因: MySQL5.6.6版本之后增加了密码强度验证插件validate_password,相关参数设置的较为严格

解决方法:

  • 修改validate_password_policy密码验证类型
# Mysql 8.0版本
mysql> set global validate_password.policy=0;
# 其他版本
mysql> set global validate_password_policy=0;

validate_password_policy有以下取值:

Policy Tests Performed
0 or LOW Length
1 or MEDIUM Length; numeric, lowercase/uppercase, and special characters
2 or STRONG Length; numeric, lowercase/uppercase, and special characters; dictionary file

默认是1,即MEDIUM,所以刚开始设置的密码必须符合长度(Length),且必须含有数字(numeric),小写或大写字母(lowercase/uppercase),特殊字符(special characters)

  • 修改密码至少要包含的小写字母个数和大写字母个数
# Mysql 8.0版本
mysql> set global validate_password.mixed_case_count=2;
# 其他版本
mysql> set global validate_password_mixed_case_count=2;
  • 修改密码至少要包含的数字个数
# Mysql 8.0版本
mysql> set global validate_password.number_count=0;
# 其他版本
mysql> set global validate_password_number_count=0;
  • 修改密码至少要包含的特殊字符的个数
# Mysql 8.0版本
mysql> set global validate_password.special_char_count=0;
# 其他版本
mysql> set global validate_password_special_char_count=0;
  • 密码最小长度,参数默认为8,它有最小值的限制
    最小值为:validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)
    数字个数+特殊字符个数+2倍的大小写字母个数
# Mysql 8.0版本
mysql> set global validate_password.length=4;
# 其他版本
mysql> set global validate_password_length=4;
  • 设置完成后可通过命令查看
mysql> SHOW VARIABLES LIKE 'validate_password%';
  • 再次修改密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

仍然报错密码不符合规范
奇怪了!!!将密码改为5位
ALTER USER 'root'@'localhost' IDENTIFIED BY 'roots';
修改成功
原因可能是密码为字母时validate_password.length默认必须大于4
经过测试数字不存在此问题
为了测试方便我将 validate_password.length设置为4,其他全部设置为0,这样数字,字母都没有限制了,只要密码长度大于4位就可以了


设置远程连接

第一步. 检查开启Centos 3306端口
第二步. 开启Mysql的远程登陆

  • 检查开启Centos3306 端口
    centos未开启3306端口Navicat会报错10060
  • 判断防火墙并开启3306端口
    centos7以后默认使用的防火墙应该是firewall,而不是iptables
    首先确认防火墙类型是firewall还是iptables
[root@dajia sysconfig]# service iptables status
Redirecting to /bin/systemctl status iptables.service
Unit iptables.service could not be found.
[root@dajia sysconfig]# firewall-cmd --state
running

说明服务器使用的是firewall防火墙,列一些常用命令

命令 说明
systemctl status firewalld 查看firewall服务状态
firewall-cmd --state 查看firewall的状态
service firewalld start 开启
service firewalld restart 重启
service firewalld stop 关闭
firewall-cmd --list-all 查看防火墙规则
firewall-cmd --query-port=3306/tcp 查询3306端口是否开放
firewall-cmd --permanent --add-port=3306/tcp 开放3306端口 (permanent表示设置为持久)
firewall-cmd --permanent --remove-port=3306/tcp 移除端口
firewall-cmd --reload 重启防火墙(修改配置后要重启防火墙)
systemctl stop firewalld.service
systemctl disable firewalld.service
停止+取消开机启动(永久关闭)

顺便介绍一下iptables防火墙命令

命令 说明
service iptables status 查看防火墙状态
service iptables stop 停止防火墙
service iptables start 启动防火墙
service iptables restart 重启防火墙
chkconfig iptables off 永久关闭防火墙
chkconfig iptables on 永久关闭后再次重启
vi /etc/sysconfig/iptables 下加入 开启3306端口
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 保存&重启
  • 判断3306端口状态 、开启3306端口、重启防火墙
[root@dajia ~]# firewall-cmd --query-port=3306/tcp
no
[root@dajia ~]# firewall-cmd --permanent --add-port=3306/tcp
success
[root@dajia ~]# firewall-cmd --reload
success
  • 再次登陆显示 1130

此时是MySql没有开启远程远程登陆

  • 开启MySql远程登陆
mysql> use mysql;
# 将host字段的值改为%就表示在任何客户端机器上能以root用户登录到mysql服务器,建议在开发时设为%
mysql> update user set host='%' where user='root';
# 刷新权限
mysql> FLUSH PRIVILEGES;
# 授权用户名的权限,赋予任何主机访问数据的权限
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# 刷新权限
mysql> FLUSH PRIVILEGES;
  • 再次登陆显示 2059

这个错误应该是密码加密方式有问题,执行以下命令

#修改加密规则 (这行可忽略)
ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 
#刷新权限
FLUSH PRIVILEGES; 
#更新一下用户的密码 
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'yourpasswd'; 
#刷新权限
FLUSH PRIVILEGES; 

遇到的问题

报错2013

  • 原因: mysql开启了DNS的反向解析功能,这样mysql对连接的客户端会进行DNS主机名查找。

  • 解决方案:
    ①.找到my.cnf文件 并编辑

find / -name my.cnf
vi my.cnf

②.在mysqld下(末尾)添加skip-name-resolve
③.保存、重启服务systemctl restart mysqld.service

常用命令

  • 启动mysql服务
    systemctl start mysqld.service

  • 停止mysql服务
    systemctl stop mysqld.service

  • 重启mysql服务
    systemctl restart mysqld.service

  • 查看mysql服务当前状态
    systemctl status mysqld.service

  • 设置mysql服务开机自启动
    systemctl enable mysqld.service

  • 停止mysql服务开机自启动
    systemctl disable mysqld.service

OK了,到这里总算告一段落了!

你可能感兴趣的:(Mysql8.0.12 安装配置(Centos7))