MySQL 安装十分详细版


一、Windows 下安装 MySQL

https://www.runoob.com/mysql/mysql-install.html

二、Linux 下安装 MySQL

1. yum 命令安装 MySQL

使用 yum 方式安装 MySQL 是最简单的,在使用压缩包安装是遇到不少问题,换用 yum 方式后简单迅速。

1.1 查看并移除旧版本 MySQL

使用命令:rpm -qa | grep -i mysql (-i,代表忽略大小写的差别)

  • 如显示已经安装的相关模块,则要先卸载,再重新安装
    • yum -y remove <全名称> :卸载相关模块:使用联合命令,将查询结果作为参数移除:yum -y remove $(rpm -qa | grep -i mysql)
      • 如果上述命令卸载不掉,则使用命令: rpm -er <全名称>
  • 如果执行后无任何变化,表示没有安装

使用命令查看是否存在 mysql yum 安装包,yum list mysql*,如果有遗留,可以使用命令删除

  • rpm -e mysql,普通删除模式
  • rpm -e --nodeps mysql,强力删除模式

使用命令:whereis mysql 查看系统中是否存在 mysql 相关文件

  • 如果存在,则使用命令删除 rm -rf …

使用命令:find / -name mysql 查看 mysql 相关文件

  • 删除无用文件

1.2 下载并安装 MySQL 服务

简单安装

  • 安装 mysql 客户端,yum install mysql
  • 安装 mysql 服务端,yum install mysql-community-server

完整安装

# ①进入/usr/local文件夹下
cd /usr/local
# ②下载.rpm文件
wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm 
# ③执行 rpm文件
rpm -ivh mysql57-community-release-el7-8.noarch.rpm 
# ④安装mysql服务(-y代表安装过程中所有提示选择为y)
yum -y install mysql-server
# 或者指定安装目录(不必要)
yum --installroot=/usr/local/mysql --releasever=/ -y install mysql-server

## 另一种快速安装方式
wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql57-community-release-el7-10.noarch.rpm
yum -y install mysql-community-server
  • 等待所有服务模块安装完成 即可

1.3 MySQL配置文件

  • 配置文件: /etc/my.cnf
  • 日志文件: /var/log/mysqld.log
  • 服务启动脚本: /usr/lib/systemd/system/mysqld.service
  • socket文件: /var/run/mysqld/mysqld.pid
  • 添加mysql配置内容:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
server_id = 1
expire_logs_days = 3

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
  • 查看 mysql 的编码信息,登录mysql后,使用命令show variables like 'character_set%';
  • 设置 mysql 的默认字符集,在/etc/my.cnf文件中,增加 default-character-set=utf-8
[mysqld]
character-set-server=utf8 
[client]
default-character-set=utf8 
[mysql]
default-character-set=utf8

1.4 MySQL服务相关命令

  • systemctl start mysqld.service:开启 mysql 服务
  • systemctl status mysqld.service:查看 mysql 服务状态,
    • -l:查看详细状态信息
  • systemctl stop mysqld.service:停止 mysql 服务
  • systemctl restart mysqld.service:重启mysql服务
  • systemctl enable mysqld:设置mysql开机自启动
  • systemctl daemon-reload:作为守护进程开启

1.5 MySQL 密码修改

查看随机生成密码

安装mysql后,会在相应的日志文件中产生一个随机密码,可以使用命令查看:

  • cat /var/log/mysqld.log :查看日志文件全部内容
  • grep “password” /var/log/mysqld.log :使用正则匹配日志文件中的password关键字
跳过密码认证

随机密码登录失败时,需要配置跳过认证阶段,登录后使用sql语句更新密码

  • vi /etc/my.cnf:修改配置文件,添加skip-grant-tables后保存退出,表示登录不验证
    • mysqld_safe –skip-grant-tables –skip-networking& 命令效果相同
  • 重启mysql服务,使用mysql直接登录mysql客户端
使用sql语句修改登录密码
  • mysql -u root -p:使用命令登录mysql,命令回车后输入日志中密码,登录mysql
  • ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘xxxxxxxx’; 修改root账户的密码为xxxxxxxx
    • 如果是 skip-grant-tables 情况下执行该语句,会提示不可以执行
      • 可以使用更新 user 表中密码数据的方式:
      • update mysql.user set authentication_string=PASSWORD(‘newPassword’) where USER=’root’; 更新密码
      • flush privileges; 刷新权限表
  • 默认密码策略要求密码是大小写字母+数字+特殊字符的组合且最少8位
  • 密码修改完成后,退出,使用新密码重新登录

1.6 允许远程登录

