mysql 5.7手動(dòng)安裝部署

mysql5.7手動(dòng)、自動(dòng)安裝部署

#上傳安裝包和配置文件
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/
##創(chuàng)建啟動(dòng)賬號(hào)
groupadd mysql 
useradd -g mysql  -s  /sbin/nologin -d /usr/local/mysql/  -M mysql
##創(chuàng)建數(shù)據(jù)目錄
mkdir  /data/mysql/
chown mysql:mysql /data/mysql/
chown mysql:mysql /usr/local/mysql/
##數(shù)據(jù)庫初始化
./mysqld --defaults-file=/etc/my.cnf --initialize --user=user --basedir=/usr/local/mysql/  --datadir=/data/mysql/
##將mysql配置文件上傳
##可使用在線mysql配置文件生成工具
## 
cp -r /application/my.cnf /etc/
##添加環(huán)境變量
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
##啟動(dòng)
/etc/init.d/mysqld start
##登錄測試 
mysql -uroot -p 

#改密碼
### 添加跳過密碼登陸
vim /etc/my.cnf
##添加參數(shù)
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';
##授權(quán)訪問(*.* databasename.tablename)(root@'192.0.0.1' 授權(quán)哪個(gè)賬號(hào)通過那個(gè)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

# 根據(jù)您的服務(wù)器IOPS能力適當(dāng)調(diào)整
# 一般配普通SSD盤的話,可以調(diào)整到 10000 - 20000
# 配置高端PCIe SSD卡的話,則可以調(diào)整的更高,比如 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開始刪除該選項(xiàng)
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 后, 可能會(huì)導(dǎo)致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

自動(dòng)化安裝腳本

#!/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

啟動(dòng)文件


[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

自動(dòng)換安裝流程

上傳依賴包
rpm -ivh libaio* 
上述三個(gè)文件放到同一個(gè)目錄
執(zhí)行腳本

安裝完成后根據(jù)配置信息更改(datadir,buffer_pool) #腳本默認(rèn)datadir為/data

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容