Linux上安装Mysql

常用的方式有:源码编译、压缩包解压(一般为tar.gz)、编译好的安装包(RPM、DPKG等)、在线安装(YUM、APT等)。
以上几种方式便捷性依次增加,但通用性依次下降,比如直接下载压缩包进行解压,这种方式一般需要自己做一些额外的配置工作,但只要掌握了方法,各个平台基本都适用,YUM虽然简单,但是平台受限,网络受限,必要的时候还需要增加一些特定YUM源。
几种安装方式最好都能掌握,原则上能用简单的就用简单的:YUM>RPM>tar.gz>源码。

使用yum进行安装

  1. 查看是否已经安装了mysql

    1. [root@localhost ~]# rpm -qa|grep mysql #无输出说明没有安装
  2. 打开网址:MySQL Yum存储库

  3. 找到对应linux的版本进行下载
    查看自己的版本:

    1. [root@localhost ~]# cat /etc/redhat-release
    2. CentOS Linux release 7.8.2003 (Core)
  4. 复制下载文件的全名:mysql80-community-release-el7-3.noarch.rpm

  5. 下载和安装mysql源 ```java [root@localhost ~]# wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

—如果显示wget未找到命令,则需要先安装wget: yum -y install wget —然后再次执行上面命令

  1. 6. 安装mysql
  2. ```java
  3. [root@localhost ~]# sudo rpm -Uvh mysql80-community-release-el7-3.noarch.rpm

检查是否安装成功:
执行成功后会在/etc/yum.repos.d/目录下生成两个repo文件mysql-community.repomysql-community-source.repo

  1. [root@localhost ~]# cd /etc/yum.repos.d/
  2. [root@localhost yum.repos.d]# ls -l
  3. 总用量 12
  4. -rw-r--r--. 1 root root 2523 6 16 2018 CentOS-Base.repo
  5. -rw-r--r--. 1 root root 2076 4 25 2019 mysql-community.repo
  6. -rw-r--r--. 1 root root 2108 4 25 2019 mysql-community-source.repo
  7. [root@localhost yum.repos.d]#
  8. --查看mysql相关资源
  9. [root@localhost yum.repos.d]# yum repolist enabled | grep "mysql.*-community.*"

300.png

  1. 选择masql版本

使用MySQL Yum Repository安装MySQL,默认会选择当前最新的稳定版本
使用命令:yum repolist all | grep mysql,查看当前yum repolist的所有版本
切换版本

  1. [root@localhost ~] sudo yum-config-manager --disable mysql80-community
  2. [root@localhost ~] sudo yum-config-manager --enable mysql57-community
  1. 安装mysql

    1. [root@localhost ~]# sudo yum install mysql-community-server

    该命令会安装MySQL服务器 (mysql-community-server) 及其所需的依赖、相关组件,包括mysql-community-client、mysql-community-common、mysql-community-libs等。安装时间会比较长

  2. 启动

    1. [root@localhost ~]# systemctl start mysqld.service
    2. [root@localhost ~]# systemctl status mysqld.service

    301.png

  3. 停止、重启

    1. [root@localhost ~]# systemctl stop mysqld.service #停止
    2. [root@localhost ~]# systemctl restart mysqld.service #重启

    修改密码及登录

    初始密码
    MySQL第一次启动后会创建超级管理员账号root@localhost,初始密码存储在日志文件中:

    1. [root@localhost ~]# grep 'temporary password' /var/log/mysqld.log
    2. 2020-12-06T07:32:41.399112Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Nd<-p!Fxt6A8

    修改默认密码

    1. # 先进行登录
    2. [root@localhost ~]# mysql -uroot -p
    3. Enter password:
    4. mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'password';
    5. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
    6. #密码太弱

    解决方法如下:
    使用复杂密码,MySQL默认的密码策略是要包含数字、字母及特殊字符;
    如果只是测试用,不想用那么复杂的密码,可以修改默认策略,即validate_password_policy(以及validate_password_length等相关参数),使其支持简单密码的设定,具体方法可以参考:设置密码策略;
    修改配置文件/etc/my.cnf,添加validate_password=OFF,保存并重启MySQL
    修改报错后重启报错解决可参考:https://blog.csdn.net/aiyowei1106/article/details/88703746

    设置编码

    ```java —1.查看编码 mysql> SHOW VARIABLES LIKE ‘character%’;

—2.设置编码 编辑/etc/my.cnf,[mysqld]节点增加以下代码 [mysqld] character_set_server=utf8 init-connect=’SET NAMES utf8’

  1. <a name="zUmPf"></a>
  2. ### 设置开机启动
  3. ```java
  4. [root@localhost ~]# systemctl enable mysqld
  5. [root@localhost ~]# systemctl daemon-reload

