zoukankan      html  css  js  c++  java
  • mysql(4)-linux环境centos7安装mysql8.0.19详细安装步骤



    Centos7  Linux 上安装 MySQL8.0.19  

    首先下载安装包
    官网地址:https://dev.mysql.com/downloads/mysql/
    下载地址(64位):https://dev.mysql.com/downloads/file/?id=480751
    需要 32 位的可以去官网地址找。

    1. 安装&解压压缩包到目标位置
    下载的文件应该是一个 mysql*.tar.xz 格式的压缩包,这里需要先对 .xz 解压

    解压:tar xvJf ***.tar.xz   (注意:J是大写的字母 )

    将解压出来的文件移动到 /usr/local/   且修改原来的名字mysql-8.0.19-linux-glibc2.12-x86_64修改为mysql
    mv mysql-8.0.19-linux-glibc2.12-x86_64   /usr/local/

    cd  /usr/local/

    mv mysql-8.0.19-linux-glibc2.12-x86_64   mysql      (给mysql-8.0.19-linux-glibc2.12-x86_64重命名)

    到这里我们就得到 MySQL的文件夹了,并且将他移动到了 /usr/local 目录下改名为 mysql 。

    2.  新建mysql用户、组及目录

    在这里我们新建一个 mysql 用户组和用户用来运行 mysql,作用:可以提高系统的安全行性。

    groupadd mysql
    useradd -M -g mysql -s /sbin/nologin mysql
    passwd mysql

    理解:上面的命令第1句是新建一个用户组,第2句再新建一个用户并且不可以登录,不创建家目录,第3句命令给 mysql 用户修改密码。

    3. 创建mysql数据仓库目录

    注意在根目录下新建

    cd /

    mkdir  /data/mysql   数据仓库目录  (新建data文件夹以及mysql文件夹,用来存放mysql的数据仓库)

    sudo chown -R mysql.mysql /data   

    理解:创建 /data 目录并且将目录属主设置为 mysql.  (注意是mysql.   是点)

    或者

    sudo mkdir -p /data/mysql
    sudo chown -R mysql.mysql /data


    4.接下来创建 mysql 的配置文件 /etc/my.cnf    (备注:/etc/下我本来的文件是没有my.cnf的  这是我新建的)
    sudo vim /etc/my.cnf

    原有的

    [mysqld]
    datadir=/var/lib/mysql
    socket=/var/lib/mysql/mysql.sock
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    # Settings user and group are ignored when systemd is used.
    # If you need to run mysqld under a different user or group,
    # customize your systemd unit file for mariadb according to the
    # instructions in http://fedoraproject.org/wiki/Systemd
    
    [mysqld_safe]
    log-error=/var/log/mariadb/mariadb.log
    pid-file=/var/run/mariadb/mariadb.pid
    
    #
    # include all files from the config directory
    #
    !includedir /etc/my.cnf.d
     1 # MySQL 配置文件,
     2 #参考:http://blog.51cto.com/zhangxinqi/2178407  
     3 # https://www.cnblogs.com/lyq863987322/p/8074749.html

    替换成以下内容:

    # 数据库目录 /data/mysql
    [client]
    port=3306
    # mysql socket 文件存放地址
    socket=/tmp/mysql.sock
    # 默认字符集
    default-character-set=utf8

    
    

    [mysqld]
    server-id=1
    # 端口
    port=3306
    # 运行用户
    user=mysql
    # 最大连接
    max_connections=200
    socket=/tmp/mysql.sock
    # mysql 安装目录(解压后文件的目录)
    basedir=/usr/local/mysql
    # 数据目录(这里放在我们新建的 /data/mysql 下)
    datadir=/data/mysql
    pid-file=/data/mysql/mysql.pid
    init-connect='SET NAMES utf8'
    character-set-server=utf8
    # 数据库引擎
    default-storage-engine=INNODB
    log_error=/data/mysql/mysql-error.log
    slow_query_log_file=/data/mysql/mysql-slow.log

    
    

    # 跳过验证密码(想跳过验证密码就放开即不注释 不想跳过即会输入密码,那就注释掉)
    #skip-grant-tables

    
    

    [mysqldump]
    quick
    max_allowed_packet=16M
    EOF

    到这里配置文件就建好了,上面是我自己的配置,在 mysql 启动的时候就会自动读取这个配置文件。
    可能会有好几个地方有 mysql 的配置文件,它的读取顺序是这样的

    /etc/my.cnf
    basedir/my.cnf
    datadir/my.cnf
    –defaults-extra-file        #在读取全局配置文件之后,读取用户配置文件 (~/.my.cnf)之前,读取extra指定的参数文件
    ~/.my.cnf
    所以我们在 /etc 下的配置文件 my.cnf 是第一个读取的文件,读到这个文件后就不会在读后面路劲中的配置文件。

    5.mysql 初始化:

    现在让我们进入解压后的 mysql 目录,进行mysql 初始化:

    cd /usr/local/mysql   (进入解压后的 mysql 目录)

    bin/mysqld --initialize

    安装的结果是这样的:

    在橘色线框中的部分,是自动生成的 root 密码,待会儿我们要用这个密码进行登录。

    ----遇到问题:但是我是先卸载了centos7自带的数据库,又卸载了之前安装的数据库,所以在我重装 mysql 的时候,
    我遇到了初始化的时候没有任何输出,也就是初始化完毕没有输入一个初始化密码让我保存,也没有找到日志文件,
    结果不知道root的初始密码是什么,只能通过跳过登录验证的方式重置密码(方法:vi  /etc/my.cnf   #skip-grant-tables  想跳过验证密码就放开即不注释)

    6.mysql启动

    启动 MySQL

    cd /usr/local/mysql/support-files/

    ./mysql.server  restart
    ./mysql.server start

    OK,启动成功---------------------
    -------------------------我启动的时候还遇到了其他问题 
    -------------------------1. 启动mysql报错The server quit without updating PID file!https://www.cnblogs.com/yiyaxuan/p/12559885.html  

    -------------------------2.


    7. 使用命令行登录 MySQL

    方法1:
    cd /usr/local/mysql/support-files/

    mysql -u root -proot    (这是登录的命令  如果有密码就用mysql -uroot -proot   第一个root是用户,第二个root是密码)
    mysql -u root -p       (这是登录的命令  如果没有密码就用mysql -uroot -p   第一个root是用户 此时配置文件需要打开skip-grant-tables

    然后输入刚刚自动生成的 root 密码即可(上面输出了密码就使用刚刚的密码,上面如果没有输出密码,就打开 skip-grant-tables 然后登录成功 然后给root设置个密码

    然后修改初始密码,出现报错:

    方法2:

    用这句命令的时候bin/mysql -u root -p 


    遇到报错1:

    [root@localhost bin]# mysql -uroot -p
    bash: mysql: 未找到命令...

    解决方法:

    原因:这是由于系统默认会查找/usr/bin下的命令,如果这个命令不在这个目录下,当然会找不到命令,我们需要做的就是映射一个链接到/usr/bin目录下,相当于建立一个链接文件。
    首先得知道mysql命令或mysqladmin命令的完整路径,比如mysql的路径是:/usr/local/mysql/bin/mysql,我们则可以这样执行命令:
    
    # ln -s /usr/local/mysql/bin/mysql /usr/bin
    
    以下是补充:
    
    linux下,在mysql正常运行的情况下,输入mysql提示:
    mysql command not found
    
    遇上-bash: mysql: command not found的情况别着急,这个是因为/usr/local/bin目录下缺失mysql导致,只需要一下方法建立软链接,即可以解决:
    把mysql安装目录,比如MYSQLPATH/bin/mysql,映射到/usr/local/bin目录下:
    # cd /usr/local/bin
    # ln -fs /MYSQLPATH/bin/mysql mysql
    
    还有其它常用命令mysqladmin、mysqldump等不可用时候都可按用此方法解决。
    注:其中MYSQLPATH是mysql的实际安装路径
    
    原文参考:https://www.jb51.net/article/34622.htm

    因为我root没有给我密码,所以先跳过验证,重启mysql

    mysql -u root -p 回车键2次,进入修改,可以直接看后面的

    1. 先把root的localhost改成%,设置远程登录:update user set host='%' where user='root';

    2.修改加密规则

    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

    3.更新 root 用户密码

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

    flush privileges;

    然后修改为不跳过验证,重启mysql,然后使用navicat连接,完美结束!


    遇到报错2:

    [root@localhost mysql]# bin/mysql -u root -p
    Enter password:
    ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    解决方法:
    1. mysql -u root -p (命令未找到使用: ln -s /usr/local/mysql/bin/mysql /usr/bin)

    2.cd /usr/local/mysql

    [root@localhost mysql]# bin/mysql -u root -p

    输入之前设置的密码-------进入命令行------------

    开始去执行一句语句:bin/mysql -u root -p  ,,然后修改初始密码,继续出现报错3:

    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

    解决方法:

    最后执行以下三个命令之一成功。
    下面三个命令任选其一

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new password'; (new password=root  也就是我的root用户密码为root

    alter user 'root'@'localhost' identified by 'new password';
    ALTER USER USER() IDENTIFIED BY 'new password';

     8. 使用Navicat工具去连接MySQL

    1. 遇到第一个问题:Client does not support authentication protocol requested by server;

    命令如下:

    1、use mysql;

    2、alter user 'root'@'localhost' identified with mysql_native_password by '********';

    'root'@'localhost'

    'root'@'localhost' 是你通过登录mysql然后输入select Host,User  from user; 看下你自己的root对应的Host那里是%还是localhost ,我的是% 所以我用的是:alter user 'root'@'%' identified with mysql_native_password by '********';

    思考:怎么把localhost改成%?在文章后面

    3、flush privileges;

    2. 然后继续测试连接,遇到第2个问题:Access denied for user 'root'@'DESKTOP-8RFO9MH' (using pasword:YES)

    Flush privileges;

    CREATE USER 'root'@'%' IDENTIFIED BY 'root';
    ERROR 1396 (HY000): Operation CREATE USER failed for 'root'@'%'-------------因为我已经新建了root用户,所以此句不再执行

    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

    select Host,User from user;

    ALTER USER 'root'@'%' IDENTIFIED WITH MYSQL_NATIVE_PASSWORD BY 'root' PASSWORD EXPIRE NEVER;

    select Host,User from user;

    重点执行以上标红色的三条语句。

    然后重新连接Navicat,连接成功。

    思考:怎么把localhost改成%?
    MySQL8.0本地访问设置为远程访问权限

    1.登录MySQL

    mysql -u root -p

    输入您的密码

    2.选择 mysql 数据库

    1
    2
    use mysql;
    show variables like '%skip_networking%';  //查数据库编码

    3.在 mysql 数据库的 user 表中查看当前 root 用户的相关信息

    1
    2
    select host,user from user where user='root';  //mysql 8.0
    select host, user, authentication_string, plugin from user;

    执行完上面的命令后会显示一个表格

    查看表格中 root 用户的 host,默认应该显示的 localhost,只支持本地访问,不允许远程访问。

    创建用户

    1
    CREATE USER 'root'@'%' IDENTIFIED BY '111111';
    改密码 
    1
    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '111111';

    设置为远程登录

    1
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;

     已有用户设置远程登录

    1
    update user set host='%' where user='root';   //mysql 8.0

    GRANT ALL ON 表示所有权限,% 表示通配所有 host,可以访问远程。

    5.刷新权限

    所有操作后,应执行

    flush privileges;

    6.查看 root 用户的 host

    再次执行步骤 2,你会发现 root 用户的 host 已经变成 %,说明我们的修改已经成功,可以远程访问了。

    7.访问数据库

    远程访问数据库的可视化工具比较多如:Navicat、SQLyog、MySQL workbench 等,我这里使用 Navicat

    输入访问的 host 和密码,报 2059 错误,这是因为 MySql8.0 版本 和 5.0 的加密规则不一样,而现在的可视化工具只支持旧的加密方式。

    此问题有两种方法,一种是更新 Navicat 驱动来解决此问题,另一种是将 MySQL 用户登录的加密规则修改为 mysql_native_password,第一种方法我试过了没有起作用,我这里采用第二种方法。

    8.修改加密规则

    ALTER USER 'root'@'%' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER; 

    9.更新 root 用户密码

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_new_password'; 

    flush privileges;

    use database_name;告诉mysql你要使用那个数据库;

    service mysqld start/restart/stop  启动服务/重启服务/停止服务

  • 相关阅读:
    mariadb数据库galera群集配置
    视频降噪处理
    测试
    WPF RichTextBox
    WPF ListBox
    WPF SelectedIndex
    项目-答题
    Show 或者 ShowDialog时出现的错误
    项目-数据库实体生成器
    Alfred 使用教程
  • 原文地址:https://www.cnblogs.com/yiyaxuan/p/12584007.html
Copyright © 2011-2022 走看看