mysql一键批量部署数据库

#!/bin/bash

#download mysql package

package="/opt/mysql-8.0.27-linux-glibc2.12-x86_64.tar.xz"

echo -n "please input start_port:"

read start_port

echo -n "please input end_port:"

read end_port

pts=$(seq ${start_port} ${end_port})

echo -n "please input innodb_pool_size,eg 512M,2G:"

read pool_size

innodb_pool_size=${pool_size}

echo -n "please input data_base dir:"

read base_dir

data_root=${base_dir}

#test network connecting

ping -c 3 www.baidu.com

if test $? -eq 0;then

  mkdir software && cd software

#download package

fi

#create mysql user and group

if test `cat /etc/passwd |grep mysql`;then

  echo "mysql user already exist"

else

useradd -M -s /sbin/nologin mysql

fi


#unzip mysql package

xz -dk $package;

tar -xvf  $(basename ${package} .xz)

package_dir=$(basename ${package} .tar.xz)

for pt in $pts;

do

mkdir -p ${data_root}/$pt

cp -rpf ${package_dir}/*  ${data_root}/$pt && mkdir -p ${data_root}/$pt/data

chown -R mysql:mysql ${data_root}/$pt

#config mysql configfile

cat  >/etc/my$pt.cnf<<EOF

[mysql]

auto-rehash

socket                              =${data_root}/$pt/data/mysql$pt.sock                #  /tmp/mysql.sock

[mysqld]

####: for global

user                                =mysql

server_id                          =$pt                          # 1

port                                =$pt

mysqlx                              =0

basedir                            =${data_root}/$pt/            # /usr/local/mysql/

datadir                            =${data_root}/$pt/data    # /usr/local/mysql/data/

max_prepared_stmt_count            =1048576                        # 16382

open_files_limit                    =65536                          # 65536

socket                              =${data_root}/$pt/data/mysql$pt.sock                # /tmp/mysql.sock

skip_name_resolve                  =1                              #  0

super_read_only                    =OFF                            # OFF

sql_require_primary_key            =ON                            # OFF

cte_max_recursion_depth            =1000                          # 1000

log_timestamps                      =system                        # UTC

lower_case_table_names              =1                              # 0

auto_increment_increment            =1                              # 1

auto_increment_offset              =1                              # 1

lock_wait_timeout                  =31536000                      # ! for metadata lock wait

event_scheduler                    =OFF                            # ON

auto_generate_certs                =ON                            # ON

big_tables                          =OFF                            # OFF ! for TempTable storage engine

join_buffer_size                    =256k                          # 0.25M

activate_all_roles_on_login        =ON                            # OFF

end_markers_in_json                =OFF                            # OFF

tmpdir                              =/tmp/

max_connections                    =512                            # 151

autocommit                          =ON                            # ON

sort_buffer_size                    =262144                        # 262144(256k) ! fix too many Sort_merge_passes per second

#                                                                    # in SHOW GLOBAL STATUS output; speed up ORDER BY or GROUP BY operations

####: for table cache

table_open_cache                    =4000                          #  2000

table_definition_cache              =2000                          #  1400

table_open_cache_instances          =32                            #  16

####: for net

max_allowed_packet                  =64M                            # 64M

bind_address                        =*                              # *

connect_timeout                    =10                            # 10

interactive_timeout                =28800                          # 28800

net_read_timeout                    =30                            # 30

net_retry_count                    =10                            # 10

net_write_timeout                  =60                            # 60

net_buffer_length                  =32k                            # 16384(16k)

####: for logs

log_output                          =FILE                          # FILE

##  -- general log

general_log                        =OFF                            # OFF

general_log_file                    =general.log                    # hotname.log

##  -- error log

log_error                          =err.log                        # stderr

log_statements_unsafe_for_binlog    =ON                            # ! for error 1592

##  -- slow log

long_query_time                          =2.0                      # 10.000000

log_queries_not_using_indexes            =OFF                      # OFF

log_slow_admin_statements                =OFF                      # OFF

log_slow_slave_statements                =OFF                      # OFF

slow_query_log                          =ON                        # OFF

slow_query_log_file                      =slow.log                  # slow.log


####: for binlog

log_bin                                      =mysql-bin

binlog_checksum                              =none                          # CRC32

log_bin_trust_function_creators              =ON                            # OFF

binlog_direct_non_transactional_updates      =OFF                          # OFF

binlog_expire_logs_seconds                    =604800                        # 2592000(30days) | 604800(7days)

binlog_error_action                          =ABORT_SERVER                  # ABORT_SERVER | IGNORE_ERROR

binlog_format                                =ROW                          # ROW | STATEMENT | MIXED

max_binlog_stmt_cache_size                    =1G                            # 18446744073709547520

max_binlog_cache_size                        =1G                            # 18446744073709547520(1G)

max_binlog_size                              =1G

binlog_order_commits                          =ON                            # ON

binlog_row_image                              =FULL                          # FULL | MINIMAL | NOBLOB

binlog_row_metadata                          =MINIMAL                      # MINIMAL | FULL

binlog_rows_query_log_events                  =ON                            # OFF

sync_binlog                                  =1                            # 1 | 0 | N

binlog_stmt_cache_size                        =32k                          # 32768(32k)

log_slave_updates                            =ON                            # ON

binlog_group_commit_sync_delay                =4000                          # 0

binlog_group_commit_sync_no_delay_count      =10                            # 0

binlog_cache_size                            =96k                          # 32768(32k)

binlog_transaction_dependency_history_size    =25000                        # 25000

binlog_transaction_dependency_tracking        =WRITESET                      # COMMIT_ORDER | WRITESET | WRITESET_SESSION

####: for storage engine

default_storage_engine                        =innodb                      # InnoDB

default_tmp_storage_engine                    =innodb                      # InnoDB

internal_tmp_mem_storage_engine              =TempTable                    # TempTable

####: for innodb

## disk I/O and file space management

innodb_data_home_dir                =./                            # ./

innodb_data_file_path              =ibdata1:256M;ibdata2:256M:autoextend        # ibdata1:12M:autoextend

innodb_page_size                    =16k                            # 16384(16k)

innodb_default_row_format          =dynamic                        # dynamic | compact | redundant

innodb_log_group_home_dir          =./                            # ./

innodb_log_files_in_group          =8                              # 2

innodb_log_file_size                =128M                          # 50331648(48M)

innodb_log_buffer_size              =256M                          # 16777216(16M)

innodb_redo_log_encrypt            =OFF                            # OFF

innodb_online_alter_log_max_size    =128M                          # 134217728(128M)

innodb_undo_directory              =./                            # ./

innodb_undo_log_encrypt            =OFF                            # OFF

innodb_undo_log_truncate            =ON                            # ON

innodb_max_undo_log_size            =1G                            # 1073741824(1G)

innodb_rollback_on_timeout          =OFF                            # OFF

innodb_rollback_segments            =128                            # 128 [1~128]

innodb_log_checksums                =ON                            # ON

innodb_checksum_algorithm          =crc32                          # crc32

innodb_log_compressed_pages        =ON                            # ON

innodb_doublewrite                  =ON                            # ON  ! do not disable it please.

innodb_commit_concurrency          =0                              # 0

## configuring innodb  readonly

innodb_read_only                    =OFF                            # OFF

## configuring innodb dedicated server

innodb_dedicated_server            =OFF                            # OFF ! related to mysql auto config please donot chanage

## configuring innodb buffer pool size and instances

innodb_buffer_pool_chunk_size      =128M                          # 134217728(128M)

innodb_buffer_pool_size            =${innodb_pool_size}                            # 134217728(128M)

innodb_buffer_pool_instances        =10                              # 1

## making the buffer pool scan resistant

innodb_old_blocks_pct              =37                            # 37

innodb_old_blocks_time              =1000                          # 1000

## configuring innodb buffer pool prefetching(read ahead)

innodb_random_read_ahead            =off                            # OFF

innodb_read_ahead_threshold        =56                            # 56

## configuring innodb buffer pool flushing

innodb_max_dirty_pages_pct_lwm      =20                            # 10

innodb_max_dirty_pages_pct          =90                            # 90

## fine-tuning innodb buffer pool flushing

innodb_flush_neighbors              =0                              # off | on (off for ssd ,on for hdd)

innodb_lru_scan_depth              =1024                          # 1024

## tuning for sharp checkpoint

innodb_adaptive_flushing            =ON                            # ON

innodb_adaptive_flushing_lwm        =10                            # 10

innodb_flushing_avg_loops          =30                            # 30(a heih value means adaptive flushing is slow)

## saving and restoring the buffer pool state

innodb_buffer_pool_dump_pct        =50                            # 50

innodb_buffer_pool_dump_at_shutdown =ON                            # ON

innodb_buffer_pool_load_at_startup  =ON                            # ON

innodb_buffer_pool_filename        =ib_buffer_pool                # ib_buffer_pool

innodb_stats_persistent            =ON                            # ON

innodb_stats_on_metadata            =ON                            # OFF

innodb_stats_method                =nulls_equal                    # nulls_equal

innodb_stats_auto_recalc            =ON                            # ON

innodb_stats_include_delete_marked  =ON                            # ON

innodb_stats_persistent_sample_pages=20                            # 20

innodb_stats_transient_sample_pages =8                              # 8

innodb_status_output                =OFF                            # OFF

innodb_status_output_locks          =OFF                            # OFF

innodb_buffer_pool_dump_now        =OFF                            # OFF

innodb_buffer_pool_load_abort      =OFF                            # OFF

innodb_buffer_pool_load_now        =OFF                            # OFF

## configuring thread concurrency for innodb

innodb_thread_concurrency          =0                              # 0

#? if innodb_thread_concurrency is 0, the value of innodb_thread_sleep_delay is ignored;

#? so default the next 3 are ignored.

innodb_concurrency_tickets          =5000                          # 5000

innodb_thread_sleep_delay          =15000                          # 4000  ( 4ms)

innodb_adaptive_max_sleep_delay    =150000                        # 150000 (15/100 s)

## configuring the number of background innoDB i/o threads

#? if you see more than 64 × innodb_read_io_threads pending read requests in

#? SHOW ENGINE INNODB STATUS output, you might improve performance

#? by increasing the value of innodb_read_io_threads.

innodb_read_io_threads              =4                              # 4

innodb_write_io_threads            =4                              # 4

## using asynchronous i/o on linux

#? 1):perform read-ahead and write requests for data file pages.

#? 2):Too many I/O write requests dispatched to the operating system for parallel processing could,

#? in some cases, result in I/O read starvation

innodb_use_native_aio              =ON                            # ON

## configuring the innodb master thread i/o rate

innodb_flush_sync                  =OFF                            # ON

#? To adhere to the limit on InnoDB background I/O activity defined by the innodb_io_capacity setting,

#? disable innodb_flush_sync.

innodb_io_capacity                  =4000                            # 200

innodb_io_capacity_max              =20000                          # 2000

## configuring spin lock polling

innodb_spin_wait_delay              =6                              # 6

## configuring innoDB purge scheduling

innodb_purge_threads                =4                              # 4

innodb_purge_batch_size            =300                            # 300(300 undo log page)

innodb_purge_rseg_truncate_frequency=128                            # 128

## --  Lock & Wait

innodb_deadlock_detect              =ON                            # ON

innodb_autoinc_lock_mode            =2                              # 0 | 1 | 2

innodb_print_all_deadlocks          =ON                            # OFF

innodb_lock_wait_timeout            =50                            # 50

innodb_table_locks                  =ON                            # ON

innodb_sync_array_size              =1                              # 1

innodb_sync_spin_loops              =30                            # 30

## innodb others

innodb_print_ddl_logs              =OFF                            # OFF

innodb_replication_delay            =0                              # 0

innodb_cmp_per_index_enabled        =OFF                            # ! do not enable it please.

innodb_disable_sort_file_cache      =OFF                            # OFF

innodb_numa_interleave              =OFF                            # OFF

innodb_strict_mode                  =ON                            # ON

innodb_sort_buffer_size            =1M                            # 1M(global and only for full-text search)

innodb_fast_shutdown                =1                              # 0 | 1 | 2

innodb_force_load_corrupted        =OFF                            # OFF

innodb_force_recovery              =0                              # 0 | 1 | 2 | 3 | 4 | 5 | 6

innodb_temp_tablespaces_dir        =./#innodb_temp/                # ./#innodb_temp/

innodb_tmpdir                      =./                            # ! the sort file temp dir of alter table opration

innodb_temp_data_file_path          =ibtmp1:64M:autoextend          # ibtmp1:12M:autoextend ! stores rollback segments for changes made to user-created temporary tables.

innodb_page_cleaners                =4                              # 1

## adaptive hash index

innodb_adaptive_hash_index          =ON                            # ON

innodb_adaptive_hash_index_parts    =8                              # 8

## -- Flush & Io

innodb_flush_log_at_timeout        =1                              # 1

innodb_flush_log_at_trx_commit      =1                              # 1 | 0 | 2

innodb_flush_method                =O_DIRECT                      # fsync | o_direct

innodb_fsync_threshold              =0                              # 0 ~ 2**64-1

innodb_change_buffer_max_size      =25                            # 25

innodb_change_buffering            =all                            # all | none | inserts | deletes | changes | purges

####: others

div_precision_increment            =4                              # 4

eq_range_index_dive_limit          =200                            # 200

explicit_defaults_for_timestamp    =ON                            # ON

group_concat_max_len                =1024                          # 1024

flush                              =OFF                            # OFF

flush_time                          =0                              # 0

automatic_sp_privileges            =ON                            # ON

innodb_fill_factor                  =90                            # 100

innodb_file_per_table              =ON                            # ON

innodb_autoextend_increment        =64                            # 64

innodb_open_files                  =64000                          # 4000

####: for authentication

caching_sha2_password_auto_generate_rsa_keys  =ON                            # ON

caching_sha2_password_private_key_path        =private_key.pem              # private_key.pem

caching_sha2_password_public_key_path        =public_key.pem                # public_key.pem

default_authentication_plugin                =caching_sha2_password        # caching_sha2_password

default_password_lifetime                    =0                            # 0

disconnect_on_expired_password                =ON                            # ON

####: for character

character_set_server                =utf8mb4                        # utf8mb4

collation_server                    =utf8mb4_0900_ai_ci            # utf8mb4_0900_ai_ci

####: for optimizer

optimizer_prune_level              =1

optimizer_search_depth              =62

optimizer_switch                    =index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_cost_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_indexes=off,skip_scan=on

optimizer_trace                    =enabled=off,one_line=off

optimizer_trace_features            =greedy_search=on,range_optimizer=on,dynamic_range=on,repeated_subselect=on

optimizer_trace_limit              =1

optimizer_trace_max_mem_size        =1048576

optimizer_trace_offset              =-1                                                                                                                                                                                                                               

####  for performance_schema

performance_schema                                                      =on    #    on

performance_schema_consumer_global_instrumentation                      =on    #    on

performance_schema_consumer_thread_instrumentation                      =on    #    on

performance_schema_consumer_events_stages_current                      =on    #    off

performance_schema_consumer_events_stages_history                      =on    #    off

performance_schema_consumer_events_stages_history_long                  =off  #    off

performance_schema_consumer_statements_digest                          =on    #    on

performance_schema_consumer_events_statements_current                  =on    #    on

performance_schema_consumer_events_statements_history                  =on    #    on

performance_schema_consumer_events_statements_history_long              =off  #    off

performance_schema_consumer_events_waits_current                        =on    #    off

performance_schema_consumer_events_waits_history                        =on    #    off

performance_schema_consumer_events_waits_history_long                  =off  #    off

performance-schema-instrument                                          ='memory/%=COUNTED'

EOF

##config mysql startup script

cat<<EOF > /etc/init.d/mysql$pt 

port=$pt

mysql_user="root"

cmdpath="${data_root}/${pt}/bin"

mysql_sock="${data_root}/${pt}/data/mysql$pt.sock"

#pidname="$(hostname)"

mysqld_pid_file_path="${data_root}/${pt}/data/$(hostname).pid"

start(){

    if [ ! -e "\$mysql_sock" ];then

        printf "Starting MySQL...\n"

        \${cmdpath}/mysqld --defaults-file=/etc/my${pt}.cnf --user=\${mysql_user} 2>/dev/null &

        sleep 3

    else

    printf "MySQL is running...\n"

    exit 1

    fi

}

stop(){

    if [ ! -e "\$mysql_sock" ];then

    printf "MySQL is stopped...\n"

    exit 1

    else

    printf "Stoping MySQL...\n"

    mysqld_pid=\`cat "\$mysqld_pid_file_path"\`

      if (kill -0 \$mysqld_pid 2>/dev/null)

        then

        kill \$mysqld_pid

        sleep 2

      else

        rm \$mysqld_pid_file_path


        fi

    fi

}

restart(){

    printf "Restarting MySQL...\n"

    stop

    sleep 2

    start

}

case "\$1" in

start)

    start

;;

stop)

    stop

;;

restart)

    restart

;;

*)

    printf "Usage: /etc/init.d/mysql${pt} {start|stop|restart}\n"

esac

EOF

#initial mysqlserver

${data_root}/$pt/bin/mysqld --defaults-file=/etc/my$pt.cnf --initialize --basedir=${data_root}/$pt

#startup mysqlserver

chmod 755 /etc/init.d/mysql${pt}

/etc/init.d/mysql${pt} start

if [ $? -eq 0  ];then

  sleep 20

  #modify mysqlserver password

  export MYSQL_PWD=$(cat ${data_root}/$pt/data/err.log  |grep password  |awk -F 'root@localhost:' '{print $NF}' |sed 's/^[][ ]*//g')

  ${data_root}/$pt/bin/mysql --connect-expired-password -hlocalhost -uroot  -P${pt} -S ${data_root}/${pt}/data/mysql$pt.sock -e "alter user root@localhost identified by 'Rootasdf2023';"

  if [ $? -eq 0 ];then

        echo "MySQL INSTANCE $pt is install sucessed!"

  else

        echo "MySQL INSTANCE $pt is install maybe failed!please you check"

  fi 

fi

done

1、配置文件参数是mysql 8.0

2、安装成功后root的初始密码是:Rootasdf2023

3、运行脚本时,只需要输入开始端口号,结束端口号、innodb_buffer_size的大小、安装目录即可。

4、Mysql各实例配置文件路径为:/etc/my{port}.cnf

5、Mysql各实例配置文件路径为:/etc/init.d/mysql{port}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,992评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,212评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,535评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,197评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,310评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,383评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,409评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,191评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,621评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,910评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,084评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,763评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,403评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,083评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,318评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,946评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,967评论 2 351

推荐阅读更多精彩内容