zoukankan      html  css  js  c++  java
  • 1-1 MySQL二进制安装手册

    MySQL安装和升级

    dba_aj@163.com
    2018年7月12日星期四

    TOC


    1、概述

    2、安装环境

    1. 版本说明

    新业务建议使用大版本下最新GA版本

    下载二进制安装包 https://dev.mysql.com/downloads/mysql/
    归档历史版本 https://downloads.mysql.com/archives/community/
    安装说明 https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

    2. 安装介质

    CentOS release 6.9 (Final)

    3. 目录规划

    /data/3306
    |-- arch #binlog目录
    |-- backup # 备份及导出目录
    |-- base  # 软件目录
    |-- data # 数据目录
    |-- etc   # 配置目录
    |-- log # 日志目录
    |-- relay_log      #relay_log目录
    `-- tmp    # 临时文件目录

    4. 用户规划

    groupadd mysql 
    useradd -r -g mysql -s /bin/false mysql

    5. 防火墙配置

    Centos6/Red6
    service iptables stop
    chkconfig iptables off
    
    Centos7/Red7
    systemctl stop firewalld.service #停止firewall
    systemctl disable firewalld.service #禁止firewall开机启动

    6. 修改资源限制

    vim mysql_install_init.sh
    bash ./mysql_insall_init.sh
    modify_para(){
    limit_cn=`cat /etc/security/limits.conf |grep -i 'modify by initsys'|wc|awk '{print $1}'`
    if [ $limit_cn -eq 0 ] 
    then
        echo -e "
    ###### modify by initsys ######" >> /etc/security/limits.conf
        echo "* soft nproc 1024000" >> /etc/security/limits.conf
        echo "* hard nproc 1024000" >> /etc/security/limits.conf
        echo "* soft nofile 1024000" >> /etc/security/limits.conf
        echo "* hard nofile 1024000" >> /etc/security/limits.conf
    
        echo -e "
    mysql soft nproc 1024000" >> /etc/security/limits.conf
        echo "mysql hard nproc 1024000" >> /etc/security/limits.conf
        echo "mysql soft nofile 1024000" >> /etc/security/limits.conf
        echo "mysql hard nofile 1024000" >> /etc/security/limits.conf
    fi
    
    sysctl_cn=`cat /etc/sysctl.conf |grep 'modify by initsys'|wc|awk '{print $1}'`
    if [ $sysctl_cn -eq 0 ]
    then
        echo -e "
    ###### modify by initsys ######" >> /etc/sysctl.conf
        echo fs.aio-max-nr = 1048576 >> /etc/sysctl.conf
        echo fs.file-max = 6815744 >> /etc/sysctl.conf
        echo vm.swappiness = 10 >> /etc/sysctl.conf
        echo net.core.rmem_max = 4194304 >> /etc/sysctl.conf
        echo net.core.wmem_default = 262144 >> /etc/sysctl.conf
        echo net.core.wmem_max = 1048586 >> /etc/sysctl.conf
        echo kernel.msgmnb = 65536 >> /etc/sysctl.conf
        echo kernel.msgmax = 655360 >> /etc/sysctl.conf
        echo kernel.sem = 250 32000 100 142 >> /etc/sysctl.conf
        echo kernel.shmmni = 4096 >> /etc/sysctl.conf
        echo kernel.shmall = 1073741824 >> /etc/sysctl.conf
        echo kernel.shmmax = 4398046511104 >> /etc/sysctl.conf
        echo net.ipv4.ip_local_port_range = 5000 65500 >> /etc/sysctl.conf
        echo net.core.rmem_default = 262144 >> /etc/sysctl.conf
        echo net.ipv4.tcp_max_syn_backlog = 8192 >> /etc/sysctl.conf
        echo net.core.somaxconn = 8192 >> /etc/sysctl.conf
        echo net.ipv4.tcp_keepalive_time = 60 >> /etc/sysctl.conf
        echo net.ipv4.tcp_keepalive_probes = 3 >> /etc/sysctl.conf
        echo net.ipv4.tcp_keepalive_intvl = 15 >> /etc/sysctl.conf
        echo net.ipv4.tcp_fin_timeout = 30 >> /etc/sysctl.conf
    fi
    }
    
    modify_grub(){
    #edi_flag=`cat /etc/redhat-release |grep 'release 5'|wc|awk '{print $1}'`
    #if [ $edi_flag -eq 1 ]
    #then
        mv /boot/grub/grub.conf /boot/grub/grub.conf_bak
        sed "s/.*default.*/default=1/" /boot/grub/grub.conf_bak > /boot/grub/grub.conf
        cat /boot/grub/grub.conf
    #fi
    }
    
    
    modify_para
    modify_grub

    3、二进制安装MySQL数据库

    1. 上传和解压

    mkdir /data ;  ln -s /usr/local/mysql/ /data/3306
    tar -xf mysql-5.7.26-linux-glibc2.12-x86_64.tar.gz -C /data/3306
    cd /data/3306
    mv mysql-5.7.26-linux-glibc2.12-x86_64/  base
    mkdir data log arch relay_log backup tmp  etc

    2. my.cnf配置

    目录位置:/data/3306/etc/my.cnf
    配置内容:

    #适用于所有客户端程序读取
    [client]
    port = 3306
    socket = /data/3306/data/mysql.sock
    
    [mysql]
    no_auto_rehash # 当表多时,自动避免收集很多元数据信息,不能自动补全
    prompt = "\R:\m:\s\d>" #H:M:S:DB
    pager = "more"            
    default-character-set = utf8mb4 
    
    [mysqld]
    ##base setting
    port = 3306
    socket = /data/3306/data/mysql.sock #建议设置socket的位置在数据目录
    server-id = 10111
    report_host = 192.168.10.111 #show slave status 中主机IP
    basedir = /data/3306/base  
    datadir = /data/3306/data  
    tmpdir = /data/3306/tmp
    user = mysql #为避免用户--user=root向my.cnf文件添加选项
    log_error = /data/3306/log/error.log
    innodb_file_per_table = 1 # 独立表空间
    lower_case_table_names = 1 #不区分大小写,库名、表名、表别名、变量名将以小写处理
    character_set_server = utf8mb4                                      
    collation_server = utf8mb4_bin          
    
    ##connection
    skip-ssl
    skip_name_resolve = 1 #不解析客户端连接主机名,,授权表只用IP地址或localhost
    max_connections = 1500 #最大连接数
    max_allowed_packet = 64M #数据包最大大小
    
    
    #innodb_buffer_pool_size = 10G #buffer pool大小,70%mem,如果设置太大超出内存,容易OOM
    #innodb_buffer_pool_instances = 8 #将缓冲池划分区域,较少池内争用,大于1G默认8个
    
    ##redologfile、ibdata
    innodb_flush_log_at_trx_commit = 1 #默认1,0提交时不写日志,每秒写日志且刷盘,1提交时写日志并刷盘,2提交时写日志,每秒刷盘
    innodb_log_files_in_group = 3 #redo log文件个数
    #innodb_log_file_size = 2G #redo log文件大小,SSD 2G
    
    ## AS master
    sync_binlog = 1    
    log-bin = /data/3306/arch/mysql-bin # 设置binlog路径和文件前缀名称
    binlog_rows_query_log_events = 1 #在binlog中记录原生SQL
    log_bin_trust_function_creators = 1 #默认关闭,将function写入binlog,避免默认情况下回阻止function的创建
    binlog_format = row #行模式复制
    max_binlog_size = 1G #binlog文件大小
    
    ## AS slave 
    relay_log = /data/3306/relay_log/relay-bin #设置relay log路径和文件前缀名称
    relay_log_recovery = 1 #开启新中继日志,从SQL执行位置重新拉取,清理老relay log
    sync_relay_log = 1 #relay log的刷盘方式,0依赖OS,n,n个事件写入relay log后刷盘
    skip_slave_start = 1 #避免从库slave线程自动启动

    3. 初始化数据库

    touch /data/3306/log/error.log
    chown -R mysql: /data/3306/
    cd /data/3306/base
    ./scripts/mysql_install_db --defaults-file=/data/3306/etc/my.cnf   --user=mysql   # 5.6 初始化
    
    # ubuntu 可能需要解决依赖 apt install numactl libaio-dev 
    ./bin/mysqld  --defaults-file=/data/3306/etc/my.cnf  --initialize-insecure --user=mysql         #5.7 初始化

    注意:

    1. 有些时候,需要提前创建error.log 如果不在数据目录下
    2. 重新初始化,清空数据目录。
    3. 数据目录出现ibdata、logfile、mysql库、IS库(5.5没有)、PS库、sys库(5.7有)初始化正常
    4. 否则检查目录权限、my.cnf中对应目录是否创建且有权限、my.cnf中资源系统能分配

    4. PATH变量设置

    优点 :设置path变量之后,对于mysql的很多程序都能直接使用
    缺点:对于多实例的情况下,很容易造成生产的问题,比如:已有5.6mysql服务在运行,PATH变量设置的$5.6basedir/bin,想初始化或启动5.7的服务,必须使用5.7的绝对路径的命令,不然启动了一个5.6mysqld服务

    echo 'PATH=/data/3306/base/bin:$PATH' >>/etc/profile
    tail -1 /etc/profile
    source /etc/profile
    echo $PATH
    which mysql

    4、启动和安全检查

    1. 启动

    # 修改权限
    chown -R mysql:mysql /data/3306/
    
    # 5.6启动
    numactl --interleave=all /data/3306/bin/mysqld_safe --defaults-file=/data/3306/etc/my.cnf --ledir=/data/3306/base/bin/ &
    
    # 5.7启动
    numactl --interleave=all /data/3306/base/bin/mysqld_safe  --defaults-file=/data/3306/etc/my.cnf  &
    [1] 2435
    #2018-03-16T10:05:19.864783Z mysqld_safe Logging to '/data/mysql20/data/error.log'.
    
    
    # 查看启动日志
    tailf -100 /data/3306/log/error.log

    2. 登录数据库

    初始化密码为空,直接登录

    # socket登录
    mysql -uroot
    mysql  -uroot  --socket=/data/3306/data/mysql.sock

    3 密码设置

    登录后设置密码

    mysql> flush privileges;
    
    #修改密码
    # 5.6
    mysql> set password for root@localhost = password('root');
    #5.6
    alter user root@'localhost' identified by 'root';

    4 安全性设置

    使用自带的mysql_secure_installation程序

    cd /data/3306/base/bin/
    ./mysql_secure_installation 
    ./mysql_secure_installation -S /data/3306/data/mysql.sock
    
    mysql_secure_installation
    Enter current password for root (enter for none): # 密码为空,直接回车
    Change the root password? [Y/n] Y #修改密码
    Remove anonymous users? [Y/n] y #移除匿名用户. ,5.7默认没有匿名用户
    Disallow root login remotely? [Y/n] y #禁止root用户远程登陆root@’%’,5.7没有root@'%'用户
    Remove test database and access to it? [Y/n] y #移除test数据库 ,5.7无test数据库
    Reload privilege tables now? [Y/n] y #刷新权限表

    <wiz_tmp_tag id="wiz-table-range-border" contenteditable="false" style="display: none;">

  • 相关阅读:
    【LeetCode】两个有序数组合成一个有序数组(NEW)
    swiftmonkey 源码剖析及二次开发思路
    CentOS7 + Python3 + Django(rest_framework) + MySQL + nginx + uwsgi 部署 API 开发环境, 记坑篇
    Vue 5小时学习小教程
    【LeetCode】两数相加
    (vue.js)vue中引用了别的组件 ,如何使this指向Vue对象
    Monkey for Mac 环境配置
    [Vue] 初识Vue-常用指令
    利用Tkinter做的自动生成JSONSchema的小工具
    Linux下如何删除非空目录
  • 原文地址:https://www.cnblogs.com/jesper/p/304774f2927c8ca8a9bfc899b737a5ec.html
Copyright © 2011-2022 走看看