MySQL Linux版的安装与配置

安装步骤
1 检查工作
1.1 删除已有的相关包

在安装前需要确定现在这个系统有没有 MySQL,如果有那么必须卸载。尤其是新的 CentOS 7 系统,它自带mariaDB数据库,所以需要卸载掉。

查找已安装的MySQL软件包:

rpm -qa|grep mysql
  • CentOS7下还需要查找是否存在mariadb包
    rpm -qa|grep mariadb

  • 如果输入上述两个命令后都输出存在有包,则需要执行删除命令。
  • 例如,前两步中终端输出了“mysql-libs-5.1.73-1.el6.x86_64”和“mariadb-libs-5.5.56-2.el7.x86_64”,则:

  • rpm -e --nodeps mysql-libs-5.1.73-1.el6.x86_64
    rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

  • 1.2 提升权限

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

  • chmod -R 777 /tmp

    1.3 检查依赖

    这一步需要检查系统中是否存在一些安装MySQL时需要的依赖库。因为考虑到大家有些是在虚拟机上安装的Linux系统。如果安装系统的时候用的是最小安装等原因,可能就不存在这些库。

  • 执行两个查询命令看是否存在依赖库:
  • rpm -qa|grep libaio
    rpm -qa|grep net-tools

  • 如果不存在则需要安装:
  • yum -y install libaio net-tools

    2 准备安装包

    2.1 准备安装包方法 1

  • 首先进入到 /opt目录:
    cd /opt

    使用 wget下载并解压,在下载的过程中会显示进度条,包含 (下载完成百分比,已经下载的字节,当前下载速度,剩余下载时间) 

  • wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar
    tar -xvf mysql-5.7.16-1.el7.x86_64.rpm-bundle.tar

    下载完成后,解压,会看到很多 rpm 包,其中的 4 个是必要的:

    mysql-community-common-5.7.16-1.el6.x86_64.rpm
    mysql-community-libs-5.7.16-1.el6.x86_64.rpm
    mysql-community-client-5.7.16-1.el6.x86_64.rpm
    mysql-community-server-5.7.16-1.el6.x86_64.rpm 

  • 3 开始安装
    使用 rpm 命令按顺序依次安装 4 个包:

    rpm -ivh mysql-community-common-5.7.16-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-libs-5.7.16-1.el7.x86_64.rpm
    rpm -ivh mysql-community-client-5.7.16-1.el7.x86_64.rpm 
    rpm -ivh mysql-community-server-5.7.16-1.el7.x86_64.rpm

    image-20210412151223700

    注意:1. 安装 server 会比较慢;
       2. 如果前面第 1.3 步没检查好,在安装 mysql-community-server 会报错。

    4 查看MySQL 的安装版本
    执行 " mysqladmin –version " 命令,类似 " java -version " 如果输出版本消息,即为安装成功。
    image-20210412151230355

    (三)相应配置

    5 初始化 MySQL

  • MySQL 5.7下载完后需要手动初始化:
  • mysqld --initialize --user=mysql

  • 查看并记住初始密码,“root@localhost:” 后面的就是初始化密码,要记下来,后面连接数据库会用到。
  • cat /var/log/mysqld.log | tail -n 10

    image-20210412151241435

    6 启动 MySQL 服务

  • 启动服务
  • systemctl start mysqld.service

  • 关闭服务
  • systemctl stop mysqld.service

  • 查看服务状态
  • systemctl status mysqld

    image-20210412151246509

  • 查看是否自启动
    systemctl list-unit-files|grep mysqld.service

    image-20210412151251842

  • 设置自启动
  • systemctl enable mysqld.sercice

    7 首次登陆

  • 首次登陆通过 “mysql -uroot -p” 进行登录,在 “Enter password:” 后输入初始化密码。正确输入密码后输出如下所示则表明成功连接数据库

  • image-20210412151258243

  • 因为初始化密码默认是过期的,必须修改新密码后才能正常使用数据库

  • ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

    注意:密码太简单可能会报以下错:

    ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

    如果想设置简单的密码,可以根据自己需要来设置以下参数:

  • set global validate_password_policy=LOW; // 设置密码的验证强度等级为低(LOW)
    set global validate_password_length=6; // 设置密码长度为6,最小为4

    8 修改字符集

  • 输入以下语句可以发现数据库和服务端的默认字符都是latin1,如果不修改容易出现乱码:
    show variables like 'character%';

    image-20210412151305503

  • 输入 "vim /etc/my.cnf " 或用Xftp打开 "/etc/my.cnf " 文件进行编辑,在最后加上
  • character_set_server=utf8
    init_connect=’SET NAMES utf8’

  • image-20210412151538784

  • 重启MySQL服务
  • systemctl restart mysqld

  • 重新连入数据库后修改数据库的字符集(其中mydb为数据库名)
  • alter database mydb character set 'utf8';

  • 修改数据库表的字符集(其中mytbl为表名)
  • alter table mytbl convert to character set 'utf8';

    image-20210412151545657

    9 远程访问

  • 输入以下语句查看MySQL的用户信息:
  • image-20210412151551524