1.6.1 设置允许其他端、navicate 远程连接。
  • mysql 中开启远程访问权限,mysql 库中的 user 表新增一条记录 host 为“%”,user为“root”。
# 连接客户端(远程登录限制)
mysql -u root -p Root@2020  
mysql> use mysql;

# 查看 root 用户信息,host = localhost 表示只可以本地连接,不可以远程连接
select * from user where user ='root';

update user set host = '%' where user = 'root';
# 或者是下面命令
# ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'Root@2021';
# 如果上句运行失败,则使用下面命令
# mysql> grant all on *.* to root@"%" identified by "Root@2021";
mysql> flush privileges;
1.6.2 检查 Linux 防火墙设置

MySQL 默认占用端口号为 3306,因此需要

  1. 如果是云服务器,则要在安全组中开放 3306 端口
  2. 服务器防火墙开放 3306 端口
# 查看firewalld状态,dead 状态代表防火墙未开启,active代表已开启
systemctl status firewalld
# 查看防火墙是否已开放3306端口
firewall-cmd --query-port=3306/tcp
# 设置3306端口为永久开放
firewall-cmd --add-port=3306/tcp --permanent

# 设置后重启防火墙(设置了新的端口记得先关闭,再重启)
systemctl restart firewalld

1.7 yum 安装常见问题

1.7.1 wget 下载失败

Cannot write to ‘mysql57-community-release-el7-8.noarch.rpm’ (Permission denied).

表示下载文件时权限不够,可以加 sudo 命令或使用 su root 切换至管理器权限下载文件

1.7.2 速度慢,换镜像

修改CentOS 默认 yum 源为国内yum镜像源

  1. 修改为163镜像源
    • 备份yum源文件,mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
  1. 修改为阿里云镜像源
1.7.3 安装报错:No package mysql-server available.

CentOS7 安装 mysql 报错:No package mysql-server available. Error: Nothing to do

报错原因:CentOS7 自带 MariaDB 而不是 MySQL,MariaDB 和 MySQL 一样也是开元的数据库,可以使用 yum -y install mariadb-server mariadb 命令安装,而安装 MySQL 需要先添加 社区 repo

解决办法:

  1. 下载文件,wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
  2. 执行文件, rpm -ivh mysql-community-release-el7-5.noarch.rpm
  3. 之后再次使用命令安装
1.7.4 GPG Keys are configured as …

报错信息: GPG Keys are configured as: file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

错误原因:GPG keys是安装包发布时生成的密钥,安装是需要核对密钥来确保安全性,MySQL的GRG 升级了

https://dev.mysql.com/doc/refman/5.7/en/checking-rpm-signature.html

解决办法:

  1. 需要重新获取GRG,使用命令 rpm –import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022获取后,重新安装MySQL
  2. 如果重新获取GRG后,安装仍然显示该错误,则考虑安装时跳过GRG检查
    • 安装命令最后使用**–nogpgcheck** 跳过
      • 编辑 yum 配置文件, /etc/yum.repos.d/mysql-community.repo,修改其中的 gpgcheck=0
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql

1.8 MySQL 卸载

rpm -qa|grep -i mysql,查看是否安装MySQL,如果安装过,则要先移除安装

  • yum -y remove <全名称> :卸载相关模块
  • 如上述命令卸载不掉,则使用命令 rpm -er <全名称>

whereis mysql,查看MySQL文件信息

删除MySQL相关文件

  • find / -name mysql,查看系统中MySQL相关文件信息
  • 对找到的相关文件夹,使用 rm -rf 命令依次删除

2. 压缩包安装 MySQL

三、Docker 中安装 MySQL

mysql 的容器我们可以让 docker 创建和执行,但是 mysql 的数据不能仅存在容器内,需要我们开辟一个外部路径专门用来存储 mysql 数据。

1. 安装 MySQL

docker run -p 3306:3306 --name mysql -v /mydata/mysql/log:/var/log/mysql -v /mydata/mysql/data:/var/lib/mysql -v /mydata/mysql/conf:/etc/mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
 简单讲解一下,
 -p 3306:3306:将容器的3306端口映射到主机的3306端口
 -v 源地址(宿主机):目标地址(容器),将主机的/mydata/mysql/log挂载到mysql容器的/var/log/mysql目录
 -e 指定容器内的环境变量,这里是指定mysql密码为root
 -d 后台运行容器,并返回容器ID
 mysql:5.7 指定mysql版本,具体版本可以在https://hub.docker.com 查询

2. 验证 MySQL 是否安装成功

docker ps

如下,如果显示了 mysql 就是安装成功了

