MySQL服务安装

igxiaoshan Lv5

安装前检查MySQL依赖

检查/tmp临时目录权限(必不可少)

由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。

1
2
## 执行命令,授予权限
chmod -R 777 /tmp

检查依赖

1
2
3
4
5
6
## 检查依赖
rpm -qa | grep libaio

rpm -qa | grep net-tools

## 如果不存在需要到CentOS中进行rpm安装

安装过程

将之前下载好的文件,上传到 /opt/mysql80文件夹下

1
2
3
4
5
6
7
8
## 执行安装命令
## 注意: 必须按照我下列文件顺序执行安装

rpm-ivh mysql-community-common-8.0.25-1.el7.x86_64.rpm
rpm-ivh mysql-community-client-plugins-8.0.25-1.el7.x86_64.rpm
rpm-ivh mysql-community-libs-8.0.25-1.el7.x86_64.rpm
rpm-ivh mysql-community-client-8.0.25-1.el7.x86_64.rpm
rpm-ivh mysql-community-server-8.0.25-1.el7.x86_64.rpm
  • rpm是 Redhat Package Manage缩写,通过rpm的管理,用户可以把源代码包装成以rpm为扩展名的文件形式,易于安装
  • -i –instll安装软件包
  • -v –verbose提供更多的详细信息输出
  • -h –hash 软件包安装的时候列出哈希标记(和-v一起使用效果更好),展示进度条

注意: 安装中可能会报错

  • 案例一

1
2
3
4
5
## 报错信息
mariadb-libs被 mysql-community-libs-8.0.25-1.e17.X86_64 取代

## 解决方案
yum remove mysql-libs # 清除之前安装过得依赖
  • 案例二

1
2
3
4
5
6
## 报错信息
mysql-community-client(x86-64) >= 5.7.9 被 mysql-community-server-5.7.30-1.e17.x86_64 需要

## 解决方案
#在安装指令末尾加上 --nodeps --force ,即安装时不检查依赖关系
rpm -ivh mysql-community-client-5.7.30-1.el7.x86_64.rpm --nodeps --force
  • 案例三

1
2
3
4
5
6
7
8
9
10
11
12
[root@server mysql-5.7.22]# rpm -ivh mysql-community-server-5.7.22-1.el7.x86_64.rpm 
警告:mysql-community-server-5.7.22-1.el7.x86_64.rpm: 头V3 DSA/SHA1 Signature, 密钥 ID 5072e1f5: NOKEY
错误:依赖检测失败:
/usr/bin/perl 被 mysql-community-server-5.7.22-1.el7.x86_64 需要
net-tools 被 mysql-community-server-5.7.22-1.el7.x86_64 需要
perl(Getopt::Long) 被 mysql-community-server-5.7.22-1.el7.x86_64 需要
perl(strict) 被 mysql-community-server-5.7.22-1.el7.x86_64 需要

###根据以上内容显示:perl、net-tools 被需要!个人感觉缺少组件,尝试用 yum install 了一下:

# yum -y install perl.x86_64
# yum -y install net-tools.x86_64
  • 案例四

1
2
3
4
5
6
### 如果是 MySQL8 版本,连接时还会出现如下问题:
#### 配置新连接报错:错误号码 2058,分析是 mysql 密码加密方法变了。
##### 解决方法:Linux下 mysql -u root -p 登录你的 mysql 数据库,然后 执行这条SQL:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

### 然后就可以连接工具了

查看MySQL版本

1
2
3
4
## 执行如下命令,如果成功表示安装mysql成功。类似java-version如果打出版本等信息
mysql --version

mysqladmin --version
1
2
## 检查安装包
rpm-qa|grep-imysql

服务初始化

为了保证数据库目录与文件的所有者为mysql登录用户,如果你是以root身份运行mysql服务,需要执行下面的命令初始化:

1
2
3
4
5
6
7
8
9
mysqld --initialize --user=mysql
## 说明:--initialize选项默认以“安全”模式来初始化,则会为root用户生成一个密码并将该密码标记为已过期,登录后需要重新设置一个新的密码,生成的临时密码会往日志中记录一份


