CentOS 安装 MySQL

CentOS 安装 MySQL

别null了 2,563 2021-07-29

系统环境:

CentOS 7
MySQL RPM 包

1. 准备工作

1.1 下载

mysql 5.7.26 直通车

1.2 检查环境

  • 检查是否安装了 mysql 与 mariadb

    # 检查是否安装了 MySQL
    rpm -qa | grep mysql
    # 若存在 mysql 安装文件,则会显示类似如下的版本信息
    mysql-connector-odbc-5.2.5-6.el7.x86_64
    # 卸载 mysql,如果有多个,就挨个删除
    rpm -e --nodeps mysql-connector
    
    # 检查是否安装了 MariaDB
    rpm -qa | grep mariadb
    # 卸载 MariaDB,如果有多个,就挨个删除
    rpm -e --nodeps mariadb-libs
    

  • 检查是否安装 libaio

    rpm -qa | grep libaio
    # 如果未安装或版本太低,则执行如下命令
    yum -y install make gcc-c++ cmake bison-devel ncurses-devel libaio libaio-devel
    

  • 检查是否安装 net-tools

    rpm -qa | grep net-tools
    # 如果没有,则执行如下命令
    yum -y install net-tools
    

1.3 上传安装包

将安装包上传至服务器 /usr/local/ 并解压缩

tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar

安装所需要用到的包有四个,解压后内容如下:

2 安装及修改密码

由于 RPM 存在依赖关系,所以需要按顺序执行;如果不按顺序执行命令,在安装过程中提示缺少依赖,导致无法成功安装。RPM 包执行顺序为:common → libs → client → server

2.1 为 mysql 创建用户和组

# 添加组
groupadd mysql
# 添加用户并指定用户所在组
useradd -r -g mysql mysql

2.2 安装 RPM 包

   MySQL5:
   rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
   rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
   rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
   rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm
   
   MySQL8:
   mysql-community-common-8.0.28-1.el7.x86_64.rpm
   mysql-community-client-plugins-8.0.28-1.el7.x86_64.rpm
   mysql-community-libs-8.0.28-1.el7.x86_64.rpm
   mysql-community-client-8.0.28-1.el7.x86_64.rpm
   mysql-community-icu-data-files-8.0.28-1.el7.x86_64.rpm
   mysql-community-server-8.0.28-1.el7.x86_64.rpm

在这里插入图片描述

 如果未安装 net-tools,则会报以下错误
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20190706172540374.png)

安装成功如下

2.3 初始化 MySQL

mysqld --initialize

注:–initialize 选项默认以“安全”模式来初始化,会为 root 用户生成一个root 账户密码并将该密码标记为过期,密码在log文件里,登陆后你需要设置一个新的密码,而使用 --initialize-insecure 命令则不使用安全模式,则不会为 root 用户生成一个密码

查看 root 账号密码,复制密码,后面要用到

cat /var/log/mysqld.log # *87AaAflid,K

2.4 修改 MySQL 权限

# 5.7版本以前是 
chmod -R 777 /usr/local/mysql/data/ 
# 5.7版本以后是 
chmod -R 777 /var/lib/mysql

2.5 启动 MySQL

systemctl start mysqld

启动时如果出现以下错误,说明是端口号被占用了

查看进程,并终止相关进程,若无法终止进程,直接重启 mysql 服务即可

如果重启 mysql 服务还是报错,请查看日志文件

通过查看日志文件,可以看到如下错误,这是因为权限不足导致的,执行第4步操作即可

2.6 修改密码( MySQL 5)

mysql -u root -p

mysql5.7及之后的版本用户表结构有变化,需执行以下命令:

根据情况设置密码,如果是自己用可以简单点;如果是服务器,建议使用复杂密码

update user set authentication_string = password("123456") where user = "root";
flush privileges; # 刷新权限(必须步骤)

如果执行语句出现如下错误,则需要重置密码

alter user user() identified by "123456";

至此,mysql 安装完毕,但是此时只能在本地连接 mysql

2.7 修改密码( MySQL 8)

刚安装完 mysql8 登录时报错:

​ [#1045 - Access denied for user ‘root’@‘localhost’ (using password: NO)]

  1. 修改配置文件免密码登录 mysql

    vim /etc/my.cnf  
    
    # 在 [mysqld] 节点最后加上如下语句,然后重启 mysql 服务
    skip-grant-tables 
    

    如果卡启动命令,查看日志文件有出现 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11,可以尝试将虚拟机内存调大一点,我的调整内存之后就好了

  2. 登录 mysql

    mysql  
    # 或者  
    mysql -u root -p   
    # password 直接回车
    

    如果回车报错:

    ​ mysqld: Can not perform keyring migration : Invalid --keyring-migration-source option.

    ​ 或者

    ​ Can’t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock’

    可能是权限问题,按 2.4 方法操作即可

  3. 重置密码

    # 1. 首先查看当前root用户相关信息,在mysql数据库的user表中
    use mysql;
    
    # host: 允许用户登录的ip‘位置’%表示可以远程;
    # user:当前数据库的用户名;
    # authentication_string: 用户密码;在mysql 5.7.9以后废弃了password字段和password()函数;
    # plugin: 密码加密方式;
    select host, user, authentication_string, plugin from user;
    
    # 2.如果当前 root 用户 authentication_string 字段有内容,先将其设置为空
    update user set authentication_string='' where user='root';
    

  4. 退出mysql, 删除 /etc/my.cnf 文件中刚刚添加的 skip-grant-tables, 重启 mysql 服务

  5. 登录 mysql,因为上面设置了 authentication_string 为空,所以可以免密码登录

    mysql -u root -p
    # passwrod: 直接回车
    ALTER user 'root'@'localhost' IDENTIFIED BY 'sqlyog2020';
    # 如果出现以下错误,检查用户信息 host 字段是否为 'localhost', 注意我的是 '%'
    # ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'localhost'
    

    至此修改成功; 使用新密码登录即可

3 . 远程连接

3.1 开启远程连接

将 root 用户设置为允许远程连接的用户(也可以设置其他的用户,原理一样)

update user set user.host='%' where user.user='root';
flush privileges;

3.2 开放端口

(如果还停留在mysql控制台,需要输入 exit 命令退出)

开通 mysql 服务的防火墙端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent  #开启3306端口
firewall-cmd --reload  #重启防火墙

3.3 测试连接

4 . 常用配置

主要是最大连接数、编码格式、大小写转换、数据接收大小

show variables like “%max_connection%”;查看最大连接数

show variables like “%character%”;查看编码格式

show variables like “%case%”;查看大小写转换

show variables like “%max_allowed_packet%”;查看数据接收大小

配置都可以在etc下的my.cnf文件修改;配置如下:

character-set-server=utf8
init_connect='SET NAMEs utf8'
max_connections=200
max_allowed_packet=400M
[client]
default-character-set=utf8

# mysql8 默认使用 utf8mb4, 字符编码可以不用修改

在红框中的配置中:
配置中有character的皆为修改编码格式的配置;
init_connect也是编码格式配置;
max_connection是最大链接数;
max_allowed_packet是接收数据大小。

修改完成后重启mysql:systemctl restart mysqld

# Linux # MySQL