mysql多实例一键部署

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 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 '123123';"

 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的初始密码是:123123

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

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

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

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
20天前
|
存储 关系型数据库 MySQL
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
环比、环比增长率、同比、同比增长率 ,占比,Mysql 8.0 实例(最简单的方法之一)(sample database classicmodels _No.2 )
71 1
|
20天前
|
SQL 前端开发 关系型数据库
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
36 0
全表数据核对 ,行数据核对,列数据核对,Mysql 8.0 实例(sample database classicmodels _No.3 )
|
2月前
|
关系型数据库 MySQL 数据安全/隐私保护
docker应用部署---MySQL的部署配置
这篇文章介绍了如何使用Docker部署MySQL数据库,包括搜索和拉取MySQL镜像、创建容器并设置端口映射和目录映射、进入容器操作MySQL,以及如何使用外部机器连接容器中的MySQL。
docker应用部署---MySQL的部署配置
|
22天前
|
关系型数据库 MySQL Java
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
这篇文章是关于如何使用Django框架配置MySQL数据库,创建模型实例,并自动或手动创建数据库表,以及对这些表进行操作的详细教程。
54 0
Django学习二:配置mysql,创建model实例,自动创建数据库表,对mysql数据库表已经创建好的进行直接操作和实验。
|
30天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
【10月更文挑战第1天】使用Docker部署的MySQL数据库,数据表里的中文读取之后变成问号,如何处理?
52 3
|
30天前
|
关系型数据库 MySQL 数据库
使用Docker部署的MySQL数据库如何设置忽略表名大小写?
【10月更文挑战第1天】使用Docker部署的MySQL数据库如何设置忽略表名大小写?
70 1
|
18天前
|
存储 关系型数据库 MySQL
mysql 8.0 的 建表 和八种 建表引擎实例
mysql 8.0 的 建表 和八种 建表引擎实例
18 0
|
19天前
|
存储 关系型数据库 MySQL
Key_Value 形式 存储_5级省市城乡划分代码 (mysql 8.0 实例)
本文介绍了如何使用MySQL8.0数据库中的Key_Value形式存储全国统计用区划代码和城乡划分代码(5级),包括导入数据、通过数学函数提取省市区信息,以及查询5级行政区划的详细数据。
26 0
|
20天前
|
算法 关系型数据库 MySQL
复购率 mysql 实例(sample database classicmodels _No.1 )
复购率 mysql 实例(sample database classicmodels _No.1 )
24 0
|
2月前
|
NoSQL 关系型数据库 Redis
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo
mall在linux环境下的部署(基于Docker容器),docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongodb、minio详细教程,拉取镜像、运行容器
mall在linux环境下的部署(基于Docker容器),Docker安装mysql、redis、nginx、rabbitmq、elasticsearch、logstash、kibana、mongo