关闭防火墙

# firewall防火墙
systemctl status firewalld
# 查看转态
firewall-cmd --state
# 开启
service firewalld start
# 重启
service firewalld restart
# 关闭
service firewalld stop
#注意分清楚linux的版本 命令会有所不同
#查看防火墙规则
firewall-cmd --list-all

删除mysql

--1.检查mariadb
[root@localhost ~]# rpm -qa|grep mariadb

--2.删除mariadb (如无则跳过此步)
[root@localhost ~]# rpm -e --nodeps mariadb-server
[root@localhost ~]# rpm -e --nodeps mariadb
[root@localhost ~]# rpm -e --nodeps mariadb-libs

--3.检查mysql
[root@localhost ~]# rpm -qa|grep mysql
mysql-community-client-8.0.22-1.el7.x86_64
mysql-community-common-8.0.22-1.el7.x86_64
mysql-community-client-plugins-8.0.22-1.el7.x86_64
mysql-community-libs-compat-8.0.22-1.el7.x86_64
mysql80-community-release-el7-3.noarch
mysql-community-libs-8.0.22-1.el7.x86_64
mysql-community-server-8.0.22-1.el7.x86_64
[root@localhost ~]# 

--4.删除mysql
[root@localhost ~]# rpm -e --nodeps xxx

使用tar.xz安装

  1. 删除旧的,操作如上
  2. 下载mysql对应安装包

官网下载:历史版本下载
下载好后通过xftp上传至虚拟机,或者直接在虚拟机上使用命令进行下载:

