linux一键安装MySQL的脚本,保姆级别的脚本注释,你肯定能看懂

1,下载官方安装包

首先下载MySQL的官方安装包

2,上传安装包到 /opt/

  • /opt//mysql-8.0/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz

3,复制以下代码

  • 保存到/opt/mysql_install.sh里面去
  • (你需要相对应修改的地方就是设置MySQL用户密码那里,在第22行23行那里,其他不用动)
  • 然后赋予可执行权限给这个脚本,最后运行这个脚本

4,安装完成

  • 试试吧,失败的小伙伴可以评论我给你解决一下。按道理应该不会出错
#!/bin/bash#
# 要用root用户 ##


#获取本机的ip地址,然后将这个ip地址设置为环境变量ipaddr的值 
export ipaddr=`ip a | grep -w inet | grep -v 127| awk '{ print $2 }' |awk -F '/' '{print $1}'`
#将本机的ip地址的第三第四位合在一起,然后赋予给环境变量serverid,加入本机ip为10.192.168.178,那么serverid=168178
export serverid=`echo $ipaddr | awk -F '.' '{print $3$4}'`

#以下这一段是为了求得机器的内存是多少。dmidecode -t 17是获取系统内存相关信息,并把这个值赋予给MEM_SIZE这个环境变量
export UNIT=`dmidecode -t 17|grep -i size |grep -i GB|wc -l`
if [[ $UNIT -eq 0 ]]; then
export MEM_SIZE=`dmidecode -t 17|grep -i size |grep -v 'No'|awk '{sum+=$2;}END{print sum;}'`
else
export SIZE=`dmidecode -t 17|grep -i size |grep -v 'No'|awk '{sum+=$2;}END{print sum;}'`
export MEM_SIZE=$(($SIZE*1024))
fi

# 物理内存等于虚拟内存除以2,并把这个值赋予给buffer这个环境变量
export buffer=$(($MEM_SIZE/2))
# 密码需要修改
export pwd=yourpassword
export rplpwd=yourpassword
#统计一下 系统中装有mariadb-libs的数量
mariadbcheck=`rpm -qa|grep mariadb-libs|wc -l`
#如果统计值后发现mariadb-libs的数量等于1,说明系统里装了mariadb-libs,那么我就要用yum remove删除他
if [[ $mariadbcheck -eq 1 ]]; then
yum remove -y mariadb-libs
fi

