• (0)linux下的Mysql安装与基本使用(编译安装)


    一、大致操作步骤

      环境介绍:

           OS:center OS6.5

      mysql:5.6版本

      

    1.关闭防火墙

        查看防火墙状态:service iptables status

        

        这样就意味着没有关闭。

        运行以下命令关闭防火墙  service iptables stop,然后再次查看防火墙状态

        

           

        运行这条命令,可以彻底关闭:chkconfig iptables off

        运行:vi /etc/selinux/config

        

        这个改成disabled

    2.修改配置文件

        more /etc/sysctl.conf

    3.检查是否安装了mysql

        rpm -qa |grep mysql

        

        已经装了,那卸载装5.6吧,发现报错,说是有依赖,不能直接删

        

         那么我们用:yum remove mysql*    

    4.下载mysql包

    4.1 下载

        进入www.mysql.com,然后选择download

           

        然后找到社区版

          

        然后我们找到社区版的服务

            

        然后找到我们要找的版本

        

        选择源码编译和常用Linux操作系统

        

    4.2 上传并且安装

     【1】在虚拟机中挂载光驱,设置光驱就不细说了,看图

        

      【2】挂载

        mount /dev/cdrom /mnt   

        #把光盘挂载到  /mnt目录下

      【3】复制到本地  

        mkdir -p /redhat/mnt

        cp -r/mnt /redhat/mnt

      【4】配置yun源

        cd /etc/yum.repos.d/

        ll

         

         #新建一个文件

        vim base.repo

        

        

         

        #安装好rz,选择mysql文件即上传到当前目录去了。

        yum install -y lrzsz

        rz

          

    5.添加用户和组

        groupadd mysql    # (useradd:http://man.linuxde.net/useradd)

        useradd -d /home/mysql -g mysql -m mysql    #建立好之后可以用id mysql查看

        su - mysql       #切换到mysql用户

    6.配置环境变量     

           vim  ~/.bash_profile       #配置mysql环境变量

         

        #我准备把mysql放在这个目录下面

    7.创建目录及授权

          #然后构建mysql数据目录

    mkdir -p /u01/my3306/data
    mkdir -p /u01/my3306/log/iblog
    mkdir -p /u01/my3306/log/binlog
    mkdir -p /u01/my3306/run
    mkdir -p /u01/my3306/tmp

        #用户授权/目录授权

        chown -R mysql:mysql /u01/my3306/
        chmod -R 755 /u01/my3306/

    8.压缩mysql5.6

      tar -xzvf mysql-5.6.41.tar.gz     

       

    9.配yum源,安装cmake

       #这里我们的4.2步骤已经配置yum源

      yum install -y cmake gcc gcc-c++ ncurse-devel bison zlib libxml openssl

      #解析:(1)gcc gcc-c++:编译用 (2)ncurse-devel:用于终端操作开发包 (3)bison:mysql的语法解析 (4)zlib :用zlib进行压缩 (5)libxml :以xml方式输出支持 (6)openssl:安全套接字通信

    10.编译并安装

      (1)进入mysql解压后的目录(因为 cmake目录在这里)

      (2)编译

      rm CMakeCache.txt    #先把源码目录中清理一下这个文件

      然后在执行如下命令:

    cmake 
    -DCMAKE_INSTALL_PREFIX=/u01/my3306 
    -DMYSQL_UNIX_ADDR=/u01/my3306/run/mysql.sock 
    -DDEFAULT_CHARSET=utf8 
    -DDEFAULT_COLLATION=utf8_general_ci 
    -DWITH_MYISAM_STORAGE_ENGINE=1 
    -DWITH_INNOBASE_STORAGE_ENGINE=1 
    -DWITH_ARCHIVE_STORAGE_ENGINE=1 
    -DWITH_BLACKHOLE_STORAGE_ENGINE=1 
    -DWITH_MEMORY_STORAGE_ENGINE=1 
    -DWITH_READLINE=1 
    -DENABLED_LOCAL_INFILE=1 
    -DMYSQL_DATADIR=/u01/my3306/data
    -DMYSQL_USER=mysql 
    -DMYSQL_TCP_PORT=3306

      --参数释义(深入请参考:http://blog.51cto.com/laowafang/1294964)

    cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql          (反斜杠意思是换行,指定安装目录)
              -DMYSQL_DATADIR=/data/mydata                   (指定数据存储目录)
              -DSYSCONFDIR=/etc                              (配置文件目录)
              -DWITH_INNOBASE_STORAGE_ENGINE=1       (指定编译存储引擎)
              -DWITH_ARCHIVE_STORAGE_ENGINE=1        (指定编译存储引擎)
              -DWITH_BLACKHOLE_STORAGE_ENGINE=1      (指定编译存储引擎)
              -DWITH_READLINE=1         (指定编译库)
              -DWITH_SSL=system         (指定编译库)
              -DWITH_ZLIB=system         (指定编译库)
              -DWITH_LIBWRAP=0         (指定编译库)
              -DMYSQL_UNIX_ADDR=/tmp/mysql.sock     (指定套接字路径)
              -DDEFAULT_CHARSET=utf8             (指定默认字符集)
              -DDEFAULT_COLLATION=utf8_general_ci      (指定默认编码)
              -DWITH_BOOST=/usr/local/boost       (指定boost库位置)

    发现了报错,如下:

        

    yum install ncurses-devel    #命令装一下这个包

    #然后再cmake,又报错如下

    CMake Error: The source directory does not appear to contain CMakeLists.txt.

    意思是我没有进入mysql目录,找不到cmake文件,进入一下下面的目录

        

    再次cmake还是报错

        

    因为开始编译过,有清除缓存文件

    rm CMakeCache.txt       #需要把源码目录中的CMakeCache.txt文件删除,然后再重新CMAKE

    (3)make  #编译 或者3-4可以合成一句  make && make install

    (4)make install

    11.mysql参数配置

    [mysql] 
    # CLIENT # 
    port                          = 3306 
    socket                        = /u01/my3306/mysql.sock 
    default-character-set          = utf8 
    [mysqld] 
    # GENERAL # 
    user                          = mysql 
    default_storage_engine        = InnoDB 
    socket                        = /u01/my3306/mysql.sock 
    pid-file                      = /u01/my3306/mysql.pid 
    character-set-server          = utf8 
    # MyISAM # 
    key_buffer_size                = 32M 
    myisam_recover                = FORCE,BACKUP 
    # SAFETY # 
    max_allowed_packet            = 16M 
    max_connect_errors            = 1000000 
    skip_name_resolve 
    # DATA STORAGE # 
    datadir                        = /u01/my3306/data
    # BINARY LOGGING # 
    log_bin                        = /u01/my3306/log/mysql-bin
    expire_logs_days              = 14 
    sync_binlog                    = 1 
    # CACHES AND LIMITS # 
    tmp_table_size                = 32M 
    max_heap_table_size            = 32M 
    query_cache_type              = 0 
    query_cache_size              = 0 
    max_connections                = 500 
    thread_cache_size              = 50 
    open_files_limit              = 65535 
    table_definition_cache        = 1024 
    table_open_cache              = 2048 
    # INNODB # 
    innodb_flush_method            = O_DIRECT 
    innodb_log_files_in_group      = 2 
    innodb_log_file_size          = 256M 
    innodb_flush_log_at_trx_commit = 1 
    innodb_file_per_table          = 1 
    innodb_buffer_pool_size        = 256M 
    innodb_thread_concurrency      = 12 
    #thread_handling                = pool-of-threads 
    #auto_increment_increment      = 2 
    #auto_increment_offset          = 0 
    # LOGGING # 
    log_error                      = /u01/my3306/log/mysql-error.log 
    log_queries_not_using_indexes  = 1 
    slow_query_log                = 1 
    slow_query_log_file            = /u01/my3306/log/mysql-slow.log

    超简单版如下:

    [mysqld] 
    # GENERAL # 
    port                          = 3306 
    datadir                        = /u01/my3306/data

    配置好文件,命名为my.cnf,然后rz拷贝到/u01/my3306/下

    12.初始化mysql

     ./scripts/mysql_install_db --defaults-file=/u01/my3306/my.cnf --datadir=/u01/my3306/data/ -user=mysql

    这里在my3306也就是我们的mysql目录下跑,

    --defaults-file=/u01/my3306/my.cnf   #默认文件引用 my3306下的my.cnf

    13.启动mysql

    进入/u01/my3306/bin 目录下

    ll  查看,有个mysqld_safe,启用它,如果mysql进程被误删一类的,它会自动重启mysql进程,实现代码如下

    ./mysql_safe --defaults-file=/u01/my3306/my.cnf --user=mysql &

     查看mysql进程

    ps -ef |grep 3306

    #效果如下
     
    #看图中 进程号为3530,那么我们要查看进程中的所有线程命令如下

    pstack 3530
    #如下图,我这里一共28个线程
     

    14.登录mysql

      source .bash_profile    #引用一下环境变量文件

      

    (1)直接输入mysql

      它可以进入,但是它用的操作系统认证

      

     (2)常规方式登录

    mysql -h127.0.0.1 -uroot

    因为初始root没有设置密码,所以这里不需要输入密码;

    到此,安装过程就大功告成了!

    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 
    这时候就没有输出了

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

    附加:基本操作

    (1)查看登录所在实例下的所有数据库  show databases;

      

    (2)查看所有的日志变量配置情况

    show variables like '%log%';

      

    (3)如果要在其他机器上装一样的mysql,直接拿过去用就OK了,但是server_id要改一下

      

     (4)查看当前数据库上下文

      select database();

      

    (5)查看当前用户

      select user();

      

    (6)查看当前数据库下所有表

      show tables;

      

     (7)修改mysql提示符

      登录mysql时:mysql -uroot -p --prompt 'u@test2_db :m:s->'

      

      登录mysql之后:prompt u@test_db :m:s->

      

      注意:它是临时生效,重新登录就没了,要永久生效需要配置在my.cnf的配置文件中的  [mysql] 模块下;

      

      

  • 相关阅读:
    11.26
    数组
    JavaScript
    2018.11.26
    input标签
    HPH 函数
    jQuery
    19/1/3数组
    2018/12/26//循环体
    12/25
  • 原文地址:https://www.cnblogs.com/gered/p/9539333.html
Copyright © 2020-2023  润新知