zoukankan      html  css  js  c++  java
  • centos8上安装mysql8

    一,下载并解压mysql8

    1,mysql官网

    https://www.mysql.com/

    2,下载到source目录

    [root@yjweb source]# wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.19-linux-glibc2.12-x86_64.tar

    3,解压:

    [root@yjweb source]# tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar
    mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz
    mysql-test-8.0.19-linux-glibc2.12-x86_64.tar.xz
    mysql-router-8.0.19-linux-glibc2.12-x86_64.tar.xz
    [root@yjweb source]# xz
    -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz xz: mysql-8.0.19-linux-glibc2.12-x86_64.tar: File exists
    [root@yjweb source]#
    mv mysql-8.0.19-linux-glibc2.12-x86_64.tar mysql-8.0.19-linux-glibc2.12-x86_64.orig.tar [root@yjweb source]# xz -d mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz [root@yjweb source]# tar -xvf mysql-8.0.19-linux-glibc2.12-x86_64.tar

    说明: 可以看到第一次用xz -d 解压时,因为解压出的文件与我们一开始下载的压缩包文件同名,会报错:File exists

             所以用mv命令把原始文件改名,从.tar改名为   .orig.tar

             看来mysql官方在打包时没想到这个问题

    说明:刘宏缔的架构森林是一个专注架构的博客,地址:https://www.cnblogs.com/architectforest

             对应的源码可以访问这里获取: https://github.com/liuhongdi/

     说明:作者:刘宏缔 邮箱: 371125307@qq.com

    二,移动mysql8到目标位置

    [root@yjweb source]# mv mysql-8.0.19-linux-glibc2.12-x86_64 /usr/local/soft/mysql

    三,创建mysql用户组和用户,用于运行mysql

    [root@yjweb source]# groupadd mysql
    [root@yjweb source]# useradd -g mysql -s /sbin/nologin -M mysql

    说明:

    -M, --no-create-home
               Do no create the user's home directory, even if the system wide setting from /etc/login.defs (CREATE_HOME) is set to yes.

    这个参数的含义是:不创建新用户的home目录

    说明:在linux下如果想找需要使用的参数,随时用man

    [root@yjweb source]# man useradd

    四,创建mysql的data等目录,用于存放数据等

    [root@yjweb source]# mkdir /data/mysql
    [root@yjweb source]# mkdir /data/mysql/data
    [root@yjweb source]# chown mysql.mysql /data/mysql/data
    [root@yjweb ~]# cd /data/mysql
    [root@yjweb mysql]# mkdir log
    [root@yjweb mysql]# chown mysql.mysql log
    [root@yjweb mysql]# mkdir binlog
    [root@yjweb mysql]# chown mysql.mysql binlog
    [root@yjweb mysql]# mkdir var
    [root@yjweb mysql]# chown mysql.mysql var
    [root@yjweb mysql]# mkdir tmp
    [root@yjweb mysql]# chown mysql.mysql tmp

    对/data/mysql下面五个目录的说明:

    data    存放mysql的数据

    log      存放mysql的错误日志和慢查询日志

    binglog  存放mysql的二进制日志

    var       存放mysql的sock 和 pid

    tmp     mysql使用的临时目录

    五,初始化数据库:

    1,执行命令

    [root@yjweb source]# /usr/local/soft/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/soft/mysql/ --datadir=/data/mysql/data/
    2020-03-05T08:51:16.019096Z 0 [System] [MY-013169] [Server] /usr/local/soft/mysql/bin/mysqld (mysqld 8.0.19) initializing of server in progress as process 31730
    2020-03-05T08:51:18.107879Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Tz8OPgiskv#C

    注意:返回信息中那个给root的临时密码,保存好,接下来要用

    2,查看我们指定的数据目录,看是否已有数据写入:

    [sysop@yjweb ~]$ ls /data/mysql/data/

    六,编辑mysql的配置文件

    [root@yjweb source]# vi /etc/my.cnf

    内容:

    [client]
    port = 3306
    socket = /data/mysql/var/mysql.sock
    
    [mysqld]
    
    server-id = 1
    skip_name_resolve = 1
    basedir=/usr/local/soft/mysql
    port = 3306
    
    datadir=/data/mysql/data
    socket=/data/mysql/var/mysql.sock
    log-bin = /data/mysql/binlog/mysql-bin
    pid-file=/data/mysql/var/mysqld.pid
    user=mysql
    
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    character-set-server = utf8mb4
    collation-server = utf8mb4_general_ci
    init_connect='SET NAMES utf8mb4'
    max_connections = 400
    max_allowed_packet = 128M
    
    interactive_timeout = 1800
    wait_timeout = 1800
    
    tmp_table_size = 134217728
    max_heap_table_size = 134217728
    
    default_authentication_plugin=mysql_native_password
    innodb-file-per-table          = 1
    
    log-queries-not-using-indexes  = 1
    slow-query-log                 = 1
    slow-query-log-file            = /data/mysql/log/mysql-slow.log
    long_query_time = 1
    [mysqld_safe] 
    log
    -error=/data/mysql/log/mysqld.log

    七,从命令行临时启动mysql

    [root@yjweb source]# /usr/local/soft/mysql/bin/mysqld_safe
    2020-03-05T09:15:19.193649Z mysqld_safe error: log-error set to '/data/mysql/log/mysqld.log', however file don't exists. Create writable for user 'mysql'.
    [root@yjweb source]# touch /data/mysql/log/mysqld.log
    [root@yjweb source]# chown mysql.mysql /data/mysql/log/mysqld.log
    [root@yjweb source]# /usr/local/soft/mysql/bin/mysqld_safe

    说明:把启动时提示找不到的错误日志文件创建上,

              再次启动即可

    说明:这样启动后会占用一个控制台,另开一个控制台访问即可

             操作完成后把进程kill掉

          例:

     [root@os3-383-24630 ~]# cat /data/mysql/var/mysqld.pid | xargs kill

    说明:后面我们会配置mysql做为daemon启动的启动文件

    八,从客户端登录进去修改密码

    [root@yjweb mysql]# /usr/local/soft/mysql/bin/mysql -u root -p
    Enter password:

    说明:输入我们初始化数据库时系统给出的那个临时密码

    mysql> show databases;
    ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'rootdemopass';
    Query OK, 0 rows affected (0.00 sec)
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.01 sec)

    说明:我们第一次登录后命令不能执行,mysql提示我们要先修改密码

             修改密码后命令可以执行

    说明:这个密码仅供演示使用,大家应该设计一个安全不易被穷举的密码

    九,编辑一个mysql的启动文件

    [root@yjweb var]# vi /usr/local/soft/mysql/support-files/mysql.server

    根据我们上面所做的操作,配置以下两行内容

    basedir=/usr/local/soft/mysql
    datadir=/data/mysql/data

    测试用启动文件来启动mysql服务

    [root@yjweb var]# chmod 740 /usr/local/soft/mysql/support-files/mysql.server
    [root@yjweb var]# /usr/local/soft/mysql/support-files/mysql.server start
    Starting MySQL                                             [  OK  ] 

    十,如何查看已安装的mysql的版本?

    1,查看mysql客户端的版本

    [root@yjweb mysql]# /usr/local/soft/mysql/bin/mysql -V
    /usr/local/soft/mysql/bin/mysql  Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

    2,查看mysql服务端的版本

    [root@yjweb mysql]# /usr/local/soft/mysql/bin/mysqld -V
    /usr/local/soft/mysql/bin/mysqld  Ver 8.0.19 for linux-glibc2.12 on x86_64 (MySQL Community Server - GPL)

    十一,使用systemctl 管理mysql服务

    1,生成service文件

    [root@yjweb ~]# vim /usr/lib/systemd/system/mysqld.service

    内容:

    [Unit]
    
    Description=MySQL Server
    After=network.target
    After=syslog.target
    
    [Service]
    
    User=mysql
    Group=mysql
    Type=forking
    
    PermissionsStartOnly=true
    
    ExecStart= /usr/local/soft/mysql/support-files/mysql.server start
    ExecStop= /usr/local/soft/mysql/support-files/mysql.server stop
    ExecReload= /usr/local/soft/mysql/support-files/mysql.server restart
    
    LimitNOFILE = 5000
    [Install]
    WantedBy=multi-user.target

    2,测试运行情况:

    [root@yjweb ~]# systemctl daemon-reload
    [root@yjweb ~]# systemctl start mysqld
    [root@yjweb ~]# systemctl stop mysqld

    说明:如果service文件有新增或修改,需要做一次daemon-reload

    十二,新建dbweb账号,使可以从127.0.0.1访问

    说明:生产环境中,更多的是从其他服务器上到数据库服务器的访问,是基于ip地址的访问:

    mysql> create user 'dbweb'@'127.0.0.1' identified by 'webdemopass';

    Query OK, 0 rows affected (0.00 sec)

    mysql> grant select,insert,update,delete on demobase.* to dbweb@127.0.0.1;

    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

    十三,mysql sever在生产环境中的账号配置

    原则上应该为每个站创建一个独立的账号:

    例如:dbweb  这个账号: 是用来供前台使用

             dbadm  这个账号: 用来供后台使用

             dbapi    这个账号: 用来供接口站使用

    这个做法的作用: 不使用统一的账号,便于权限的分配

            可以实现权限的隔离,更安全,

            在遇到问题时也更容易排查

    说明:mysql的一个安全管理原则:

            权限分配时,不要随便就分配all privileges权限,

             基本上除管理员之外没有账号需要这么高的权限,

             select,insert,update,delete在生产环境中已经足够了

    十四,查看本地centos的版本

    [webop@yjweb ~]$ cat /etc/redhat-release
    CentOS Linux release 8.0.1905 (Core) 
  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/architectforest/p/12433993.html
Copyright © 2011-2022 走看看