#解压/opt 目录下的 mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz 文件,并将解压过程中的输出信息重定向到 /dev/null ,这意味着不会在终端显示解压的详细过程和输出。
#tar 是用于打包和解包文件的命令。-J 表示使用 xz 格式进行解压缩。-x 表示解包。-v 表示显示详细信息。-f 后跟要操作的文件。
tar -Jxvf /opt/mysql-8.0.13-linux-glibc2.12-x86_64.tar.xz >/dev/null
mv /opt/mysql-8.0.13-linux-glibc2.12-x86_64/* /usr/local/mysql/
chown -R mysql:mysql /usr/local/mysql/
cp /usr/local/mysql/bin/* /usr/bin/

#检查是否存在/etc/my.cnf个文件,如果存在那么就以当天日期重命名这个文件然后备份为bak,例如my.cnf.20240905140424.bak
if [ -s /etc/my.cnf ]; then
    mv /etc/my.cnf /etc/my.cnf.`date +%Y%m%d%H%M%S`.bak
fi



#创建一个新的/etc/my.cnf文件,然后将以下内容写进去,直至遇到EOF这个标识符,EOF之后的内容就别写进去了 
cat >/etc/my.cnf <<EOF
[mysqld]
read_only                                   = 0
show_compatibility_56                       = 1
port                                        = 3306
server_id                                   = $serverid
user                                        = mysql
basedir                                     = /usr/local/mysql
datadir                                     = /vdb/mysql/data
socket                                      = /vdb/mysql/tmp/mysql.sock
tmpdir                                      = /vdb/mysql/tmp
character_set_server                        = utf8mb4
transaction_isolation                       = READ-COMMITTED
event_scheduler                             = 1
default-time-zone                           = "+8:00"
log_timestamps                              = SYSTEM
explicit_defaults_for_timestamp             = 1
secure_file_priv                            = ""
skip_slave_start                            = 1
skip_name_resolve                           = 1
skip_external_locking                       = 1
lower_case_table_names                      = 1
default_storage_engine                      = InnoDB
disabled_storage_engines                    = ARCHIVE,BLACKHOLE,EXAMPLE,FEDERATED,MEMORY,MERGE,NDB
 
# connection #
lock_wait_timeout                           = 1800
max_connections                             = 3000
max_connect_errors                          = 1000000
interactive_timeout                         = 1800
wait_timeout                                = 1800
 
# session memory setting #
read_buffer_size                            = 8M
read_rnd_buffer_size                        = 8M
sort_buffer_size                            = 2M
tmp_table_size                              = 64M
join_buffer_size                            = 64M
max_heap_table_size                         = 64M
max_allowed_packet                          = 64M
 
# cache config #
key_buffer_size                             = 16M
table_definition_cache                      = 2000
table_open_cache                            = 2000
table_open_cache_instances                  = 8
query_cache_type                            = 0
query_cache_size                            = 0
thread_cache_size                           = 200
open_files_limit                            = 65536
binlog_cache_size                           = 1M
max_binlog_cache_size                       = 512M
 
# log config #
log_bin                                     = /vdb/mysql/binlog/mysql-bin
binlog_format                               = row
sync_binlog                                 = 1
binlog_error_action                         = ABORT_SERVER
max_binlog_size                             = 250M
binlog_rows_query_log_events                = 1
expire_logs_days                            = 7
log_bin_trust_function_creators             = 1
log_slave_updates                           = 1
relay_log                                   = /vdb/mysql/binlog/mysql-relay
relay_log_recovery                          = 1
master_info_repository                      = TABLE
relay_log_info_repository                   = TABLE
log_error                                   = /vdb/mysql/logs/error.log
slow_query_log                              = 1
slow_query_log_file                         = /vdb/mysql/logs/slow.log
long_query_time                             = 5
log_queries_not_using_indexes               = 1
log_slow_admin_statements                   = 1
log_slow_slave_statements                   = 1
log_throttle_queries_not_using_indexes      = 10
min_examined_row_limit                      = 100
 
# innodb settings #
innodb_data_home_dir                        = /vdb/mysql/data
innodb_log_group_home_dir                   = /vdb/mysql/data
innodb_file_per_table                       = 1
innodb_data_file_path                       = ibdata1:1G:autoextend
innodb_flush_log_at_trx_commit              = 1
innodb_buffer_pool_size                     = ${buffer}M
innodb_buffer_pool_instances                = 8
innodb_buffer_pool_load_at_startup          = 1
innodb_buffer_pool_dump_at_shutdown         = 1
innodb_buffer_pool_dump_pct                 = 25
innodb_lock_wait_timeout                    = 10
innodb_io_capacity                          = 10000
innodb_io_capacity_max                      = 20000
innodb_max_dirty_pages_pct                  = 60
innodb_flush_method                         = O_DIRECT
innodb_log_file_size                        = 2G
innodb_log_files_in_group                   = 2
innodb_log_buffer_size                      = 64M
innodb_purge_threads                        = 2
innodb_write_io_threads                     = 16
innodb_read_io_threads                      = 16
innodb_large_prefix                         = 1
innodb_thread_concurrency                   = 64
innodb_print_all_deadlocks                  = 1
innodb_strict_mode                          = 1
innodb_sort_buffer_size                     = 32M
innodb_stats_persistent_sample_pages        = 64
innodb_autoinc_lock_mode                    = 2
innodb_online_alter_log_max_size            = 1G
innodb_open_files                           = 4096
innodb_temp_data_file_path                  = ibtmp1:12M:autoextend:max:20G
 
# undo config #
innodb_rollback_segments                    = 128
innodb_undo_log_truncate                    = 1
innodb_max_undo_log_size                    = 4G
 
# GTID #
gtid_mode                                   = ON
enforce_gtid_consistency                    = 1
binlog_gtid_simple_recovery                 = 1
 
# MTS #
slave_parallel_type                         = LOGICAL_CLOCK
slave_parallel_workers                      = 16
slave_preserve_commit_order                 = ON
slave_rows_search_algorithms                = 'INDEX_SCAN,HASH_SCAN'
 
# SEMISYNC #
plugin-load                                 = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
rpl_semi_sync_master_enabled                = 1
rpl_semi_sync_slave_enabled                 = 1
rpl_semi_sync_master_timeout                = 60000     #1min
rpl_semi_sync_master_wait_for_slave_count   = 1
rpl_semi_sync_master_wait_no_slave          = 0
 
# Performance Schema Config #
performance-schema-instrument               = 'wait/lock/metadata/sql/mdl=ON'
performance-schema-instrument               = 'memory/%=COUNTED'
 
# Other #
innodb_numa_interleave                      = 1
 
[mysqldump]
quick
max_allowed_packet                          = 2G
log-error                                   = /vdb/mysql/logs/dump.log
net_buffer_length                           = 8K
 
[mysqladmin]
default-character-set                       = utf8mb4
socket                                      = /vdb/mysql/tmp/mysql.sock
 
[client]
port                                        = 3306
socket                                      = /vdb/mysql/tmp/mysql.sock
 
[mysql]
prompt                                      = [\\u@\\h][\\d]:\\_
default-character-set                       = utf8mb4
no-auto-rehash
 
EOF


#这里用的是>>,是追加新内容到/root/.bash_profile,并不是全覆盖。
#然后将以下内容写进去,直至遇到EOF这个标识符,EOF之后的内容就别写进去了 
cat >>/root/.bash_profile <<EOF
export PATH=/usr/local/mysql/bin:\$PATH
EOF
刷新/root/.bash_profile这个文件并使之生效
source /root/.bash_profile

#这段命令用于启动 MySQL 服务器,并指定了一些重要的参数:
#/usr/local/mysql/bin/mysqld这个是mysql的启动项,相当于windows桌面上的启动图标双击一下就运行该软件了
# --defaults-file=/etc/my.cnf:指定了配置文件的路径。
#--user=mysql:指定以 mysql 用户身份运行服务器。
#--datadir=/vdb/mysql/data:指定数据存储的目录。
#--basedir=/usr/local/mysql:指定 MySQL 的安装目录。
#--initialize-insecure:执行不安全的初始化,这可能意味着设置一些默认的、不太严格的安全选项来快速初始化数据库。
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --datadir=/vdb/mysql/data --basedir=/usr/local/mysql --initialize-insecure

#把/usr/local/mysql/support-files/mysql.server复制到/etc/init.d/这个文件夹里面去,取名为mysqld
#/etc/init.d/ 文件夹通常用于存放系统服务和守护进程的启动、停止、重启等操作的脚本。
#也就是说我们这样手动安装的软件mysql,以后也可以用systemctl start mysql这样的命令来启动mysql了比较方便。
# /usr/local/mysql/support-files/mysql.server这个文件其实就是一个程序脚本,你看路径名里都有一个support-files
#就是为了方便后续用户可以添加到linux系统里面的快捷启动方式里面(systemctl)。
#但是上面那个/usr/local/mysql/bin/mysqld是mysql的启动文件,这个不是一个脚本,用vim是打不开的,看不到里有啥内容
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
#赋予/etc/init.d/mysqld具有可执行的权限
chmod 755 /etc/init.d/mysqld
#将名为 mysqld 的服务添加到系统的服务管理配置中,方便可以用systemctl来控制启动、停止等状态
chkconfig --add mysqld
#设置 MySQL 服务(mysqld)在运行级别 2、3、4、5 中为开机自启动(on)状态。
#运行级别是系统在不同模式下的运行状态,例如,2 通常是多用户模式但没有网络,3 是多用户模式带网络,4 通常未被使用,5 是带有图形界面的多用户模式。
chkconfig --level 2345 mysqld on

#将”/usr/local/mysql/lib“写入到/etc/ld.so.conf.d/mysql-x86_64.conf里面去
cat  >> /etc/ld.so.conf.d/mysql-x86_64.conf<<EOF
/usr/local/mysql/lib
EOF

#刷新系统的共享库缓存,以便程序能够正确找到和加载所需的共享库
ldconfig
#用于检查/proc/vz是否为一个目录,条件为真,就会执行then后面的语句
#ulimit -s unlimited 这条命令用于设置栈大小(stack size)为无限制(unlimited)。
#在某些情况下,如果程序需要较大的栈空间来处理复杂的操作或递归调用,可能会使用这条命令来避免栈空间不足导致的错误。
if [ -d "/proc/vz" ]; then
    ulimit -s unlimited
fi

#使用systemctl来启动mysql
systemctl start mysqld.service
# 创建监控用户,只读用户,复制用户 
/usr/local/mysql/bin/mysqladmin -u root password $pwd > /dev/dull

#把这两句SQL语句写入到/tmp/mysql_sec_scripts里面去
#这段 SQL 语句的作用是授予用户 'repl_user'@'%' 复制从服务器的权限。
#*.* 表示在所有数据库和所有表上授予权限。
#identified by '$rplpwd' 表示设置该用户的密码为 $rplpwd 变量所代表的值。
#flush privileges是刷新授权表;
cat > /tmp/mysql_sec_scripts<<EOF
grant replication slave on *.* to 'repl_user'@'%' identified by  '$rplpwd';
flush privileges;
EOF

# 使用 /usr/local/mysql/bin/mysql 这个 MySQL 客户端程序,
#以 root 用户身份,密码由 $pwd 变量指定,连接到本地主机(localhost)上的 MySQL 服务器
#并执行 /tmp/mysql_sec_scripts 文件中的 SQL 语句
#  /usr/local/mysql/bin/mysql和刚才上面提到的/usr/local/mysql/bin/mysqld是不太一样的
# mysql是客户端程序,mysqld是主程序,主程序是运行在背后,但是我们人类想看mysql数据库里面的各种数据库具体表格
#就需要用到mysql客户端了,用mysql客户端连接背后的数据库用SQL语句进行相关的增删改查交互操作
/usr/local/mysql/bin/mysql -u root -p$pwd -h localhost </tmp/mysql_sec_scripts
#删除/tmp/mysql_sec_scripts
rm -f /tmp/mysql_sec_scripts
#检查MySQL主程序有没有运行,在运行就赋值mcheck为1,否则为0
mcheck=`systemctl status mysqld.service|grep 'active (running)'|wc -l`
#如果/usr/local/mysql/bin/mysql存在,并且/usr/local/mysql/bin/mysqld_safe也存在,
#并且/etc/my.cnf也存在,并且MySQL主程序在运行中
#那么输出MySQL 5.7 install completed,以及MySQL网络连接状态信息,不然就输出安装失败Failed
#ss -anutlp | grep 3306就是使用 ss 命令查看所有的网络连接状态信息;
#(包括套接字的类型、状态、本地地址和端口、远程地址和端口等),然后通过 grep 3306 筛选出与端口 3306 相关的连接信息。
if [ -s /usr/local/mysql/bin/mysql ] && [ -s /usr/local/mysql/bin/mysqld_safe ] && [ -s /etc/my.cnf ] && [ $mcheck -eq 1 ]; then
    echo ""
    echo "MySQL 5.7 install completed"
    ss -anutlp | grep 3306
else
    echo "Error: MySQL Install Failed!!"
fi

================================================================================

创作不易,给点小小的支持吧

在这里插入图片描述
在这里插入图片描述

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值