centos7下使用yum安装mysql
安装前准备
- 检查系统中是否安装了mysql
rpm -qa|grep mysql
- 如果有安装mysql,则需要先卸载之前安装的mysql
yum -y remove mysql
- 然后再查看mysql是否都卸载完成,如果还有没卸载完成的,则单独卸载
yum -y remove mysql-libs-5.1.73-8.el6_8.x86_64
安装mysql5.7
CentOS7的yum源中默认好像是没有mysql的。为了解决这个问题,我们要先下载mysql的repo源。(注意root用户权限问题)
- 下载mysql的repo源
mysql5.6:mysql-community-release-el7-5.noarch.rpm
mysql5.7:mysql57-community-release-el7-8.noarch.rpm
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
- 安装mysql57-community-release-el7-8.noarch.rpm包
rpm -ivh mysql57-community-release-el7-8.noarch.rpm
安装这个包后,会获得两个mysql的yum repo源:
/etc/yum.repos.d/mysql-community.repo 和 /etc/yum.repos.d/mysql-community-source.repo。 - 安装mysql
yum install mysql-server
根据步骤安装就可以了,不过安装完成后,没有密码,需要重置密码。 - 重置密码
重置密码前,首先要登录
mysql -u root -p
登录时有可能报这样的错:ERROR 2002 (HY000):
Can‘t connect to local MySQL server through socket ‘var/lib/mysql/mysql.sock’
解决方法:
方法一. 下面的命令把/var/lib/mysql的拥有者改为当前用户:
chown -R 当前用户 /var/lib/mysql
方法二. 删除/var/lib/mysql /后重启MySQL服务就可以了!
rm -rf /var/lib/mysql
然后,重启服务:
service mysqld restart
重启成功后查看服务状态:
service mysqld status
接下来登录重置密码:
注意:yum安装的MySQL5.7登录前是有一个随机的临时密码的,我们需要先取得这个随机密码,以用于登录 MySQL 服务端;而使用MySQL5.6源安装的MySQL是没有临时密码的无需输入密码就可以登录。
获取临时随机密码:
cat /var/log/mysqld.log | grep password
将会返回如下内容,末尾字符串就是密码,把它复制下来:
A temporary password is generated for root@localhost: MkarQyrS6v/U
MkarQyrS6v/U 就是root登录的密码了。
接下来可以登录进去,但是你会发现:登陆到MySQL服务器,不管你执行什么命令都报这个错
通过一番折腾:他是要你修改密码(而且只能使用ALTER USER修改),才能有权限使用MySQLmysql> show databases; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql> use test; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. ... ...
alter user user() identified by "123456";
那就修改吧,但是你会发现它又报错了,密码策略问题异常信息:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
解决办法:
1、查看 mysql 初始的密码策略,
输入语句SHOW VARIABLES LIKE 'validate_password%';
进行查看,
2、首先需要设置密码的验证强度等级,设置 validate_password_policy 的全局参数为 LOW 即可,
输入设值语句set global validate_password_policy=LOW;
进行设值,
3、当前密码长度为 8 ,如果不介意的话就不用修改了,按照通用的来讲,设置为 6 位的密码,设置 validate_password_length 的全局参数为 6 即可,
输入设值语句set global validate_password_length=6;
进行设值,
4、现在可以为 mysql 设置简单密码了,只要满足六位的长度即可,
输入修改语句ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
可以看到修改成功,表示密码策略修改成功了!!!
注:在默认密码的长度最小值为 4 ,由 大/小写字母各一个 + 阿拉伯数字一个 + 特殊字符一个
关于 mysql 密码策略相关参数;
1)、validate_password_length 固定密码的总长度;
2)、validate_password_dictionary_file 指定密码验证的文件路径;
3)、validate_password_mixed_case_count 整个密码中至少要包含大/小写字母的总个数;
4)、validate_password_number_count 整个密码中至少要包含阿拉伯数字的个数;
5)、validate_password_policy 指定密码的强度验证等级,默认为 MEDIUM;
关于 validate_password_policy 的取值:
0/LOW:只验证长度;
1/MEDIUM:验证长度、数字、大小写、特殊字符;
2/STRONG:验证长度、数字、大小写、特殊字符、字典文件;
6)、validate_password_special_char_count 整个密码中至少要包含特殊字符的个数;
MySQL语句修改密码
通过一番折腾再折腾后,我们就可以使用正常的MySQL语句修改密码:
mysql> use mysql;
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit
然后你会发现又报错了:Unknown column ‘password’ in ‘field list’,
原来是mysql数据库下已经没有password这个字段了,password 字段改成了 authentication_string
所以更改语句替换为update user set authentication_string=password(“你的新密码”) where user=“root”;即可
MySQL远程登录授权
MySQL远程登录授权问题:
设置用户 root 可以在任意 IP 下被访问:
grant all privileges on *.* to root@"%" identified by "new password";
移除用户 root 允许被远程访问:
REVOKE ALL PRIVILEGES ON *.* FROM root@'%';
如果你想允许用户root从ip为192.168.1.3的主机连接到mysql服务器,并使用mypassword作为密码
grant all privileges on *.* to root@"192.168.1.3" identified by "new fpassword" with grant option;
移除用户 root 允许被ip为192.168.1.3的主机远程访问:
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'192.168.1.3';
删除之前设置的远程登录信息(user,ip,password)
mysql> use mysql;
mysql> select host,user from user where user='root';
mysql> delete from user where user='root' and host='192.168.1.3';
mysql> flush privileges;
mysql> select host,user from user where user='root';#可以看到已经删除了
如果移除远程访问的授权后还可以远程登录。则进行删除需要移除的信息。
刷新权限使之生效:
flush privileges;
使用shell脚本一键安装MySQL5.7
如果不是在线上环境安装mysql,我们可以使用docker快捷搭建MySQL环境。
docker的具体使用可以参考我的另一篇文章:http://qkongtao.cn/?p=587
接下来要介绍的是使用shell脚本一键部署docker环境,并且安装MySQL5.7
步骤如下:
- 在Linux目录下面新建文件 docker_install_mysql.sh
vi docker_install_mysql.sh
- 直接上代码
#!/bin/bash
# description: CentOS7安装Docker
# author: tao
# 卸载旧版本
if [ -n "$1" ]; then
# 校验传入参数
if [ "$1" = "-r" ]
then
echo "开始卸载已有Docker服务..."
systemctl stop docker
yum -y remove docker-ce
rm -rf /var/lib/docker
yum -y remove docker docker-common docker-selinux docker-engine
else
echo " "
echo "=================================="
echo "=============安装失败============="
echo "=================================="
echo "非法参数:$1"
echo "=================================="
echo "首次安装:./docker-install.sh"
echo "重新安装:./docker-install.sh -r"
echo "=================================="
echo " "
fi
fi
echo "开始安装Docker服务..."
# 安装需要的软件包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 设置stable镜像仓库
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 更新yum软件索引
yum makecache fast
# 安装Docker-ce
yum -y install docker-ce
# 启动Docker
systemctl start docker
# 开机自启
systemctl enable docker
# 配置Docker镜像加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://c2yf9ia3.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
echo " "
echo "=================================="
echo "=============安装成功============="
echo "=================================="
echo " "
docker ps
# description: 更换Centos7默认镜像源为阿里源
cd /etc/yum.repos.d/
# 备份原配置
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
# 下载阿里镜像配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
echo " "
echo "=================="
echo "更换阿里镜像源成功"
echo "=================="
echo " "
# 重新生成缓存
yum makecache
# description: 使用Docker安装Mysql5.7
version=5.7
password=123456
port=3306
if [[ $1 == -v* ]];then
version=${1:2}
elif [[ $1 == -P* ]];then
password=${1:2}
elif [[ $1 == -p* ]];then
port=${1:2}
fi
if [[ $2 == -v* ]];then
version=${2:2}
elif [[ $2 == -P* ]];then
password=${2:2}
elif [[ $2 == -p* ]];then
port=${2:2}
fi
if [[ $3 == -v* ]];then
version=${3:2}
elif [[ $3 == -P* ]];then
password=${3:2}
elif [[ $3 == -p* ]];then
port=${3:2}
fi
echo " "
echo "============================"
echo "=======开始安装MySQL========"
echo "============================"
echo "Version:$version"
echo "Password:$password"
echo "Port:$port"
echo "============================"
echo " "
# 拉去镜像
docker pull mysql:$version
# 运行镜像
docker run --restart=always -p $port:3306 --name mysql$version -e MYSQL_ROOT_PASSWORD=$password -d mysql:$version
echo "============================"
echo "=======安装MySQL成功========"
echo "============================"
docker ps
-
修改文件权限
chmod -R 755 docker_install_mysql.sh
-
允许脚本
./docker_install_mysql.sh
-
然后就可以喝口水坐等一键安装部署
安装后就可以进行MySQL远程连接使用了。