zoukankan      html  css  js  c++  java
  • (0.2.3)Mysql安装——二进制安装

    关键词:mysql安装,二进制安装,基于centos6.5,mysql5.7.x

    Linux平台下二进制方式安装卸载mysql

    本章节:二进制安装mysql

     相关参考资源:https://www.jianshu.com/p/0d628b2f7476

    官方安装文档:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

    目录:5.7.6之后版本

    1、基于Linux平台的Mysql项目场景介绍

    2、mysql数据库运行环境准备-最优配置

    3、如何下载mysql数据库

    4、linux平台下二进制文件方式安装mysql

    4.1、环境检查(libaio包、卸载现有数据库,检查删除现有数据库 rpm -qa |grep mysql,-e参数为删除)

    4.2、安装过程

    (1)下载文件、上传安装程序

    (2)创建用户,组,创建目录

    (3)解压安装程序包 (tar -zxvf file)

    (4)修改权限(授权用户对解压目录的权限) 

    (5)配置环境变量(以便可以直接运行mysql命令,vi ~/.bash_profile) 

    (6)准备参数配置文件 (my.cnf)

      如果一个机器上有安装多个mysql版本,可以在配置文件中[mysql-5.7] 这样,来指定版本的配置参数。

    (7)开始初始化Mysql (mysqld --defaults-file=/mysql/data/3306/my.cnf --initialize --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/data)

      如果是mysql5.6则是(mysql/bin目录下的,./scripts/mysql_install_db --user=mysql --defaults-file=/usr/local/mysql/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/)

      自带有配置文件模板:mysql/bin/support-files/my-default.cnf

    (8)配置启动脚本 (/mysql/app/mysql/support-files/mysql.server)

    (9)启停验证,日志查看 

    【1】使用服务启动与停止mysql(适合单实例,拷贝(8)中修改好的mysql.server文件到 /etc/init.d/ 目录下,生成服务)
    【2】设置mysql服务自启
    【3】重启验证
    【4】使用文件启动与停止mysql(可以适用于单实例、多实例)
    【5】修改配置文件,解决密码过期问题(比较危险,设置了之后连密码都不要,跳过权限表)
    【6】登陆测试

    (10)后期配置(密码修改,启动远程访问) 

    【1】解决密码过期问题的两种方式(配置文件skip-grant-tables,mysql.user表password_expired字段设置)
    【2】修改密码(参考:修改密码的四种方式)
    【3】启用远程连接的2种方式(修改root的host为%,重新授权新建root@%)

    (11)远程连接测试

    (12)删除二进制安装的mysql(停止服务,删除相关数据文件即可)

    【本文5.7.24自动化安装shell脚本】(不可重复跑)

    【相关5.7安装参考笔记】

    5、Linux平台下通过源码方式安装mysql

    6、Linux平台下通过yum方式安装mysql

    7、Linux平台下通过RPM方式安装mysql

    8、mysql安装后的配置与运行参数设置

    9、mysql安装后的测试与远程连接

    10、mysql基本管理命令

    11、Linux平台如何卸载mysql版本

    思路:

    【1】环境检查

    【1.1】libaio

      检查,libaio(异步包要装好),没装的话直接挂载光驱里的操作系统iso文件,做yum源安装(详情见:(0.2.1)mysql数据库环境-操作系统配置  2.4Yum源配置

        

    #不同版本安装的时候可能会缺少libaio.so.1文件
    
      使用 wget http://mirror.centos.org/centos/6/os/x86_64/Packages/libaio-0.3.107-10.el6.x86_64.rpm 
      rpm -ivh libaio-0.3.107-10.el6.x86_64.rpm 可以安装缺少的文件

    【1.2】删除系统自带的mysql 、mariadb

        rpm -qa|grep mysql  #检查是否有

        rpm -qa|grep mariadb   #检查是否有

        rpm -e --nodeps mysql-libs-5.1.71-1.el6.x86_64   #用这个方式以此删除所有的,如有依赖报错可能需要先删除另外一个

        

          如果这种报错就使用  --nodeps参数,或者直接 yum remove mysql*    

      

    【2】安装过程

    【2.1】下载文件、上传安装程序

    
    
      mkdir -p /mysql/app
    
      使用CRT上传、XSHELL等工具上传到该目录,这里只做了CRT链接,其他工具具体可以百度。
    
    

    【2.2】创建用户,组,创建目录

    groupadd mysql
    
    useradd mysql -r -g mysql -s /sbin/false  
    
    mkdir -p /mysql/data/3306/data
    
    mkdir -p /mysql/log/3306
    
        useradd -r:添加系统用户  -g:指定分组  -s:指定登录的shell,这里操作是不让它登录OS

    【2.3】解压安装程序包

        cd /mysql/app

      tar -zxvf 安装包名(比如我这里如下)

         tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz

      解压后如图

      为了保护原有文件名好识别版本等信息,再做个软链接,

        ln -s mysql-5.7.24-linux-glibc2.12-x86_64 mysql,软链接如下 mysql->mysql-5.7.24…………

        

      --进入解压出来的文件,查看mysql二进制包目录信息

        cd /mysql      #通过软链接进入

        

        【README】:读这个文件了解Mysql情况  【share】:放一些错误的信息,比如数据字典和SQL的安装

        【support-files】:mysql的支持文件

    【2.4】修改权限(授权用户对解压目录的权限)

        chown -R mysql:mysql /mysql      #把Mysql目录的拥有者设置为mysql用户   -R 为递归,表示/mysql即mysql下所有文件/文件夹均生效

    【2.5】配置环境变量(以便可以直接运行mysql命令)

        vi ~/.bash_profile

      在PATH后面加上  ':' 再加上mysql/bin目录的绝对路径即可

      

      配置完后,记得source ~/.bash_profile ,这样才能立马生效

       PS小建议:

        #全局环境变量:也可以使用该句:echo "export PATH=/mysql/app/mysql/bin:$PATH">>/etc/profile ,source /etc/profile

        #这样可以避免安装了多个Mysql版本而使用的mysql/mysqld/mysqldump等等bin目录下的命令是用的其他版本的)

                         

    【2.6】准备参数配置文件

      (1)查看参数配置文件访问启动路径

        mysql --help |grep my.cnf

        

        参数文件默认读取顺序:【1】/etc/my.cnf  【2】/etc/mysql/my.cnf  【3】/usr/local/mysql/my.cnf  【4】~/.my.cnf

      

    #以下参考命令可以在启动时指定配置文件/参数文件的路径
    mysqld_safe
    --default-file=/mysql/data/3306/my.cnf &

      (2)参数文件配置:【my.cnf简单配置参考文章1】【详细配置参考:非常全面的配置与思考详细配置与思考

      

    [client]
    port = 3306
    socket = /mysql/data/3306/mysql.sock
    default-character-set=utf8
    
    [mysql]
    disable-auto-rehash #允许通过TAB键提示
    default-character-set = utf8
    connect-timeout = 10
    
    [mysqld]
    server-id = 3306
    port = 3306
    user = mysql
    socket = /mysql/data/3306/mysql.sock
    pid-file = /mysql/data/3306/mysql.pid
    basedir = /mysql/app/mysql/
    datadir = /mysql/data/3306/data
    #bind_address = 10.10.10.11
    autocommit = 0
    
    character-set-server=utf8
    explicit_defaults_for_timestamp=true
    lower_case_table_names=1
    back_log=103
    max_connections=10000
    max_connect_errors=100000
    table_open_cache=512
    external-locking=FALSE
    max_allowed_packet=32M
    sort_buffer_size=2M
    join_buffer_size=2M
    thread_cache_size=51
    query_cache_size=32M
    #query_cache_limit=4M
    transaction_isolation=READ-COMMITTED
    tmp_table_size=96M
    max_heap_table_size=96M
    
    
    ###***logs
    long_query_time = 10
    slow_query_log = 1
    slow_query_log_file=/mysql/log/3306/slow.log
    
    #log-warnings = 1
    log_error_verbosity=3
    
    log-error = /mysql/log/3306/mysql.err
    log_output = FILE #参数log_output指定了慢查询输出的格式,默认为FILE,你可以将它设为TABLE,然后就可以查询mysql架构下的slow_log表了
    
    
    #log-queries-not-using-indexes
    #log-slow-slave-statements
    #general_log = 0
    #general_log_file = /mysql/log/3306/mysql.log
    #max_binlog_size = 1G
    #max_relay_log_size = 1G
    
    
    ## replication
    #log-bin=mysql-bin
    #server-id=1
    #binlog_format= ROW
    #gtid_mode = on
    #enforce_gtid_consistency = 1
    #log_slave_updates   = 1
    #master-info-repository=TABLE
    #relay-log-info-repository=TABLE
    
    #  innodbstorageengineparameters
    innodb_buffer_pool_size=1G
    innodb_data_file_path=ibdata1:1G:autoextend:max:5G #redo
    innodb_temp_data_file_path = ibtemp1:200M:autoextend:max:10G
    #innodb_file_io_threads=4  #默认的是4
    innodb_log_buffer_size=16M
    innodb_log_file_size=256M  #undo
    innodb_log_files_in_group=2
    innodb_lock_wait_timeout=50
    innodb_file_per_table=1      #独立表空间
    my.cnf

     5.6中,需要把auto_commit 参数先注释掉,才能安心初始化。初始化安装完成后,可以把该参数再加上。

      

       在/mysql/data/3306/ 下新建my.cnf文件,然后把上述代码复制进文件

      (3)然后要重新授权,因为当前登录是root账户,新文件属于root

    #创建文件
    vi  /mysql/data/3306/my.cnf
    
    #张贴代码
    
    #创建错误日志文件(不创建可能起不来)
    touch /mysql/data/3306/mysql.err
    
    #授权
    chown -R mysql:mysql /mysql/log/3306/

    【2.7】开始初始化Mysql 

      mysqld --defaults-file=/mysql/data/3306/my.cnf --initialize --user=mysql --basedir=/mysql/app/mysql --datadir=/mysql/data/3306/data 

     #如果是mysql5.6则是(mysql/bin目录下的,./scripts/mysql_install_db --user=mysql --defaults-file=/usr/local/mysql/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/)
     #自带有配置文件模板:mysql/bin/support-files/my-default.cnf
    #其他相关信息安装方面一致

    ############  这一步可以省略 开始 ########################

    【2.8】配置启动脚本(把数据库配置成服务以便可以使用 service mysql start 启动)

      【1】查看启动路径,mysql --help |grep my.cnf

      

      【2】修改源码文件  /mysql/app/support-script/mysql.server 

        1) cp mysql.server mysql

        2) vi mysql(这一步可以省略)

        对照修改查看。

             

        把引用参数文件的路径由【1】中的默认路径更改为自定义路径。即在下图加上--defaults-file=/mysql/data/3306/my.cnf  (即自定义的参数文件路径)

        

      

     ######################这一步可以胜率  结束 ##################################

    【2.9】启停验证,日志查看

      

      (1)使用服务启动与停止mysql(适合单实例)

        拷贝修改的名为  mysql  的文件到 etc/init.d 目录下下去(这个目录里面包含了一系列系统里面服务的开启和停止的脚本,并且文件名即服务名)

        cp mysql.server mysql

        cp mysql /etc/init.d    

        ln -s /mysql/data/3306/my.cnf /etc/my.cnf  #做软连接,以便可以把mysql当做linux系统服务启动

         设置好后,

        启动命令:service mysql start (如果是centos7以上则是,systemctl start mysql.service)

        关闭命令:service mysql stop (如果是centos7以上则是,systemctl stop mysql.service)

         本文是centos6.5,操作如下:

       

      (2)设置mysql服务自启

        

        如果是关闭的就可以设置如下代码增加自启(详细参考:linux服务管理与启停

        chkconfig --level 2345 mysql on 

       (3)重启验证

        ps -ef |grep mysql

        

       (4)使用文件启动与停止mysql(可以适用于单实例、多实例)

        新建一个文件,用mysql_safe的方式启动mysql实例(语句可以从上面的ps -ef |grep mysql 中获取)

        

        用sqladmin关闭,sqladmin -uroot -p shutdown,发现失败了,说sock文件不存在!

        

         

        那么这里,我们发现ps -ef| grep mysql 这上面显示了sock文件在哪里,我们用-S参数加上。然后用mysqladmin 关闭,这里使用的是系统初始化后的默认密码;

        sock文件说不存在与/tmp/mysql.sock,可以直接软连接 ln -s /mysql/data/3306/mysql.sock /tmp/mysql.sock

        这里提示我们密码过期了,要我们修改才行。

      (5)修改配置文件,解决密码过期问题(比较危险,设置了之后连密码都不要,跳过权限表)

        [mysqld]下面增加一行

        skip-grant-tables

      (6)登陆测试

        1)直接使用mysql登陆,发现又要管sock(密码再错误日志中)

          

        2)解决每次都要使用 -S /sock目录 参数

          把我们的sock文件,做一个软链接到 /tmp 目录下去

          ln -s /mysql/data/3306/mysql.sock /tmp

          

          成功

          

    【2.10】后期配置(密码修改,启动远程访问)

      【1】解决密码过期问题的两种方式(配置文件,mysql.user表password_expired字段设置)

        1)修改my.cnf配置文件:[mysqld]下面增加一行skip-grant-tables  (比较危险,设置了之后连密码都不要,跳过权限表)

        2)mysql.user表password_expired字段设置为N

      【2】修改密码(参考:修改密码的四种方式

        1)set password = password('123456');     flush privileges;

        2)mysqladmin -u用户名 -p旧密码 password 新密码 

        3)update mysql.user set password=password('123') where user='root' and host='localhost';  

      【3】启用远程连接的2种方式(修改root的host为%,重新授权新建root@%)

         1)在本机登入mysql后,更改“mysql”数据库里的“user”表里的“host”项,从”localhost”改为'%'。

    select host,user from mysql.user where user='root';
    update mysql.user set host = '%' where user ='root'; flush privileges;

        2)授权新建一个主机为%的root账户   

    grant all privileges on *.* to 'root'@'%' identified by '123456' with option;
    flush privileges;

    (11)远程连接测试

    【2.11】如何删除二进制安装的mysql

    (参考:https://www.cnblogs.com/kerrycode/p/4364465.html

      1)停止服务

      2)删除所有相关目录即可

      本文需要清理的就是

       /mysql/data/

       /mysql/log/

      /mysql/app/

      /etc/init.d/mysql

    【本文5.7.24自动化安装shell脚本】(不可重复跑)  

    前提:

      (1)把mysql二进制安装文件放在 根目录(/)

      (1)把mysql 配置文件my.cnf放在 根目录(/)

    #!/bin/bash
    #the mysql install file in path: /mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
    
    echo 'begin check mysql exist......' |tee -a 1.txt
    flag=`rpm -qa|grep mysql -c`
    mysql_name=`rpm -qa|grep mysql`
    if [ ${flag} -ne 0 ];then
        echo -n 'begin delete old mysqlinfo......'|tee -a 1.txt
        rpm -e --nodeps ${mysql_name} 2>>1.txt
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi
    fi
    
    
    echo -n 'begin add group mysql......'|tee -a 1.txt
        groupadd mysql
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi
    
    echo -n 'begin add user mysql......'|tee -a 1.txt
        useradd mysql -r -g mysql -s /bin/false
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi
        
        
    echo -n 'begin mkdir mysql dir......'|tee -a 1.txt
        mkdir -p /mysql/app
        mkdir -p /mysql/data/3306
        mkdir -p /mysql/log/3306
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi
    
    echo -n 'cp /mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz to /mysql/app......'|tee -a 1.txt
        cp /mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz /mysql/app/
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi
            
    
    echo -n 'cp /mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz to /mysql/app......'|tee -a 1.txt
        cp /mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz /mysql/app/
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi    
        
    echo -n 'uncompression mysql install file......'|tee -a 1.txt
        cd /mysql/app 
        tar -zxvf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi    
    
    echo -n 'create ln -s mysql_install_dir to mysql......'|tee -a 1.txt
        ln -s mysql-5.7.26-linux-glibc2.12-x86_64 mysql
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi    
        
    echo -n 'configure the $path......'|tee -a 1.txt
        echo 'export PATH=/mysql/app/mysql/bin:$PATH'>>/etc/profile
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi        
        source /etc/profile
    
    echo -n 'cp /my.cnf to /etc/my.cnf......'|tee -a 1.txt
        cp /my.cnf /etc/my.cnf
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi        
    
    echo -n 'mysqld --initialize --user=mysql......'|tee -a 1.txt
        mysqld --initialize --user=mysql
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi        
    
    
    echo -n 'cp my.server file to /etc/init.d/mysql......'|tee -a 1.txt
        cp /mysql/app/support-script/mysql.server /etc/init.d/mysql
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi        
    
    echo -n 'chkconfig mysql on......'|tee -a 1.txt
        chkconfig mysql on
        if [ $? -eq 0 ];then
            echo 'OK'|tee -a 1.txt    
        else
            echo 'Failed'|tee -a 1.txt
            exit
        fi    
    
    echo -n 'start mysql service ......'|tee -a 1.txt
        flag=`service mysql status |grep SUCCESS -c`
        if [ ${flag} -ne 0 ];then
            echo -n 'ok'|tee -a 1.txt
        else
            service mysql start
            if [ $? -eq 0 ];then
                echo 'OK'|tee -a 1.txt
            else
                echo 'Failed'|tee -a 1.txt
                exit
            fi
        fi
        

    【相关5.7安装参考笔记】

    #!/bin/sh
    #建立用户组
    groupadd mysql
    #建立用户
    useradd -r -g mysql mysql
    #切换到解压路径,解压二进制mysql包
    cd /usr/local
    if [ -d mysql-5.7.9-linux-glibc2.5-x86_64 ]; then 
    echo "mysql folder is exists"
    else
    tar -xzvf  mysql-5.7.9-linux-glibc2.5-x86_64.tar.gz
    fi
    #做软链接起名为mysql
    ln -s  mysql-5.7.9-linux-glibc2.5-x86_64 mysql
    #切换到mysql(mysql二进制安装文件 解压出来的软连接目录)目录下
    cd mysql
    #添加环境变量
    echo "export PATH=/usr/local/mysql/bin:$PATH">>/etc/profile
    #重新引用环境变量以便即时生效
    source /etc/profile
    #关防火墙
    service iptables stop
    chkconfig iptables off
    
    #构造mysql自定义目录
    if [ -d mysql-files ]; then
    echo "mysql-files is exists"
    else
    mkdir mysql-files
    fi
    chmod 770 mysql-files
    chown -R mysql .
    chgrp -R mysql .
    if [ -d data ]; then
    mv data data_$(date+%Y%m%d)
    else 
    echo "data is not exist"
    fi
    #初始化mysql,根据默认配置文件/etc/my.cnf or /etc/mysql/my.cnf  or ./my.cnf
    ./bin/mysqld --initialize --user=mysql
    
    #修改所有者权限
    chown -R root .
    chown -R mysql data mysql-files
    #启动mysql
    ./bin/mysqld_safe --user=mysql &
    #复制mysql.server文件以便成为服务
    cp -rf support-files/mysql.server /etc/init.d/mysql.server
    #./usr/local/mysql/support-files/mysql.server stop
    ps -ef|grep mysql|grep -v grep |awk -F' ' '{print $2}'|xargs kill -s 9
           #serivce mysql stop
    ./bin/mysqld_safe --skip-grant-tables &
          #service mysql start
          #./usr/local/mysql/support-files/mysql.server start
    mysql -uroot -p
    use mysql;
    update mysql.user set authentication_string=password('123456') where user='root';
    flush privileges;
    quit;
    
    mysql -uroot -p123456
    set password for 'root'@'localhost'=password("123456");
    flush privileges;

    15.安装完成后的优化(删除多余数据库与账户)

    15.1、查看数据库的版本信息

    1
    2
    3
    4
    5
    6
    7
    MariaDB [(none)]> select version();
    +----------------+
    | version()      |
    +----------------+
    | 5.5.52-MariaDB |
    +----------------+
    1 row in set (0.18 sec)

    15.2、删除多余的账号(除root和localhost的)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    MariaDB [(none)]> use mysql
    MariaDB [mysql]> select user,host from mysql.user;
    +------+------------------------+
    | user | host                   |
    +------+------------------------+
    | root | 127.0.0.1              |
    | root | ::1                    |
    |      | localhost              |
    | root | localhost              |
    |      | lvs-dr01.saltstack.com |
    | root | lvs-dr01.saltstack.com |
    +------+------------------------+
    6 rows in set (0.03 sec)
    MariaDB [mysql]> delete from mysql.user where (user,host) not in (select 'root','localhost');
    Query OK, 5 rows affected (0.05 sec)
    MariaDB [mysql]> select user,host from mysql.user;
    +------+-----------+
    | user | host      |
    +------+-----------+
    | root | localhost |
    +------+-----------+
    1 row in set (0.05 sec)

    15.3、修改mysql默认的mysql管理账号

    修改默认的mysql管理账号(root改为mysql,并设置新密码为redhat12345)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    MariaDB [mysql]> update user set user="admin" where user="root";
    MariaDB [mysql]> update mysql.user set user='admin',password=password('redhat12345');
    Query OK, 1 row affected (0.08 sec)
    Rows matched: 1  Changed: 1  Warnings: 0
    MariaDB [mysql]> flush privileges;
    Query OK, 0 rows affected (0.03 sec)
    [root@LVS-DR01 ~]# mysql -uadmin -p'redhat12345'
    MariaDB [(none)]> user mysql;
    MariaDB [mysql]> show tables;

    继续查询:

    1
    2
    3
    4
    5
    6
    7
    MariaDB [mysql]> select user,host from mysql.user;
    +-------+-----------+
    | user  | host      |
    +-------+-----------+
    | admin | localhost |
    +-------+-----------+
    1 row in set (0.00 sec)

    15.4、删除test数据库

    为什么要删?新建MySQL数据库后,默认创建的test数据库权限比较怪异,所有可连接的用户都能够拥有权限访问该库

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    MariaDB [mysql]> drop database test;
    MariaDB [mysql]> flush privileges;
    MariaDB [(none)]> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    +--------------------+
    3 rows in set (0.06 sec)

    15.5、优化权限字典表mysql.db

    如下所示:新建MySQL数据库后,默认创建的test数据库权限比较怪异,所有可连接的用户都能够拥有权限访问该库,并操作其中的对象,Host为%,User为空,说明了不受限制,所有能连接到MySQL的用户,全部拥有test及test开头的数据库的几乎所有权限。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    MariaDB [mysql]> select * from mysql.db where db like 'test%' G
    *************************** 1. row ***************************
                     Host: %
                       Db: test
                     User: 
              Select_priv: Y
              Insert_priv: Y
              Update_priv: Y
              Delete_priv: Y
              Create_priv: Y
                Drop_priv: Y
               Grant_priv: N
          References_priv: Y
               Index_priv: Y
               Alter_priv: Y
    Create_tmp_table_priv: Y
         Lock_tables_priv: Y
         Create_view_priv: Y
           Show_view_priv: Y
      Create_routine_priv: Y
       Alter_routine_priv: N
             Execute_priv: N
               Event_priv: Y
             Trigger_priv: Y
    *************************** 2. row ***************************
                     Host: %
                       Db: test\_%
                     User: 
              Select_priv: Y
              Insert_priv: Y
              Update_priv: Y
              Delete_priv: Y
              Create_priv: Y
                Drop_priv: Y
               Grant_priv: N
          References_priv: Y
               Index_priv: Y
               Alter_priv: Y
    Create_tmp_table_priv: Y
         Lock_tables_priv: Y
         Create_view_priv: Y
           Show_view_priv: Y
      Create_routine_priv: Y
       Alter_routine_priv: N
             Execute_priv: N
               Event_priv: Y
             Trigger_priv: Y
    2 rows in set (0.31 sec)
    优化的操作:
    MariaDB [mysql]> truncate table mysql.db;
    Query OK, 0 rows affected (0.01 sec)
    MariaDB [mysql]> select * from mysql.db where db like 'test%' G
    Empty set (0.00 sec)

    15.6、如何优化/root/.mysql_history文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    [root@LVS-DR01 ~]# tail -20 ~/.mysql_history 
    flush privileges;
    select user,host from mysql.user;
    delete from mysql.user where user="'molewan1'@'10.10.10.%'";
    delete from mysql.db where user='molewan1'@'10.10.10.%';
    select user,host from mysql.user;
    delete from mysql.user where user=molewan1;
    delete from mysql.user where user='molewan1@10.10.10.%';
    flush privileges;
    select user,host from mysql.user;
    delete from mysql.user where user="molewan1" and host ="10.10.10.%";
    flush privileges;
    select user,host from mysql.user;
    delete from mysql.user where user="molewan" and host="10.10.10.%";
    flush privileges;
    create user molewan@'10.10.10.%' identified by 'molewan';
    select user,host from mysql.user;
    desc mysql.user;
    update mysql.user set password=password('admin') where user='admin' and host='localhost';
    flush privileges;
    q

    说明:在Linux/Unix系统下,使用mysql命令行工具执行的所有操作,都会被记录到一个名为.mysql_history的文件中,该文件默认保存在当前用户的根目录下

    这个设定原本是为了提升mysql命令行操作体验,在mysql中操作命令就可以上下翻动了,但某些情况下缺会造成隐患。

    15.7、如何历史记录消除隐患

    1
    2
    3
    4
    5
    6
    7
    8
    方法1:基于DB层的操作
    修改MYSQL_HISTFILE环境变量,将其值改为/dev/null,这样所有的操作都会被输出到空,操作的历史
    自然不会被保留。
    方法2:基于系统层操作
    仍旧保留这个文件,但是改文件实际上未/dev/null的软链接,这样所有的操作都会被输出到空,操作的历史自然不会被保留。
    ln -f -s /dev/null ~/.mysql_history
    [root@LVS-DR01 ~]# tail -20 ~/.mysql_history 
    这时候就没有输出了

    到此,安装完成后的基本优化已经完成

  • 相关阅读:
    CSS盒子模型
    getContextPath、getServletPath、getRequestURI、request.getRealPath的区别
    MYSQL中的CASE WHEN END AS
    单点登录的精华总结
    git&github
    June 21st 2017 Week 25th Wednesday
    June 20th 2017 Week 25th Tuesday
    June 19th 2017 Week 25th Monday
    June 18th 2017 Week 25th Sunday
    June 17th 2017 Week 24th Saturday
  • 原文地址:https://www.cnblogs.com/gered/p/10306757.html
Copyright © 2011-2022 走看看