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) 
  • 相关阅读:
    AFNetworking 使用
    AFNetWork 请求https
    Label加下滑线
    iOS 学习资料
    调用系统的打电话,发短信,邮件,蓝牙
    NSObject
    本地消息和消息推送
    AFNNetworking 中json格式不标准的解决办法
    UitableView 动态高度的优化 提高寻星效率
    cell 高度的计算
  • 原文地址:https://www.cnblogs.com/architectforest/p/12433993.html
Copyright © 2011-2022 走看看