一键部署 Mysql 数据库

  Shell脚本实现


#!/bin/bash


function loginfo() {

if [[ $? -eq 0 ]];then

    echo -e "\033[32m[INFO][$(date +"%F %T")] $1 succeed! \033[0m"

else

    echo -e "\033[31m[ERROR][$(date +"%F %T")] $1 failed! \033[0m"

fi

}


function install_mysql() {

echo -e "\033[32mBegin install mysql V5.7.28 ...\033[0m"
安装依赖

sudo yum install libaio -y >/dev/null 2>&1

loginfo "libaio install"


BASE_DIR=$(pwd)

DEPLOY_PATH="/opt"

MYSQL_PKG_PATH=$DEPLOY_PATH/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz

USER=$(whoami)

GROUP=$(groups)

MYSQL_URL="http://101.34.22.188/mysql-5.7.28/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz"
下载解压创建目录

echo -e "\033[32mBegin download mysql V5.7.28 ...\033[0m"


if [ ! -f ${DEPLOY_PATH}/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz ]

then

    sudo curl -o ${DEPLOY_PATH}/mysql-5.7.28-linux-glibc2.12-x86_64.tar.gz ${MYSQL_URL} >/dev/null 2>&1

 loginfo "mysql software download"

fi


sudo tar xf ${MYSQL_PKG_PATH} -C ${DEPLOY_PATH}/ 

loginfo "mysql software decompression"

if [[ -d ${DEPLOY_PATH}/mysql ]];then

    rm -rf ${DEPLOY_PATH}/mysql

fi

sudo ln -s ${DEPLOY_PATH}/mysql-5.7.28-linux-glibc2.12-x86_64 ${DEPLOY_PATH}/mysql 

loginfo "create mysql dir soft link"

if [[ -d /data/mysql ]];then

    rm -rf /data/mysql

fi

sudo mkdir -p /data/mysql

loginfo "create mysql data dir"

修改启动脚本

sudo sed -i '46s#basedir=#basedir=/opt/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server

sudo sed -i '47s#datadir=#datadir=/data/mysql#' ${DEPLOY_PATH}/mysql/support-files/mysql.server

sudo cp ${DEPLOY_PATH}/mysql/support-files/mysql.server /etc/init.d/mysqld

sudo chmod 755 /etc/init.d/mysqld
创建用户

if ! grep -q '^mysql:' /etc/group

then

    sudo groupadd mysql

    loginfo "create user mysql"

fi


if ! grep -q '^mysql:' /etc/passwd

then

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

    loginfo "create group mysql"

fi
赋予data目录和base目录普通用户组

sudo chown -R ${USER}.${GROUP} ${DEPLOY_PATH}/mysql/

sudo chown -R ${USER}.${GROUP} /data/



if [ ! -f /usr/bin/mysql ]

then

    sudo ln -s /opt/mysql/bin/mysql /usr/bin/

fi
创建配置文件

if [ -f /etc/my.cnf ]

then

    sudo rm -f /etc/my.cnf

fi

sudo bash -c "cat >> /etc/my.cnf" <<EOF

[mysqld]

datadir                             = /data/mysql

basedir                             = /opt/mysql

#tmpdir                              = /data/mysql/tmp_mysql

port                                = 3306

socket                              = /data/mysql/mysql.sock

pid-file                            = /data/mysql/mysql.pid

max_connections                     = 8000

max_connect_errors                  = 100000

max_user_connections                = 3000

check_proxy_users                   = on

mysql_native_password_proxy_users   = on

local_infile                        = OFF

symbolic-links                      = FALSE

group_concat_max_len                = 4294967295

max_join_size                       = 18446744073709551615

max_execution_time                  = 20000

lock_wait_timeout                   = 60

autocommit                          = 1

lower_case_table_names              = 1

thread_cache_size                   = 64

disabled_storage_engines            = "MyISAM,FEDERATED"

character_set_server                = utf8mb4

character-set-client-handshake      = FALSE

collation_server                    = utf8mb4_general_ci

init_connect                        = 'SET NAMES utf8mb4'

transaction-isolation               = "READ-COMMITTED"

skip_name_resolve                   = ON

explicit_defaults_for_timestamp     = ON

log_timestamps                      = SYSTEM

local_infile                        = OFF

event_scheduler                     = OFF

query_cache_type                    = OFF

query_cache_size                    = 0

sql_mode                            = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO

log_error                           = /data/mysql/mysql.err

slow_query_log                      = ON

slow_query_log_file                 = /data/mysql/slow.log

long_query_time                     = 1

general_log                         = OFF

general_log_file                    = /data/mysql/general.log

expire_logs_days                    = 99

log-bin                             = /data/mysql/mysql-bin

log-bin-index                       = /data/mysql/mysql-bin.index

max_binlog_size                     = 500M

binlog_format                       = mixed

binlog_rows_query_log_events        = ON

binlog_cache_size                   = 128k

binlog_stmt_cache_size              = 128k

log-bin-trust-function-creators     = 1

max_binlog_cache_size               = 2G

max_binlog_stmt_cache_size          = 2G

relay_log                           = /data/mysql/relay

relay_log_index                     = /data/mysql/relay.index

max_relay_log_size                  = 500M

relay_log_purge                     = ON

relay_log_recovery                  = ON

server_id                           = 1

read_buffer_size                    = 1M

read_rnd_buffer_size                = 2M

sort_buffer_size                    = 64M

join_buffer_size                    = 64M

tmp_table_size                      = 64M

max_allowed_packet                  = 128M

max_heap_table_size                 = 64M

connect_timeout                     = 43200

wait_timeout                        = 43200

back_log                            = 512

interactive_timeout                 = 300

net_read_timeout                    = 30

net_write_timeout                   = 30

skip_external_locking               = ON

key_buffer_size                     = 16M

bulk_insert_buffer_size             = 16M

concurrent_insert                   = ALWAYS

open_files_limit                    = 65000

table_open_cache                    = 16000

table_definition_cache              = 16000

default_storage_engine              = InnoDB

default_tmp_storage_engine          = InnoDB

internal_tmp_disk_storage_engine    = InnoDB

[client]

socket                              = /data/mysql/mysql.sock

default_character_set               = utf8mb4

[mysql]

default_character_set               = utf8mb4

[ndatad default]

TransactionDeadLockDetectionTimeOut = 20000

EOF

sudo chown -R ${USER}.${GROUP} /etc/my.cnf

loginfo "configure my.cnf"

创建SSL证书

sudo mkdir -p ${DEPLOY_PATH}/mysql/ca-pem/

sudo ${DEPLOY_PATH}/mysql/bin/mysql_ssl_rsa_setup -d ${DEPLOY_PATH}/mysql/ca-pem/ --uid=mysql

sudo chown -R ${USER}.${GROUP} ${DEPLOY_PATH}/mysql/ca-pem/


sudo bash -c "cat >> /data/mysql/init_file.sql" <<EOF

set global sql_safe_updates=0;

set global sql_select_limit=50000;

EOF

sudo chown -R ${USER}.${GROUP} /data/mysql/init_file.sql

sudo chown -R ${USER}.${GROUP} /etc/init.d/mysqld
初始化

${DEPLOY_PATH}/mysql/bin/mysqld --initialize --user=mysql --basedir=${DEPLOY_PATH}/mysql --datadir=/data/mysql 

loginfo "initialize mysql"
过滤初始密码
mysql_passwd=$(grep 'A temporary password is generated' /data/mysql/mysql.err |awk '{print $NF}')
启动服务
  1. /etc/init.d/mysqld start

  2. loginfo "start mysqld"

修改初始密码

${DEPLOY_PATH}/mysql/bin/mysqladmin -uroot -p${mysql_passwd} password 'xkF*LyCR'

if [ $? -ne 0 ];then

    loginfo "initialize root password"

fi
客户端环境变量

echo "export PATH=\$PATH:${DEPLOY_PATH}/mysql/bin" | sudo tee /etc/profile.d/mysql.sh

source /etc/profile.d/mysql.sh

loginfo "configure envirement"

}


install_mysql

如果你觉得文章不错的话,分享、收藏,在看,关注将会是对我的最大支持,也是我持续更新的最大动力。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值