尝试用源码安装mysql 在启动时出错
其中有一项
mysqld_safe mysqld from pid file /var/run/mysql/mysql.pid ended
网上所有方法都试过了,各种花式报错......
最终用rpm成功安装,贴出步骤:
- 安装前清理原有的mysql数据库
- 下载mysql.rpm
- 安装yum源
- 更新yum源
- 安装MySQL并启动
- 启动 | 设置密码
- 设置远程连接
- 遇到的问题
- 常用命令
安装前清理原有的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