[root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.15-linux-glibc2.12-i686.tar
[root@localhost ~]# wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.26-linux-glibc2.12-x86_64.tar
  1. 解压安装和配置
    MySQL依赖libaio库 ```java [root@localhost ~]# yum install libaio

[root@localhost mysql]# tar zxvf /root/mysql/mysql-8.0.15-linux-glibc2.12-i686.tar.gz 或者 [root@localhost mysql]# tar -xvf /root/mysql/mysql-8.0.15-linux-glibc2.12-i686.tar 或者 [root@localhost mysql]# tar -xvJf /root/mysql/mysql-8.0.15-linux-glibc2.12-i686.tar.xz 修改文件名 [root@localhost mysql]# mv mysql-8.0.15-linux-glibc2.12-i686 mysql 将文件移动到/usr/local/ [root@localhost mysql]# cp mysql-8.0.15-linux-glibc2.12-i686.tar.xz /usr/local/ 或者 移动并重命名 [root@localhost mysql]# mv mysql-5.7.26-linux-glibc2.12-x86_64 /usr/local/mysql


4. **创建mysql用户**

不需要登录的一个系统账号,启动MySQL服务时会使用该账号
```java
[root@localhost mysql]# groupadd mysql
[root@localhost mysql]# useradd -r -g mysql -s /bin/false mysql

--创建数据目录并赋予权限
[root@localhost mysql]# mkdir -p  /data/mysql              #创建目录
[root@localhost mysql]# chown mysql:mysql -R /data/mysql   #赋予权限
  1. 配置my.cnf ```java [root@localhost mysql]# vim /etc/my.cnf

— 具体内容如下: [mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/data/mysql socket=/tmp/mysql.sock log-error=/data/mysql/mysql.err pid-file=/data/mysql/mysql.pid

character config

character_set_server=utf8mb4 symbolic-links=0 explicit_defaults_for_timestamp=true


6. **修改/usr/local/mysql 目录为mysql用户**
```java
[root@localhost mysql]# cd /usr/local/mysql //进入/usr/local/mysql 目录
[root@localhost mysql]# chown -R mysql:mysql ./  #赋予权限
  1. mysql初始化操作 ```java —进入mysql的bin目录 [root@localhost mysql]# cd /usr/local/mysql/bin/

—初始化 [root@localhost mysql]# ./mysqld —defaults-file=/etc/my.cnf —basedir=/usr/local/mysql/ —datadir=/data/mysql/ —user=mysql —initialize

—查看密码 cat /data/mysql/mysql.err

![20190625105235465.png](https://cdn.nlark.com/yuque/0/2021/png/21379295/1629798596142-9560cf44-baeb-4765-9244-d1afe2809669.png#clientId=u7a86827d-0e8b-4&from=ui&id=u8ce31544&margin=%5Bobject%20Object%5D&name=20190625105235465.png&originHeight=126&originWidth=1566&originalType=binary&ratio=1&size=29046&status=done&style=none&taskId=u5647a4dc-ac55-4d75-837c-b623168a838)

8. **启动并设置开机启动**
```java
--先将mysql.server放置到/etc/init.d/mysql中
[root@localhost mysql]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

--开机启动
[root@localhost mysql]# chmod +x  /etc/init.d/mysql           //添加可执行权限。
[root@localhost mysql]# chkconfig  --add mysql               // 注册启动服务
[root@localhost mysql]# chkconfig  --list                   //查看是否添加成功

--启动
[root@localhost mysql]# service mysql start
Starting MySQL.Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
.. SUCCESS!           ##表示启动成功

--查看
[root@localhost mysql]# ps -ef|grep mysql
  1. 配置mysql环境 ```java [root@localhost ~]# vi /etc/profile

—增加内容 xport MYSQL_HOME=/usr/local/mysql export MYSQL_PATH=${MYSQL_HOME}/bin:${MYSQL_HOME}/lib export PATH=$PATH:/usr/local/mysql/bin

—配置好后重启下服务器 或者 source /etc/profile [root@localhost ~]# shutdown -r now [root@localhost ~]# source /etc/profile 均可使环境变量生效


10. **修改密码**
```java
[root@localhost ~]# mysql -uroot -p
Enter password:        //这里输入刚刚初始化操作时的初始密码

--方式一
mysql> alter user 'root'@'localhost' identified by '你的新密码';

--方式二
mysql> SET PASSWORD = PASSWORD('123456');
mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

--#设置允许远程登录
mysql> update user set user.Host='%' where user.User='root';

--刷新
mysql> FLUSH PRIVILEGES;

这个时候我们可以用SQLyog等数据库视图工具进行连接,如果发现无法连接,则执行以下命令

mysql> use mysql                                            #访问mysql库
mysql> update user set host = '%' where user = 'root';      #使root能再任何host访问
mysql> FLUSH PRIVILEGES;                                     #刷新
  1. 关闭防火墙
    # firewall防火墙
    systemctl status firewalld
    # 查看转态
    firewall-cmd --state
    # 开启
    service firewalld start
    # 重启
    service firewalld restart
    # 关闭
    service firewalld stop
    #注意分清楚linux的版本 命令会有所不同
    #查看防火墙规则
    firewall-cmd --list-all
    

    特别注意

    mysql8 之前的版本中加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password,用SQLyog等连接工具时,会提示你密码错误,所以我们要修改加密方式: ```java

    更改加密方式

    mysql> ALTER USER ‘root’@’%’ IDENTIFIED BY ‘password’ PASSWORD EXPIRE NEVEER; Query OK, 0 rows affected (0.01 sec)

更新用户密码

mysql> ALTER USER ‘root’@’%’ IDENTIFIED WITH mysql_native_password BY ‘密码’; Query OK, 0 rows affected (0.01 sec)

mysql> flush privileges; Query OK, 0 rows affected (0.00 sec)

```