3. 开启 MySQL 远程访问权限:

先进入mysql容器
docker exec -it mysql /bin/bash
登录mysql,密码就是我们初始化时设置的root
mysql -uroot -p
然后开始开启远程访问权限
use mysql;
select host,user from user;


查看 host 不是 %,需要先更新成 %(如果是 % 跳过,直接进行下面的授权):然后开始授权

4. MySQL 防火墙配置

上面对 mysql 本身开启了远程访问权限,下面需要配置防火墙,阿里云还需要在控制台配置安全组开放 3306 端口。

# 如果firewalld 没有开启,先开启下
service firewalld start
#开放3306端口
firewall-cmd --permanent --add-port=3306/tcp;
#重启防火墙(修改配置后要重启防火墙)
firewall-cmd --reload

最后配置 mysql 自启:此时使用 navicat 可以访问 MySQL 了

常见问题

docker run 之后没有启动(启动后自动退出)

mysqld: Can’t read dir of ‘/etc/mysql/conf.d/‘ (Errcode: 2 - No such file or directory)

chown: changing ownership of ‘/var/lib/mysql/‘: Permission denied

https://blog.csdn.net/miachen520/article/details/122389701

阿里云资源安装 mysql

可以在 阿里云镜像中心 搜索相关的镜像,会跳转到docker官网镜像处。

MySQL镜像使用步骤:

  1. 使用命令查询mysql镜像信息:docker search mysql
  2. 从远程仓库拉取mysql镜像,docker pull mysql
  3. 通过docker run 运行镜像
    • -d 进行后台运行
      • -p 指定mysql镜像映射的主机端口
      • -e 后跟 mysql 的参数,来连接查询数据库的名称和连接密钥
  1. 如命令:docker run -d -p 3306:3306 -e MYSQL—_ROOT_PASSWORD=root -e MYSQL_DATABASE=datebase mysql:latest
    • 属性名称必须要大写,否则无效
      • -e MYSQL_ROOT_PASSWORD=root:设置 MySQL 服务 root 用户的密码为root
      • -e MYSQL_DATABASE=datebase ,创建一个名为databse的数据库
  1. 运行成功后,可以进入到mysql镜像中并查看mysql信息
    1. 使用docker ps 查看当前执行的镜像的ID,
    2. 使用命令进入到docker镜像中:docker exec -it 镜像ID bash ,进入后命令行前缀用户就变成了容器ID。
    3. 进入容器中,就相当于进入了一个轻量级Linux,命令是相同的
    4. 进入mysql镜像后,使用命令连接mysql:mysql –user=root –passwordmysql -h localhost -u root -p 然后输入密码登录

错误: 服务器上通过docker命令运行和访问正常,但是使用navicate远程连接mysql时报错如下:

  • 首先通过mysql镜像的ID进入到镜像中,并连接mysql mysql -u root -p 输入密码
  • 开启远程访问权限
    • 查看数据库信息show databases;
      • 切换使用mysql数据库:use mysql;
      • 查询user表权限信息:select host,user from user
      • ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘root’;
      • 刷新操作:flush privileges;
      • 然后可以远程使用navicate连接了。
      • 原因:镜像中root用户已经有了远程连接的权限,但是模式不一样导致无法连接,因此要将root用户的密码改成 mysql_native_password 模式即可。

问题: 每次运行mysql时使用命令创建数据库,当服务stop之后,数据库就没了,下次运行要重新创建?

  • 如果每次都重新run运行mysql镜像,那么每次启动后服务的ID是不同的,就是不同的服务,则数据库是一个原始的数据库
  • 而使用命令 docker ps -a 可以查看所有的服务,找到之前服务的ID,直接 docker start ID 可以运行已经存在的服务,且配置是一样的。

文章作者: shone
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 shone !
评论
 上一篇
chrome 插件食用指南!【亲测可用】【持续更新】 chrome 插件食用指南!【亲测可用】【持续更新】
Chrome 插件是 Chrome 浏览器一大特色,是一种可以增强 Chrome 浏览器功能的小型软件程序,可以实现改善用户体验、丰富浏览器功能、以及自定义浏览器界面等功能。 下载和安装插件Chrome 插件使用的前提是要有一个支持 ch
2023-07-15
下一篇 
Hexo 实现优化文章标题中文字符 Hexo 实现优化文章标题中文字符
Hexo 创建文章标题命令设置文章标题Hexo 新建一篇博客文章时使用如下命令 hexo new [layout] 'titleName' layout 是一个可选参数,用来指定创建文章对应的布局,即文章最终会被分配到的文件夹路径 lay
2023-06-30 shone
  目录