zoukankan      html  css  js  c++  java
  • 一分钟完成MySQL5.7安装部署

    1分钟完成MySQL5.7安装部署

    wKiom1ftzozDDXNtAAA4eVx2Dz8539.jpg

    1分钟完成MySQL5.7安装部署

    简介

    Part1:写在最前

    MYSQL5.7.15是截止至本文撰写当日,mysql官网的最新社区版,mysql5.7的多项功能优化可以用激动人心来形容,嫌安装麻烦?没关系,跟着本文,带你1分钟搞定MySQL5.7.15数据库安装部署。


    Part2:仅仅安装就够了?

    不,当然不够,MySQL5.7的多项功能特性更新,无法一一赘述,因此,我们先从和本文最相关的my.cnf,来解读一些MySQL5.7的部分新特性。

    在之前我写过一篇MySQL5.6的新特性参数,诸如:

    innodb_buffer_pool_dump_at_shutdown=1

    innodb_buffer_pool_load_at_startup=1

    开启这个两个参数当数据库重启后把这些热数据重新加载回去

    只有正常关库才会dump热数据块,宕机和kill -9不会

    更多5.6安装内容可移步:

    http://suifu.blog.51cto.com/9167728/1846671


    在5.7里,一个新的系统参数innodb_buffer_pool_dump_pct,其默认值为25

    允许DBA控制每个缓冲池最近使用页的百分比来导出,以减缓导出innodb buffer pool所有页占用过大的磁盘。如果innodb buffer pool里缓存了100个页,那么会将最近使用的25个页导出去,最大值是100,意思为全部导出,如下图所示:

    wKiom1fjcbXjsiZ7AACrCgT08qo965.jpg

    注:在MariaDB10.1里,同样提供了该参数,不过其默认值是100



    在线调整innodb_buffer_pool_size,不用重启mysql进程

    在MySQL5.6/MariaDB 10.1版本,调整该参数必须重启MySQL进程才可以生效,而mysql5.7版本里,可以直接动态设置,非常方便。

    这个功能应用场景如:

    1.机器新增内存,DBA忘记调大该参数;

    2.工作交接,新来的DBA发现前任DBA对该参数设置不合理。

    下面在我机器里进行测试,把512M内存变更为256M,见下图:

    wKioL1fjdMSSu3ApAAES8CSuJE4611.jpg

    需注意的是,在调整buffer_pool期间,用户的请求会被阻塞,直到调整完毕,所以请勿在高峰期调整。



    实战

    Part1:整个流程分3步

    1.mysql官网下载二进制版本的mysql5.7.15安装包(mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz)至/root目录

    2.执行下文所述的mysql_auto_install.sh脚本

    3.输入您设置的密码登录数据库



    Part2:自动化脚本

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    [root@HE2 ~]# cat mysql_auto_install.sh
    ###### 二进制自动安装数据库脚本root密码MANAGER将脚本和安装包放在/root目录即可###############
    ######数据库目录/usr/local/mysql############
    ######数据目录/data/mysql############
    ######慢日志目录/data/slowlog############
    ######端口号默认3306其余参数按需自行修改############
     
    ##################
    #author:rrhelei@126.com#
    ##################
    #!/bin/bash
     
     
    # Check if user is root
    if [ $(id -u) != "0" ]; then
        echo "Error: You must be root to run this script, please use root to install"
        exit 1
    fi
     
    clear
    echo "========================================================================="
    echo "A tool to auto-compile & install MySQL 5.7.15 on Redhat/CentOS Linux "
    echo "========================================================================="
    cur_dir=$(pwd)
     
    #set mysql root password
        echo "==========================="
     
        mysqlrootpwd="MANAGER"
        echo -e "Please input the root password of mysql:"
        read -p "(Default password: MANAGER):" mysqlrootpwd
        if "$mysqlrootpwd" "" ]; then
            mysqlrootpwd="MANAGER"
        fi
        echo "==========================="
        echo "MySQL root password:$mysqlrootpwd"
        echo "==========================="
     
    #which MySQL Version do you want to install?
    echo "==========================="
     
     
        isinstallmysql57="n"
        echo "Install MySQL 5.7.15,Please input y"
        read -p "(Please input y , n):" isinstallmysql57
     
     
        case "$isinstallmysql57" in
        y|Y|Yes|YES|yes|yES|yEs|YeS|yeS)
        echo "You will install MySQL 5.7.15"
     
        isinstallmysql57="y"
        ;;
        *)
        echo "INPUT error,You will exit install MySQL 5.7.15"
     
        isinstallmysql57="n"
        exit
        esac
     
        get_char()
        {
        SAVEDSTTY=`stty -g`
        stty -echo
        stty cbreak
        #dd if=/dev/tty bs=1 count=1 2> /dev/null
        stty -raw
        stty echo
        stty $SAVEDSTTY
        }
        echo ""
        echo "Press any key to start...or Press Ctrl+c to cancel"
        char=`get_char`
     
    # Initialize  the installation related content.
    function InitInstall()
    {
        cat /etc/issue
        uname -a
        MemTotal=`free -m | grep Mem | awk '{print  $2}'`  
        echo -e "  Memory is: ${MemTotal} MB "
        #Set timezone
        #rm -rf /etc/localtime
        #ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
     
     
        #Delete Old Mysql program
        rpm -qa|grep mysql
        rpm -e mysql
     
     
     
     
     
     
        #Disable SeLinux
        if [ -s /etc/selinux/config ]; then
        sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
        fi
        setenforce 0
     
     
    }
     
     
    #Installation of depend on and optimization options.
    function InstallDependsAndOpt()
    {
    cd $cur_dir
     
    cat >>/etc/security/limits.conf<<EOF
    * soft nproc 65535
    * hard nproc 65535
    * soft nofile 65535
    * hard nofile 65535
    EOF
     
    echo "fs.file-max=65535" >> /etc/sysctl.conf
    }
     
    #Install MySQL
    function InstallMySQL57()
    {
    echo "============================Install MySQL 5.7.15=================================="
    cd $cur_dir
     
    #Backup old my.cnf
    #rm -f /etc/my.cnf
    if [ -s /etc/my.cnf ]; then
        mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M%S`.bak
    fi
     
    echo "============================MySQL 5.7.15 installing…………========================="
    #mysql directory configuration
    tar xvf /root/mysql-5.7.15-linux-glibc2.5-x86_64.tar.gz
    mv /root/mysql-5.7.15-linux-glibc2.5-x86_64 /usr/local/mysql
    groupadd mysql -g 512
    useradd -u 512 -g mysql -s /sbin/nologin -d /home/mysql mysql
    mkdir -p /data/mysql
    mkdir -p /data/slowlog
    chown -R mysql:mysql /data/mysql
    chown -R mysql:mysql /usr/local/mysql
    chown -R mysql:mysql /data/slowlog
     
     
    #edit /etc/my.cnf
    SERVERID=`ifconfig eth0 | grep "inet addr" awk '{ print $2}'awk -F. '{ print $3$4}'`
    cat >>/etc/my.cnf<<EOF
    [client]
    port=3306
    socket=/tmp/mysql.sock
    default-character-set=utf8
     
    [mysql]
    no-auto-rehash
    default-character-set=utf8
     
    [mysqld]
    port=3306
    character-set-server=utf8
    socket=/tmp/mysql.sock
    basedir=/usr/local/mysql
    datadir=/data/mysql
    explicit_defaults_for_timestamp=true
    lower_case_table_names=1
    back_log=103
    max_connections=3000
    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=REPEATABLE-READ
    tmp_table_size=96M
    max_heap_table_size=96M
     
    ###***slowqueryparameters
    long_query_time=1
    slow_query_log = 1
    slow_query_log_file=/data/slowlog/slow.log
     
    ###***binlogparameters
    log-bin=mysql-bin
    binlog_cache_size=4M
    max_binlog_cache_size=4096M
    max_binlog_size=1024M
    binlog_format=MIXED
    expire_logs_days=7
     
    ###***relay-logparameters
    #relay-log=/data/3307/relay-bin
    #relay-log-info-file=/data/3307/relay-log.info
    #master-info-repository=table
    #relay-log-info-repository=table
    #relay-log-recovery=1
     
    #***MyISAMparameters
    key_buffer_size=16M
    read_buffer_size=1M
    read_rnd_buffer_size=16M
    bulk_insert_buffer_size=1M
     
    #skip-name-resolve
     
    ###***master-slavereplicationparameters
    server-id=$SERVERID
    #slave-skip-errors=all
     
    #***Innodbstorageengineparameters
    innodb_buffer_pool_size=512M
    innodb_data_file_path=ibdata1:10M:autoextend
    #innodb_file_io_threads=8
    innodb_thread_concurrency=16
    innodb_flush_log_at_trx_commit=1
    innodb_log_buffer_size=16M
    innodb_log_file_size=512M
    innodb_log_files_in_group=2
    innodb_max_dirty_pages_pct=75
    innodb_buffer_pool_dump_pct=50
    innodb_lock_wait_timeout=50
    innodb_file_per_table=on
     
    [mysqldump]
    quick
    max_allowed_packet=32M
     
    [myisamchk]
    key_buffer=16M
    sort_buffer_size=16M
    read_buffer=8M
    write_buffer=8M
     
    [mysqld_safe]
    open-files-limit=8192
    log-error=/data/mysql/error.log
    pid-file=/data/mysql/mysqld.pid
     
    EOF
     
     
     
     
    /usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/data/mysql --basedir=/usr/local/mysql --initialize-insecure
     
    cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
    chmod 700 /etc/init.d/mysqld
    chkconfig --add mysqld
    chkconfig --level 2345 mysqld on
     
    cat >> /etc/ld.so.conf.d/mysql-x86_64.conf<<EOF
    /usr/local/mysql/lib
    EOF
    ldconfig
     
    if [ -d "/proc/vz" ];then
    ulimit -s unlimited
    fi
     
    /etc/init.d/mysqld start
     
     
    cat >> /etc/profile <<EOF
    export PATH=$PATH:/usr/local/mysql/bin
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/mysql/lib
    EOF
     
    /usr/local/mysql/bin/mysqladmin -u root password $mysqlrootpwd
     
    cat /tmp/mysql_sec_script<<EOF
    use mysql;
    delete from mysql.user where user!='root' or host!='localhost';
    grant all privileges on *.* to 'sys_admin'@'%' identified by 'MANAGER';
    flush privileges;
    EOF
     
    /usr/local/mysql/bin/mysql -u root -p$mysqlrootpwd -h localhost < /tmp/mysql_sec_script
     
    #rm -f /tmp/mysql_sec_script
     
     
    #/etc/init.d/mysqld restart
     
     
     
     
    echo "============================MySQL 5.7.15 install completed========================="
    }
     
     
     
    function CheckInstall()
    {
    echo "===================================== Check install ==================================="
    clear
    ismysql=""
    echo "Checking..."
     
    if [ -s /usr/local/mysql/bin/mysql ] && [ -s /usr/local/mysql/bin/mysqld_safe ] && [ -s /etc/my.cnf ]; then
      echo "MySQL: OK"
      ismysql="ok"
      else
      echo "Error: /usr/local/mysql not found!!!MySQL install failed."
    fi
     
    if "$ismysql" "ok" ]; then
    echo "Install MySQL 5.7.15 completed! enjoy it."
    echo "========================================================================="
    netstat -ntl
    else
    echo "Sorry,Failed to install MySQL!"
    echo "You can tail /root/mysql-install.log from your server."
    fi
    }
     
    #The installation log
    InitInstall 2>&1 | tee /root/mysql-install.log
    InstallDependsAndOpt 2>&1 | tee -a /root/mysql-install.log
    InstallMySQL57 > /dev/null
    CheckInstall 2>&1 | tee -a /root/mysql-install.log




    Part5:登录&享受吧

    1.先source一下环境变量文件使生效

    [root@HE2 ~] source /etc/profile


    2.输入用户名密码(默认为MANAGER)登录数据库

    wKioL1fg55bRtezyAAEwCj3jwm4534.jpg


    至此,MySQL5.7.15安装完成


    ——总结——

    MySQL5.7拥有诸多让我们激动和期待的新功能,限于文章篇幅原因,这里仅仅介绍冰山一角。由于笔者的水平有限,编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。


    本文出自: http://suifu.blog.51cto.com/9167728/1855415

  • 相关阅读:
    页面灰色样式
    替换页面中出现的链接
    Google Earth无法连接到服务器
    知识扩展(线程SQL、SMTP、POP3、反射)
    oracle 11g 客户端 连接数据库
    Oracle 下载|ORACLE 官网下载地址(支持win7/win2008)
    WCF返回xml
    IE和FireFox下的JS调试工具
    在IIS中部署WCF服务出现authentication mode=windows
    Ext入门(Window、Panel、Viewport、Grid、Form、TreePanel)
  • 原文地址:https://www.cnblogs.com/jpfss/p/7944614.html
Copyright © 2011-2022 走看看