zoukankan      html  css  js  c++  java
  • CentOS7系统下在线安装MySQL数据库

     

     在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可以直接覆盖掉MariaDB。

    1 下载并安装MySQL官方的 Yum Repository

    [root@localhost ~]# wget -i -c http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

      使用上面的命令就直接下载了安装用的Yum Repository,大概25KB的样子,然后就可以直接yum安装了。

    [root@localhost ~]# yum -y install mysql80-community-release-el7-3.noarch.rpm



    备注:

    这里可能会出现以下错误:

    1.

    已加载插件:fastestmirror, langpacks
    无法打开 mysql57-community-release-el7-7.noarch.rpm ,跳过。
    无须任何处理

    2.

    已加载插件:fastestmirror, langpacks
    base                                                | 3.6 kB     00:00     
    extras                                              | 3.4 kB     00:00     
    updates                                             | 3.4 kB     00:00     
    Loading mirror speeds from cached hostfile
     * base: mirrors.huaweicloud.com
     * extras: mirrors.aliyun.com
     * updates: mirrors.aliyun.com
    没有可用软件包 mysql-community-server。
    错误:无须任何处理

    原因:没有更新 wget命令包

    解决办法:

    1. yum -y install wget

    2. wget http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

    3. yum localinstall -y mysql80-community-release-el7-3.noarch.rpm

    4. yum install -y mysql-community-server

      之后就开始安装MySQL服务器。

    [root@localhost ~]# yum -y install mysql-community-server

      这步可能会花些时间,安装完成后就会覆盖掉之前的mariadb。

    至此MySQL就安装完成了,然后是对MySQL的一些设置。

    2 MySQL数据库设置

      首先启动MySQL

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

      查看MySQL运行状态,运行状态如图:

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

      此时MySQL已经开始正常运行,不过要想进入MySQL还得先找出此时root用户的密码,通过如下命令可以在日志文件中找出密码:

    [root@localhost ~]# grep "password" /var/log/mysqld.log

      如下命令进入数据库:

    [root@localhost ~]# mysql -uroot -p

    备注:

    若登录不了,则进行以下配置,跳过登录验证

    1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:

    vim /etc/my.cnf(注:windows下修改的是my.ini)
    
    

    2.在文档内搜索mysqld定位到[mysqld]文本段:

    
    

    /mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)

    
    

    3.在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:

    保存文档并退出

    按Esc,Shift+q退出编辑,输入!wq 保存退出,

    (当遇到无法退出的情况时:                         

    解决方案:
    1..保存的时候用:w !sudo tee %
    2. 输入密码即可
    3.尝试出入以下命令wq!;q;q! ;x,x!退出            

     

    输入初始密码,此时不能做任何事情,因为MySQL默认必须修改密码之后才能操作数据库:

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new password';

    备注:

    在安装Mysql过程中重置密码时报了这个错误, 原因是没有设置密码时需要在/etc/my.cnf中添加这段时才能操作mysql

    #跳过密码验证

    skip-grant-tables

    但是添加完这句后操作mysql又报了这个错误, 这就成了一个死循环, 最后发现了解决办法, 

    先执行  

    flush privileges;

    再执行sql语句, 成功了

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';

    小贴士:
    mysql> select user,host from user;
    
    

    注意我的root,host是'%'

    你可能执行的是:

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的密码';


    改成:

    ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '你的密码';

    备注:

    1.登陆成功后输入命令的时候,发现总是提示:

    You must reset your password using ALTER USER statement before executing this statement.
    

    翻译过来就是:在执行此语句之前,必须使用 ALTER USER 语句重置密码。因第一次安装,给的是随机密码,登陆成功后需要第一时间改成自己的密码。
    第一次安装登陆后只能使用 ALTER USER 修改密码
    MySQL 5.7 在初始安装后(CentOS7 操作系统)会生成随机初始密码,并在 /var/log/mysqld.log 中有记录,可以通过 cat 命令查看,找 password 关键字

    修改密码方式

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'password'; //记得修改自己的账户
    flush privileges; //修改成功后刷新权限
    quit; //最后退出
    

    普及一下 mysql 修改密码的两种方法:ALTER USER 和SET PASSWORD

    ALTER USER

    mysql 推荐使用 ALTER USER

    基本使用:

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';
    

    修改当前登陆用户密码

    ALTER USER USER() IDENTIFIED BY '123456';
    

    设置密码过期

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE;
    

    设置密码永不过期

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER;
    

    设置密码按照默认过期的时间

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE DEFAULT;
    

    设置密码指定的过期时间

    ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE INTERVAL 90 DAY;
    

    SET PASSWORD

    mysql 默认加密方法

    SET PASSWORD FOR 'root'@'localhost'  = '123456'
    

    mysql 中的 password 函数加密方法

    update user set authentication_string = password('123456'), password_expired = 'N', password_last_changed = now() where user = 'root';

    这里有个问题,新密码设置的时候如果设置的过于简单会报错:

      原因是因为MySQL有密码设置的规范,具体是与validate_password_policy的值有关:

     

      MySQL完整的初始密码规则可以通过如下命令查看:

    复制代码
    复制代码
    mysql> SHOW VARIABLES LIKE 'validate_password%';
    +--------------------------------------+-------+
    | Variable_name                        | Value |
    +--------------------------------------+-------+
    | validate_password_check_user_name    | OFF   |
    | validate_password_dictionary_file    |       |
    | validate_password_length             | 4     |
    | validate_password_mixed_case_count   | 1     |
    | validate_password_number_count       | 1     |
    | validate_password_policy             | LOW   |
    | validate_password_special_char_count | 1     |
    +--------------------------------------+-------+
    7 rows in set (0.01 sec)
    复制代码
    复制代码

      密码的长度是由validate_password_length决定的,而validate_password_length的计算公式是:

    validate_password_length = validate_password_number_count + validate_password_special_char_count + (2 * validate_password_mixed_case_count)

    我的是已经修改过的,初始情况下第一个的值是ON,validate_password_length是8。可以通过如下命令修改:

    mysql> set global validate_password_policy=0;
    mysql> set global validate_password_length=1;

      设置之后就是我上面查出来的那几个值了,此时密码就可以设置的很简单,例如1234之类的。到此数据库的密码设置就完成了。

      但此时还有一个问题,就是因为安装了Yum Repository,以后每次yum操作都会自动更新,需要把这个卸载掉:

    [root@localhost ~]# yum -y remove mysql80-community-release-el7-3.noarch
    

     备注:

    1.解决方案
    1.1 对于5.7版本的mysql,即可解决问题
    set global validate_password_policy=0;
    set global validate_password_length=1;
     
    1.2对于8.0版本的解决方案 
    如果服务器安装的是8.0版本的mysql,使用5.7的解决方案,则会出现以下报错信息
    
    ERROR 1193 (HY000): Unknown system variable 'validate_password_policy'
    
    ERROR 1193 (HY000): Unknown system variable 'validate_password_length'
    
    原因:8.0版本的mysql这两个变量是不存在的,已经替换成其他的变量名了
    
    查看8.0版本的变量名
    
    SHOW VARIABLES LIKE 'validate_password%';
    
    所以使用以下命令进行配置修改
    
    set global validate_password.policy=0;
    set global validate_password.length=1;

    参考原贴申明:https://www.cnblogs.com/nicknailo/articles/8563737.html

  • 相关阅读:
    PostgreSQL数据库逻辑复制实践
    CentOS7通过yum安装postgreSQL
    MongoDB动态建表方案(官方原生驱动)
    7大常用开源数据库利弊全对比
    错误:由于系统时间错误证书验证失败导致更新不成功
    deppin更新提示“由于没有公钥,无法验证下列签名”
    Debian 9 Vim无法使用鼠标右键复制 解决方法
    PHP版滑动时间窗口算法
    RabbitMQ PHP 代码示例
    创建或修改 docker 容器内部文件
  • 原文地址:https://www.cnblogs.com/elfin/p/11379207.html
Copyright © 2011-2022 走看看