#### 查看密码
cat /var/log/mysqld.log

### A temporary password is generated for root@localhost: ;hT!hHgWd52>
### 这个 ';hT!hHgWd52>' 就是临时密码

服务启动

1
2
3
4
5
# 加不加.service后缀都可以
启动:systemctl start mysqld.service
关闭:systemctl stop mysqld.service
重启:systemctl restar tmysqld.service
查看状态:systemctl status mysqld.service
1
2
## 查看服务进程
ps -ef | grep -i mysql
1
2
3
4
5
6
7
8
9
## 查看MySQL服务是否自启动
systemctl list-unit-files |grep mysqld.service

### 默认是enabled
#### 如果不是enabled可以运行如下命令设置自启动
systemctl enable mysqld.service

#### 如果希望不进行自启动,运行如下命令设置
systemctldisablemysqld.service

MySQL登录

1
mysql -uroot -p '密码'
1
2
3
4
5
### 修改密码
#### 因为初始化密码默认是过期的,所以查看数据库会报错
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';

##### 5.7版本之后(不含5.7),mysql加入了全新的密码安全机制。设置新密码太简单会报错。

设置远程登录

出现的问题 :

在用SQLyog或Navicat中配置远程连接Mysql数据库时遇到如下报错信息,这是由于Mysql配置了不支持远程连接引起的。

  • 步骤一

    • 物理机 ping 虚拟机 ip
      • ping 192.168.23.112
    • 物理机 telnet 虚拟机 ip 端口号
      • 开启telnet
      • 控制面板—>所有控制面板项—->程序和功能—->启用或关闭Windows功能—->找到 Telnet客户端—>开启 Telnet客户端
      • telnet 192.168.23.112 3306
    1
    2
    3
    ### 如果物理机ping不同,解决网路问题

    ### 如果telnet不同,解决端口问题
  • 步骤二

    • 检查防火墙
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ## 防火墙基础命令
    ### firewalld.service后缀 .service可不加
    systemctl start firewalld.service # 开启防火墙
    systemctl stop firewalld.service # 关闭防火墙
    systemctl status firewalld.service # 查看防火墙状态
    systemctl enable firewalld.service # 设置开机启动防火墙
    systemctl disable firewalld.service # 设置开机禁用防火墙

    #### 如果提示: Unit firewalld.service could not be found .说明没有安装防火墙,需要安装
    yum install firewalld firewall-config

    ##### 注意: centos7下默认的防火墙是firewall,替代了之前的iptables,firewall有图形化管理界面和命令行管理两种方式.
    • 添加放行端口
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ## 添加3306端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent

    ## 刷新防火墙
    ### 一定要刷新,否则不生效
    firewall-cmd --reload

    ## 查看firewall状态
    firewall-cmd --state
    • 附加指令
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    ## 查看防火墙放行规则
    firewall-cmd --list-all

    ## 添加放行服务
    firewall-cmd --zone=public --add-service=http --permanent

    ## 列出支持的zone
    firewall-cmd --get-zone

    ## 列出支持的服务,在列表中放行的
    firewall-cmd --get-services

    ## 移除放行的端口
    firewall-cmd --remove-port=80/tcp --permanent

    ## 查看已经放行的端口
    firewall-cmd --list-ports
  • 步骤三

    • 在linux系统下修改用户主机信息
    1
    2
    3
    4
    5
    -- 查询当前用户的信息
    SELECT user, host FROM user;

    -- 修改当前用户host
    UPDATE user SET host = '%' WHERE user = 'root'
    • 修改后执行flush privileges使配置立即生效
    1
    flush privileges;
  • 此时到此基本上已经可以,但是

  • 如果是MySQL5.7版本,可以直接使用SQLyog或者Navicat成功连接MySQL服务了

  • 如果是MySQL8.0版本,会因为密码的加密规则调整,致使连接失败

    • 错误信息如下

      1
      2
      错误号码2058
      Plugin caching_sha0_password could net be loaded: '乱码'
    • 分析: mysql密码加密方法变了

    • 解决办法

      1
      2
      -- 在linux下登录mysql服务,执行以下sql语句
      ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
  • 至此完成远程登录设置