美文网首页MysqlMySql
mysql 5.7手动安装部署

mysql 5.7手动安装部署

作者: su酥饼 | 来源:发表于2021-11-30 14:42 被阅读0次

    mysql5.7手动、自动安装部署

    #上传安装包和配置文件
    mkdir /application
    cd /application
    rz -y mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz  my.cnf
    tar -zxvf mysql-5.7.35-linux-glibc2.12-x86_64.tar.gz  
    ##安装依赖 
    yum -y install numactl.x86_64
    ##将安装前工作
    mv mysql-5.7.35-linux-glibc2.12-x86_64 /usr/local/mysql
    cd /usr/local/mysql/bin/
    ##创建启动账号
    groupadd mysql 
    useradd -g mysql  -s  /sbin/nologin -d /usr/local/mysql/  -M mysql
    ##创建数据目录
    mkdir  /data/mysql/
    chown mysql:mysql /data/mysql/
    chown mysql:mysql /usr/local/mysql/
    ##数据库初始化
    ./mysqld --defaults-file=/etc/my.cnf --initialize --user=user --basedir=/usr/local/mysql/  --datadir=/data/mysql/
    ##将mysql配置文件上传
    ##可使用在线mysql配置文件生成工具
    ## 
    cp -r /application/my.cnf /etc/
    ##添加环境变量
    cp -r /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld 
    echo PATH=$PATH:/usr/local/mysql/bin >>/etc/profile 
    source /etc/profile
    ##启动
    /etc/init.d/mysqld start
    ##登录测试 
    mysql -uroot -p 
    
    #改密码
    ### 添加跳过密码登陆
    vim /etc/my.cnf
    ##添加参数
    skip-grant-tables
    ##重启
    /etc/init.d/mysqld restart 
    ##更改密码
    mysql -uroot -p 
    UPDATE mysql.user SET authentication_string=PASSWORD('test@123') where USER='root';
    ALTER USER USER() IDENTIFIED BY 'test@123';
    ##授权访问(*.* databasename.tablename)(root@'192.0.0.1' 授权哪个账号通过那个ip或ip段访问)
    grant all privileges on *.* to 'root'@'147.1.5.%' identified by 'test@123';
    ##刷新
    FLUSH PRIVILEGES;
    ##注销跳过密码登陆
    vim /etc/my.cnf
    #skip-grant-tables
    #重启
    /etc/init.d/mysqld restart
    

    my.cnf

    ## my.cnf for MySQL 5.7/8.0
    [client]
    port    = 3306
    socket  = /data/mysql/mysql.sock
    
    [mysql]
    prompt="\u@mysqldb \R:\m:\s [\d]> "
    auto-rehash
    
    [mysqld]
    sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
    #skip-grant-tables
    user    = mysql
    port    = 3306
    basedir = /usr/local/mysql
    datadir = /data/mysql
    socket  = /data/mysql/mysql.sock
    lower_case_table_names=1
    pid-file = mysqldb.pid
    character-set-server = utf8mb4
    skip_name_resolve = 1
    default_time_zone = "+8:00"
    open_files_limit    = 65535
    back_log = 1024
    max_connections = 512
    max_connect_errors = 1000000
    table_open_cache = 1024
    table_definition_cache = 1024
    table_open_cache_instances = 64
    thread_stack = 512K
    external-locking = FALSE
    max_allowed_packet = 32M
    sort_buffer_size = 4M
    join_buffer_size = 4M
    thread_cache_size = 768
    interactive_timeout = 600
    wait_timeout = 600
    tmp_table_size = 32M
    max_heap_table_size = 32M
    slow_query_log = 1
    log_timestamps = SYSTEM
    slow_query_log_file = /data/mysql/slow.log
    log-error = /data/mysql/error.log
    long_query_time = 2
    log_queries_not_using_indexes =1
    log_throttle_queries_not_using_indexes = 60
    min_examined_row_limit = 100
    log_slow_admin_statements = 1
    log_slow_slave_statements = 1
    server-id = 3309
    log-bin = /data/mysql/mybinlog
    sync_binlog = 1
    binlog_cache_size = 4M
    max_binlog_cache_size = 2G
    max_binlog_size = 1G
    expire_logs_days = 7
    master_info_repository = TABLE
    relay_log_info_repository = TABLE
    gtid_mode = on
    enforce_gtid_consistency = 1
    log_slave_updates
    slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
    binlog_format = row
    binlog_checksum = 1
    relay_log_recovery = 1
    relay-log-purge = 1
    key_buffer_size = 32M
    read_buffer_size = 8M
    read_rnd_buffer_size = 4M
    bulk_insert_buffer_size = 64M
    myisam_sort_buffer_size = 128M
    myisam_max_sort_file_size = 10G
    myisam_repair_threads = 1
    lock_wait_timeout = 3600
    explicit_defaults_for_timestamp = 1
    innodb_thread_concurrency = 0
    innodb_sync_spin_loops = 100
    innodb_spin_wait_delay = 30
    
    transaction_isolation = REPEATABLE-READ
    #innodb_additional_mem_pool_size = 16M
    innodb_buffer_pool_size = 9216M
    innodb_buffer_pool_instances = 4
    innodb_buffer_pool_load_at_startup = 1
    innodb_buffer_pool_dump_at_shutdown = 1
    innodb_data_file_path = ibdata1:1024M:autoextend
    innodb_flush_log_at_trx_commit = 1
    innodb_log_buffer_size = 32M
    innodb_log_file_size = 2G
    innodb_log_files_in_group = 2
    innodb_max_undo_log_size = 4G
    innodb_undo_directory = /data/mysql/undolog
    innodb_undo_tablespaces = 95
    
    # 根据您的服务器IOPS能力适当调整
    # 一般配普通SSD盘的话,可以调整到 10000 - 20000
    # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
    innodb_io_capacity = 4000
    innodb_io_capacity_max = 8000
    innodb_flush_sync = 0
    innodb_flush_neighbors = 0
    innodb_write_io_threads = 8
    innodb_read_io_threads = 8
    innodb_purge_threads = 4
    innodb_page_cleaners = 4
    innodb_open_files = 65535
    innodb_max_dirty_pages_pct = 50
    innodb_flush_method = O_DIRECT
    innodb_lru_scan_depth = 4000
    innodb_checksum_algorithm = crc32
    innodb_lock_wait_timeout = 10
    innodb_rollback_on_timeout = 1
    innodb_print_all_deadlocks = 1
    innodb_file_per_table = 1
    innodb_online_alter_log_max_size = 4G
    innodb_stats_on_metadata = 0
    
    #注意:MySQL 8.0.16开始删除该选项
    internal_tmp_disk_storage_engine = InnoDB
    
    # some var for MySQL 5.7
    innodb_checksums = 1
    #innodb_file_format = Barracuda
    #innodb_file_format_max = Barracuda
    query_cache_size = 0
    query_cache_type = 0
    innodb_undo_logs = 128
    
    innodb_status_file = 1
    #注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
    innodb_status_output = 0
    innodb_status_output_locks = 0
    
    #performance_schema
    performance_schema = 1
    performance_schema_instrument = '%memory%=on'
    performance_schema_instrument = '%lock%=on'
    
    #innodb monitor
    innodb_monitor_enable="module_innodb"
    innodb_monitor_enable="module_server"
    innodb_monitor_enable="module_dml"
    innodb_monitor_enable="module_ddl"
    innodb_monitor_enable="module_trx"
    innodb_monitor_enable="module_os"
    innodb_monitor_enable="module_purge"
    innodb_monitor_enable="module_log"
    innodb_monitor_enable="module_lock"
    innodb_monitor_enable="module_buffer"
    innodb_monitor_enable="module_index"
    innodb_monitor_enable="module_ibuf_system"
    innodb_monitor_enable="module_buffer_page"
    innodb_monitor_enable="module_adaptive_hash"
    
    [mysqldump]
    quick
    max_allowed_packet = 100M
    
    

    自动化安装脚本

    #!/bin/bash
    #create by myq
    #at 2017-12-12
    #any question to call the phone number : 110
    
    clear
    echo "###################################################"
    echo "Program this scripts is for relase your hands."
    echo "Please read this illustrate carefully."
    echo "It's auto install or uninstall mysql server."
    echo "There is four file in the scripts directory."
    echo "my.cnf is mysql configure file,do not remove."
    echo "mysqld.service is used for add mysql to systemd on RedHat 7 or Centos 7."
    echo "*.tar.gz is mysql binary package."
    echo "The mysql server version must be 5.7 or later."
    echo "The package is Linux - Generic tar file."
    echo "Please carefull enter parameter when hint is appear."
    echo "Any question to call the phone number : 110."
    echo "May you be happy and prosperous."
    echo "###################################################"
    echo
    
    #defind variables
    #get hostname
    hn=$(hostname)
    #set mysql's birnary file directory
    azdir=/usr/local
    #set mysql's directory for datafile,logfile and so on
    yxdir=/data
    csdir=$(echo ${yxdir:1})
    #set the binary install file directory
    sourcedir=$(pwd)
    #get binary install file name
    filename=$(ls $sourcedir/mysql*.tar.gz | awk -F '/' '{print $3}')
    #get memory info
    mem=$(free -m|grep -i mem|awk '{print $2}')
    smem=$(echo "$mem*0.8"|bc)
    fmem=$(echo ${smem%.*}M)
    #get os release
    osrel=$(grep -o '[[:digit:]]' /etc/redhat-release|sed '2,$d')
    #get install or uninstall message
    echo "Are you want to install or unistall? 'i' for install; 'u' for uninstall:"
    read isins
    if [ $isins == 'i' ]; then
        #clear installed mysql
        echo "clear installed mysql"
        rpm -e mysql --nodeps > /dev/null 2>&1
        rpm -e mysql-devel --nodeps > /dev/null 2>&1
        rpm -e mysql-server --nodeps > /dev/null 2>&1
        echo "done..........................."
        echo ""
    
        #create user running mysql
        echo "create user running mysql"
          userdel -r mysql > /dev/null 2>&1
          useradd -s /sbin/nologin mysql
        echo "done..........................."
        echo ""
    
        #copy mysql source install package
        echo "copy mysql source install package"
          rm -rf $azdir/mysql
          cp $sourcedir/$filename $azdir/
        if [ $? == 0 ]; then
          echo "done..........................."
        else
          echo "copy failed!!!"
          exit 1
        fi
          echo ""
    
        #untar install package
        echo "untar install package"
        cd $azdir
        tar -zxf $azdir/$filename
        rm -f $azdir/$filename
        echo "done..........................."
        echo ""
    
        #change mode on install dir
        echo "change mode $azdir/mysql"
        mv $azdir/mysql-* $azdir/mysql
        if [ $? == 0 ]; then
          chown -R mysql.mysql $azdir/mysql
          ln -fs $azdir/mysql/bin/* /usr/bin/
          echo "done..........................."
        else
          echo "operation failed!!!"
          exit 1
        fi
        echo ""
    
        #create data relate directory
        echo "create data relate directory"
        mkdir -p $yxdir/mysql/data
        mkdir -p $yxdir/mysql/logs
        mkdir -p $yxdir/mysql/script
        mkdir -p $yxdir/mysql/backup
        if [ $? == 0 ]; then
          chown -R mysql.mysql $yxdir/mysql
          echo "done..........................."
        else
          echo "create dir failed !!!"
          exit 1
        fi
          echo ""
    
        if [ $osrel == '7' ]; then
            #add to services
            echo "add to services"
            cp -f $sourcedir/mysqld.service /etc/systemd/system
            if [ $? == 0 ]; then
              systemctl enable mysqld.service > /dev/null 2>&1
                if [ $? == 0 ]; then
                  chkconfig mysqld off
                else
                  echo "add mysqld service failed!!!"
                  exit 1
                fi
              echo "done..........................."
            else
              echo "create dir failed !!!"
              exit 1
            fi
            echo ""
        else
            #add to services
            echo "add to services"
            cp -f $azdir/mysql/support-files/mysql.server /etc/init.d/mysqld
            if [ $? == 0 ]; then
              chkconfig --add mysqld
                if [ $? == 0 ]; then
                  chkconfig mysqld off
                else
                  echo "add mysqld service failed!!!"
                  exit 1
                fi
              echo "done..........................."
            else
              echo "create dir failed !!!"
              exit 1
            fi
            echo ""
        fi
    
        #add error log file
        echo "add error log file"
        touch $yxdir/mysql/logs/$hn.err
        chown mysql:mysql $yxdir/mysql/logs/$hn.err
        echo "done..........................."
        echo ""
    
        #initialize mysql
        echo "initialize mysql"
        $azdir/mysql/bin/mysqld --initialize --basedir=$azdir/mysql --datadir=$yxdir/mysql/data --user=mysql > /tmp/myqpwd.tt 2>&1
        echo "done..........................."
        echo ""
    
        #copy configure file to /etc
        echo "copy configure file to /etc"
        rm -f /etc/my.cnf
        cp $sourcedir/my.cnf /etc/
        echo "done..........................."
        echo ""
    
        #modify my.cnf
        echo "modify configure file"
        #sed -i -e "s/db1/$hn/g" /etc/my.cnf
        sid="1"$(date +"%H%M%S")
        sed -i -e "s/server_id=1/server_id=$sid/g" /etc/my.cnf
        sed -i -e "s/innodb_buffer_pool_size=256M/innodb_buffer_pool_size=$fmem/g" /etc/my.cnf
            sed -i -e "s/datadir=\/var\/mysql\/data/datadir=\/$csdir\/mysql\/data/g" /etc/my.cnf
            sed -i -e "s/pid-file=\/var\/mysql\/logs\/db1.pid/pid-file=\/$csdir\/mysql\/logs\/$hn.pid/g" /etc/my.cnf
            sed -i -e "s/general_log_file=\/var\/mysql\/logs\/db1.general/general_log_file=\/$csdir\/mysql\/logs\/$hn.general/g" /etc/my.cnf
            sed -i -e "s/log-bin=\/var\/mysql\/logs\/db1-bin/log-bin=\/$csdir\/mysql\/logs\/$hn-bin/g" /etc/my.cnf
            sed -i -e "s/log_bin_index=\/var\/mysql\/logs\/db1.index/log_bin_index=\/$csdir\/mysql\/logs\/$hn.index/g" /etc/my.cnf
            sed -i -e "s/slow_query_log_file=\/var\/mysql\/logs\/db1.slow/slow_query_log_file=\/$csdir\/mysql\/logs\/$hn.slow/g" /etc/my.cnf
            sed -i -e "s/log_error=\/var\/mysql\/logs\/db1.err/log_error=\/$csdir\/mysql\/logs\/$hn.err/g" /etc/my.cnf
        sed -i -e "s/relay_log=\/var\/mysql\/logs\/db1-relay/relay_log=\/$csdir\/mysql\/logs\/$hn-relay/g" /etc/my.cnf
        echo "done..........................."
        echo ""
    
        #change root password
        echo "change root password"
        if [ $osrel == '7' ]; then
            systemctl start mysqld.service
        else
            service mysqld start
        fi
        if [ $? == 0 ]; then
          pwd=$(cat /tmp/myqpwd.tt | grep password | awk '{print $11}')
          /usr/bin/mysqladmin -u root -p$pwd password 123 > /dev/null 2>&1
          echo "done..........................."
        else
          echo "mysql start failed!!!"
          exit 1
        fi
        echo ""
    
        #install  plugin and set parameters
        echo "install semi plugin"
        /usr/bin/mysql -e "install plugin rpl_semi_sync_master soname 'semisync_master.so';"
        /usr/bin/mysql -e "install plugin rpl_semi_sync_slave soname 'semisync_slave.so';"
        /usr/bin/mysql -e "reset master;"
        sed -i -e "s/#rpl_semi_sync_master_enabled=on/rpl_semi_sync_master_enabled=on/g" /etc/my.cnf
        sed -i -e "s/#rpl_semi_sync_master_timeout=1000/rpl_semi_sync_master_timeout=1000/g" /etc/my.cnf
        sed -i -e "s/#rpl_semi_sync_slave_enabled=on/rpl_semi_sync_slave_enabled=on/g" /etc/my.cnf
        echo "done.........................."
        echo ""
    
        #restart mysql server
            rm -f /tmp/myqpwd.tt
            /usr/bin/mysql -e "reset master;"
        if [ $osrel == '7' ]; then
            systemctl stop mysqld.service
            rm -f $yxdir/mysql/logs/*bin* $yxdir/mysql/logs/*.general $yxdir/mysql/logs/*.slow $yxdir/mysql/logs/*.index $yxdir/my        sql/logs/*relay*
            systemctl start mysqld.service
        else
                     service mysqld stop
                     rm -f $yxdir/mysql/logs/*bin* $yxdir/mysql/logs/*.general $yxdir/mysql/logs/*.slow $yxdir/mysql/logs/*.index $yxdir/mysql/logs/*relay*
                     service mysqld start
        fi
            echo "Congratulations,mysql install successful!!!"
            echo "Install directory is /usr/local/mysql"
            echo "Data directory is /var/mysql"
            echo "Initial root password is : 123"
                    echo "On linux 6,use 'service mysqld start|stop' to manage mysql service"
                    echo "On linux 7,use 'systemctl start|stop mysqld.service' to manage mysql service"
            
    
    elif [ $isins == 'u' ]; then
        #clear installed mysql
        echo "clear installed mysql"
        rpm -e mysql --nodeps > /dev/null 2>&1
        rpm -e mysql-devel --nodeps > /dev/null 2>&1
        rpm -e mysql-server --nodeps > /dev/null 2>&1
        echo "done..........................."
        echo ""
    
        #stop mysql service
        if [ $osrel == '7' ]; then
            systemctl stop mysqld.service > /dev/null 2>&1
            #clear mysql service
            echo "clear mysql service ................"
            systemctl disable mysqld.service
            rm -f /etc/systemd/system/mysqld.service 
        else
            service mysqld stop > /dev/null 2>&1
            chkconfig --del mysqld > /dev/null 2>&1
            rm -f /etc/init.d/mysqld 
        fi
        echo "done.............................."
        echo ""
    
        #remove data dir
        echo "remove data dir ................"
        rm -rf $yxdir/mysql
        echo "done.............................."
        echo ""
    
        #remove install dir
        echo "remove install dir ................"
        rm -rf $azdir/mysql
        echo "done.............................."
        echo ""
    
        #remove confiugre file
        echo "remove confiugre file ................"
        rm -rf /etc/my.cnf*
        rm -f /usr/bin/mysql*
        echo "done.............................."
        echo ""
    
        #remove mysql user
        echo "remove mysql user ................"
        userdel -r mysql > /dev/null 2>&1
        echo "done.............................."
        echo ""
        echo "mysql uninstall done............."
    
    else
        clear
            echo "Are you want to fly to the sky ..."
        echo "Are you want to fly to the sky ..."
        echo "Are you want to fly to the sky ..."
        echo "Are you want to fly to the sky ..."
        echo "Are you want to fly to the sky ..."
    fi
    
    

    配置文件

    [client]
    #default login user
    user=root
    #default password
    password=123
    
    [mysqld]
    #########genarel config##########
    #the user runnging mysqld process
    user=mysql
    #base directory
    basedir=/usr/local/mysql
    #data directory
    datadir=/var/mysql/data
    #db server character set
    character_set_server=utf8
    #default engine
    default_storage_engine=innodb
    #server id
    server_id=1
    #service port
    port=3306
    #max connections
    max_connections=1000
    #skip resolve name
    #skip_name_resolve=on
    #pid file's directory
    pid-file=/var/mysql/logs/db1.pid
    #ignore table name case
    lower_case_table_names=1
    log_bin_trust_function_creators=1
    
    
    ######log part####
    #swith on genarel log
    #general_log=on
    #name and directory of genarel log
    general_log_file=/var/mysql/logs/db1.general
    #swith on binnary log and set the file
    log-bin=/var/mysql/logs/db1-bin
    #index of bannary log
    log_bin_index=/var/mysql/logs/db1.index
    #swith bannary log
    slow_query_log=on
    #name and directory of slow query log
    slow_query_log_file=/var/mysql/logs/db1.slow
    #the unit of slow log ,second
    long_query_time=1
    #record query not use index into slow log
    log_queries_not_using_indexes=1
    #error log setting
    log_error=/var/mysql/logs/db1.err
    #auto clear binnary log , day
    expire_logs_days=14
    log_timestamps=SYSTEM
    
    ######innodb setting ######
    #innodb memory size,byte
    innodb_buffer_pool_size=256M
    #innodb instance number
    innodb_buffer_pool_instances=2
    #dump cache from memory to disk when server shutdown
    innodb_buffer_pool_dump_at_shutdown=on
    #record page cache immediate
    innodb_buffer_pool_dump_now=on
    #import cache from disk to memory when server startup
    innodb_buffer_pool_load_at_startup=on
    #immediate cache buffer_pool
    innodb_buffer_pool_load_now=on
    #log buffer 8M to 32M
    innodb_log_buffer_size=8M
    #the size of binnary log
    innodb_log_file_size=256M
    #the action of write log to disk:0--flush per second;1--flush on tranction commit(default); 2--0 and 1
    innodb_flush_log_at_trx_commit=1
    #enable innodb monitor
    innodb_monitor_enable=all
    
    ######MyIsam setting######
    key_buffer_size=256M
    read_buffer_size=256K
    read_rnd_buffer_size=256K
    sort_buffer_size=256K
    join_buffer_size=256K
    
    
    ####replication setting#########
    log-bin-trust-function-creators=1
    #enable gtid mode
    gtid_mode=ON
    #enforce gtid consistency
    enforce_gtid_consistency=ON
    #master info storage in table
    master_info_repository=TABLE
    #relay log info storage in table
    relay_log_info_repository=TABLE
    #relay log file name
    relay_log=/var/mysql/logs/db1-relay
    #write binlog when slave apply relay-log
    log_slave_updates=ON
    #binlog format
    binlog_format=ROW
    #semi_sync
    #rpl_semi_sync_master_enabled=on
    #rpl_semi_sync_master_timeout=1000
    #rpl_semi_sync_slave_enabled=on
    #multi thread
    slave_parallel_type=logical_clock
    slave_parallel_workers=4
    
    #####group replication####
    #slave_preserve_commit_order=1
    #binlog_checksum=NONE
    #collection trasaction information
    #transaction_write_set_extraction=XXHASH64
    #name of relication group
    #loose-group_replication_group_name="aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa"
    #do nothing when server start
    #loose-group_replication_start_on_boot=off
    #local host address and port
    #loose-group_replication_local_address="10.2.5.15:33061"
    #address and port of server in the replication group
    #loose-group_replication_group_seeds="10.2.5.15:33061,10.2.5.16:33061,10.2.5.17:33061,10.2.5.18:33061"
    #the init server set on,any time only one swtich on
    #loose-group_replication_bootstrap_group=off
    
    

    启动文件

    
    [Unit]
    Description=Mysql server 5.7.20
    Documentation=http://doc.mysql.com
    
    [Service]
    Type=forking
    ExecStart=/usr/local/mysql/support-files/mysql.server start
    ExecStop=/usr/local/mysql/support-files/mysql.server stop
    ExecReload=/usr/local/mysql/support-files/mysql.server reload
    
    [Install]
    WantedBy=multi-user.target
    
    

    自动换安装流程

    上传依赖包
    rpm -ivh libaio* 
    上述三个文件放到同一个目录
    执行脚本
    

    安装完成后根据配置信息更改(datadir,buffer_pool) #脚本默认datadir为/data

    相关文章

      网友评论

        本文标题:mysql 5.7手动安装部署

        本文链接:https://www.haomeiwen.com/subject/qbvbzltx.html