zoukankan      html  css  js  c++  java
  • Linux CentOS 7离线安装MySQL 5.7【已验证】

    https://blog.csdn.net/qq_43228581/article/details/115174122

    下载
    链接:https://pan.baidu.com/s/1nCkiD7LsAct_vHqXyFq7lQ
    提取码:98j3
    把安装包mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz 拷贝到 离线生产环境/usr/local目录下

    安装

    2.1 创建用户
    为了方便数据库管理,对于安装的MySQL数据库,生产上我们都会建立一个mysql用户和mysql用户组:

    # 添加mysql用户组
    groupadd mysql

    # 添加mysql用户
    useradd -g mysql mysql -d /home/mysql

    # 修改mysql用户的登陆密码
    passwd mysql

    yfz@2020

    卸载:

    rpm -qa | grep mariadb

    rpm -e mariadb-libs-5.5.41-2.el7_0.x86_64 --nodeps



    2.2 解压缩
    cd /usr/local/

    tar -xzvf mysql-5.7.13-linux-glibc2.5-x86_64.tar.gz

    # 改名为mysql
    mv mysql-5.7.13-linux-glibc2.5-x86_64 mysql

    并赋予用户读写权限(此处也可以换位你的用户)

    chown -R mysql:mysql mysql/


    2.3 创建配置文件
    vim /etc/my.cnf

    复制以下内容:

    [client]
    port = 3306
    socket = /tmp/mysql.sock

    [mysqld]
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    basedir=/usr/local/mysql
    datadir=/usr/local/mysql/data
    socket=/tmp/mysql.sock
    log-error=/var/log/mysqld.log
    pid-file=/var/run/mysqld/mysqld.pid
    #不区分大小写
    lower_case_table_names = 1

    sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

    max_connections=5000

    default-time_zone = '+8:00'


    2.4 初始化文件
    初始化log文件,防止没有权限。
    #手动编辑一下日志文件,什么也不用写,直接保存退出
    cd /var/log/

    vim mysqld.log

    :wq 或  touch mysqld.log

    chmod 777 mysqld.log
    chown mysql:mysql mysqld.log

    初始化pid文件,防止没有权限。
    #手动编辑一下日志文件,什么也不用写,直接保存退出
    cd /var/run/mysqld

    touch mysqld.pid
    # 给权限
    chmod 777 mysqld.pid

    chown -R mysql:mysql mysqld.pid

    初始化数据库
    # 初始化数据库,并指定启动mysql的用户,否则就会在启动MySQL时出现权限不足的问题
    /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US


    初始化完成后,在my.cnf中配置的datadir目录(/var/log/mysqld.log)下生成一个error.log文件,里面记录了root用户的随机密码。

    cat /var/log/mysqld.log
    执行后记录最后一行:root@localhost: xxxxx 。 这里的xxxxx就是初始密码。后面登入数据库要用到

    2.5 启动数据库
    启动数据库

    #源目录启动:
    /usr/local/mysql/support-files/mysql.server start

    -----------------------------------------------------------

    首先描述下遇到的问题
    重启linux系统之后 mysql 需要手动启动,

    执行命令: service mysqld start

    执行后就报错了:Starting MySQL. ERROR! The server quit without updating PID file (/var/run/mysqld/mysqld.pid).

    解决方案:
    在/var/run/mysqld/目录下 创建mysqld.pid 文件

    1.cd /var/run/mysqld/

    2.touch mysqld.pid

    3.chmod -R 777 /var/run/mysqld/ (给mysqld文件夹以及下面的子文件或者文件夹赋予 读写可执行权限)

    4.service mysqld start

    执行后成功

    Starting MySQL. SUCCESS!
    -------------------------------------------------------------

    并设置开机自启动服务:

    # 复制启动脚本到资源目录
    cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld

    # 增加mysqld服务控制脚本执行权限
    chmod +x /etc/rc.d/init.d/mysqld

    # 将mysqld服务加入到系统服务
    chkconfig --add mysqld

    # 检查mysqld服务是否已经生效
    chkconfig --list mysqld

    # 切换至mysql用户,启动mysql,或者稍后下一步再启动。
    service mysqld start

    从此就可以使用service mysqld命令启动/停止服务:

    su mysql

    service mysqld start

    service mysqld stop

    service mysqld restart

    2.6 登陆,修改密码
    必须修改初始的随机密码:

    # 系统默认会查找/usr/bin下的命令;建立一个链接文件。
    ln -s /usr/local/mysql/bin/mysql /usr/bin

    # 登陆mysql的root用户
    mysql -uroot -p
    # 输入上面的默认初始密码(root@localhost: xxxxx)

    # 修改root用户密码为XXXXXX
    set password for root@localhost=password("XXXXXX");

    3 使用mysql
    3.1 用户建立,远程连接

    use mysql;

    update user set host = '%' where user = 'root';

    select host, user from user;

    flush privileges;


    以下命令只需要改动 用户名 和密码:

    grant all privileges on *.* to '新用户名'@'%' identified by '新密码';

    flush privileges;

    其中通配符%表示让该用户可以从任意远程主机登陆。

    如果远程访问失败:
    查看防火墙状态:

    systemctl status firewalld.service
    绿的running表示防火墙开启

    执行关闭命令:

    systemctl stop firewalld.service

    再次执行查看防火墙命令:

    systemctl status firewalld.service
    执行开机禁用防火墙自启命令 :

    systemctl disable firewalld.service

    --资料参考备注信息:

    https://blog.csdn.net/qq_45060236/article/details/105357666?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_title~default-0.no_search_link&spm=1001.2101.3001.4242

    资料参考:

    在my.cnf添加如下配置

    [mysqld]

    sql_mode='NO_AUTO_VALUE_ON_ZERO,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,PIPES_AS_CONCAT,ANSI_QUOTES'

    配置文件加入相应参数[以下会讲到],重启的时候,依然差强人意,甚至给出教程的人并没有亲力亲为的去测试,就张贴了出来,还会带来新的mysql的报错,或者是完全启动报错,今天我就来详细与大家一一说明这些参数,及解决办法。

    sql_mode这个变量,很容易被忽视,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入。在生产环境必须将这个值设置为严格模式,所以开发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。

    sql_mode常用值如下: 

    ONLY_FULL_GROUP_BY:对于GROUP BY聚合操作,如果在 SELECT 中的列,没有在 GROUP BY 中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中。

    NO_AUTO_VALUE_ON_ZERO:该值影响自增长列的插入。默认设置下,插入0或NULL代表生成下一个自增长值。如果用户 希望插入的值为0,而该列又是自增长的,那么这个选项就有用了。

    STRICT_TRANS_TABLES:在该模式下,如果一个值不能插入到一个事务表中,则中断当前的操作,对非事务表不做限制

    NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零

    NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告。

    ERROR_FOR_DIVISION_BY_ZERO:在INSERT或UPDATE过程中,如果数据被零除,则产生错误而非警告。如 果未给出该模式,那么数据被零除时MySQL返回NULL

    NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户

    NO_ENGINE_SUBSTITUTION:如果需要的存储引擎被禁用或未编译,那么抛出错误。不设置此值时,用默认的存储引擎替代,并抛出一个异常

    PIPES_AS_CONCAT:将"||"视为字符串的连接操作符而非或运算符,这和Oracle数据库是一样的,也和字符串的拼接函数Concat相类似

    ANSI_QUOTES:启用ANSI_QUOTES后,不能用双引号来引用字符串,因为它被解释为识别符

    说明介绍完了,但是在8.0中这么设置下依然会报错,原因如下:

    ERROR 1231 (42000): Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

    8.0以上已经取消了NO_AUTO_CREATE_USER这个关键字,删掉sql语句中的这个关键字即可

    最终,/etc/my.cnf 配置文件中  修改  :sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION' 

    重启mysql服务,大功告成!~

  • 相关阅读:
    Spring Boot JDBC 使用教程
    Spring Boot FreeMarker 使用教程
    椭圆曲线ECC ECDH原理&& javacard实现
    java中的强制类型转换:int和byte
    JUnit学习
    java异常处理
    Maven使用
    哈希表问题
    计数排序
    链表Linked List
  • 原文地址:https://www.cnblogs.com/zhoading/p/15306701.html
Copyright © 2011-2022 走看看