host:表示连接类型

%:表示所有远程通过 TCP方式的连接
IP地址:如 (192.168.1.2,127.0.0.1) 通过制定ip地址进行的TCP方式的连接
机器名:通过制定i网络中的机器名进行的TCP方式的连接
::1:IPv6的本地ip地址 等同于IPv4的 127.0.0.1
localhost:本地方式通过命令行方式的连接 ,比如mysql -u xxx -p 123xxx 方式的连接。
user:表示用户名

同一用户通过不同方式链接的权限是不一样的。

authentication_string:密码

所有密码串通过password (明文字符串)生成的密文字符串。加密算法为MYSQLSHA1,不可逆。MySQL 5.7的密码保存到authentication_string字段中不再使用password字段(在5.5中使用)。

​ 可见都是localhost,想要用Navicat等管理工具连过来需要增加远程用户,否则远程连接会报以下错误:
image-20210412151559514

因此下面给出了用户授权、创建用户、删除用户和修改密码的命令。

  • 用户授权命令(该命令执行授权时如果发现没有指定的用户,则会直接创建一个新用户来完成授权):
  • grant 权限1,…权限n on 数据库名.表名 to 用户名@用户地址 identified by ‘密码’;

    例如,授予通过网络方式登录的root用户,有对所有库、所有表的全部权限,密码设为”newpwd123”:

  • grant all privileges on *.* to root@'%' identified by 'newpwd123';

  • 创建用户,例如名为root的用户,密码设为123abc:

create user root identified by '123abc';
  • 修改用户名
  • update mysql.user **set** user='li4' where user='wang5';
    flush privileges;  # 所有通过user表的修改,必须用该命令才能生效。

  • 删除用户
  • drop user user@host;

  • 修改当前用户的密码
  • set password = password('new_password')

  • 修改某个用户的密码
  • update mysql.user set password=password('new_password') where user='name';
    flush privileges; # 所有通过 user表的修改,必须用该命令才能生效。

    10 相关目录介绍
    文件    位置
    客户端程序及脚本    /usr/bin
    mysqld服务    /usr/sbin
    配置文件    /etc/my.cnf
    数据目录    /var/lib/mysql
    错误日志    /var/log/mysqld.log
    私有安全文件    /var/lib/mysql-files
    系统初始化脚本    /etc/init.d/mysqld
    系统服务    mysqld
    Pid文件    /var/run/mysql/mysqld.pid
    Socket    /var/lib/mysql.mysqld.pid
    字典目录    /var/lib/mysql-keyring
    操作手册    /usr/share/man
    头文件    /usr/include/mysql
    LIB库    /usr/lib/mysql
    共享文件    /usr/share/mysql
    11 可能出现的其它错误
    错误一:在第 6 步时,如果出现以下报错信息:
    ————————————————
    image-20210412150522732

    看报错信息里说 " --initialize specified but the data directory has files in it. Aborting. ",说明mysql的数据目录已经存在了。可能是之前安装过mysql,卸载的时候没卸干净,没有连着数据目录一起删除。

    1. 最简单的解决方法

    已知MySQL的数据目录默认是 /var/lib/mysql,则我们可以对它进行修改:

    终端输入 " vim /etc/my.cnf " 对配置文件进行编辑,修改datadir为自己想存放数据的路径。image-20210412150528323

  • 2. 最彻底的解决方法

  • 搜索出带 " mysql " 的所有目录:
  •  find / -name mysql

  • image-20210412150631456

     

  • 将这些目录递归删除:
  • rm -rf /etc/logrotate.d/mysql
    rm -rf /var/lib/mysql
    rm -rf /var/lib/mysql/mysql
    rm -rf /usr/bin/mysql
    rm -rf /usr/lib64/mysql
    rm -rf /usr/share/mysql
    

  • 重新开始安装。
  • 错误二:依然无法远程连接MySQL服务

    检查自己的服务器是否开放了MySQL服务的访问端口,开放了3306端口

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