MySQL
被 Oracle
收购后,CentOS
的镜像仓库中提供的默认的数据库也变为了 MariaDB
,
那如何在 CentOS
上如何安装 MySQL
呢?
现在一般都是用 Docker
, 跑个 MySQL
:
docker run -d --name mysql8 -e MYSQL_ROOT_PASSWORD=root -p 3306:3306 mysql:8
.
本文安装的是
MySQL8
# CentOS7 阿里源
sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
sudo yum update -y
# centos7
# 下载mysql的rpm包: https://dev.mysql.com/downloads/repo/yum/
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
# 安装rpm包
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
# 安装MySQL
sudo yum install mysql-community-server
# 启动MySQL
sudo service mysqld start
# 查看MySQL状态
# service mysqld status
# 获取临时密码
sudo cat /var/log/mysqld.log | grep 'temporary password'
> 2019-10-28T04:31:58.792853Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: SAUraYtA3h+s
# MySQL 配置文件
# mysql --help
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf
# 进入MySQL
mysql -uroot -p
# 查看当前安全变量值, PS: 这是我修改后的查看的, MySQL8要在修改临时密码后才可以执行下面的命令
# 另外, MySQL57 用的是下划线, 例如: validate_password_policy
mysql> show variables like 'validate_password%';
+--------------------------------------+--------+
| Variable_name | Value |
+--------------------------------------+--------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM |
| validate_password.special_char_count | 1 |
+--------------------------------------+--------+
7 rows in set (0.01 sec)
# 设置密码策略, validate_password.policy
# 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
# global: 全局配置, 但是在MySQL重启后配合
mysql> set global validate_password.policy = 0;
# 设置密码至少4位, validate_password.length
mysql> set global validate_password.length = 4;
# 成功修改密码为 123456
mysql> alter user 'root'@'localhost' identified by '123456'
mysql> select user, host, authentication_string from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
# 设置所有的IP都可以连接MySQL
mysql> update user set host = '%' where user = 'root';
mysql> select user, host, plugin from user;
+------------------+-----------+-----------------------+
| user | host | plugin |
+------------------+-----------+-----------------------+
| root | % | mysql_native_password |
| mysql.infoschema | localhost | caching_sha2_password |
| mysql.session | localhost | caching_sha2_password |
| mysql.sys | localhost | caching_sha2_password |
+------------------+-----------+-----------------------+
4 rows in set (0.00 sec)
# 图形化工具(Navicat)无法连接数据库
# MySQL8 的密码认证插件: caching_sha2_password
# MySQL57: mysql_native_password
mysql> alter user 'root'@'%' identified with mysql_native_password by '123456';
# 上面的命令会出现问题: ERROR 1524 (HY000): Plugin 'mysql_native_plugin' is not loaded
# 通过下面的命令设置认证插件
mysql> update user set plugin='mysql_native_password' where user = 'root';
mysql> alter user 'root'@'%' identified by '123456';
mysql> flush privileges;
mysql> exit
参考: