CentOS 7 shell脚本安装MySQL 8.0.20

数据库安装主要有以下安装方式:

  1. rpm和yum安装方式特点:安装速度快,但很多东西不能修改,如路径,功能不能定制
  2. 编译安装:安装慢,但可以修改很多东西,如路径,功能定制
  3. 二进制安装:安装快且可以定制某些东西

本文提供一个安装脚本,以二进制安装方式安装MySQL 8.0.20

#!/bin/bash
#
# 安装MySQL
# 版权2024 JackC

# 定义 MySQL 版本和安装目录
while true; do
  read -p "Please Input MySQL Port: " -r MYSQL_PORT
  if [ -n "$MYSQL_PORT" ]; then
    break
  fi
done
while true; do
  read -p "Please Input MySQLX Port: " -r MYSQLX_PORT
  if [ -n "$MYSQLX_PORT" ]; then
    break
  fi
done

# 是否设置环境变量
read -p "Are You Want Set MySQL Bin Log to System Environment?(0/1): " -r SET_ENVIRONMENT
if [ -z "$SET_ENVIRONMENT" ]; then
  SET_ENVIRONMENT=0
elif [ "$SET_ENVIRONMENT" -eq 1 ]; then
  SET_ENVIRONMENT=1
fi
MYSQL_VERSION="8.0.20"
MYSQL_INSTALL_DIR="/usr/local/mysql-${MYSQL_PORT}"
MYSQL_DATA_DIR="/data/mysql-${MYSQL_PORT}"
MYSQL_CONFIG_FILE="${MYSQL_INSTALL_DIR}/my.cnf"
MYSQL_LOG_DIR="/var/log/mysql-${MYSQL_PORT}"
MYSQL_SERVICE_FILE="/etc/systemd/system/mysql-${MYSQL_PORT}.service"
# 新的MySQL下载路径
MYSQL_DOWNLOAD_PATH="https://downloads.mysql.com/archives/get/p/23/file"

closeFirewall() {
  # 关闭firewalld防火墙服务,并且设置开机不要启动
  systemctl stop iptables
  systemctl disable iptables
  systemctl stop firewalld
  systemctl disable firewalld

  # 临时关闭selinux
  setenforce 0
  # 永久关闭selinux
  sed -i '/^SELINUX=/ s/enforcing/disabled/' /etc/selinux/config
}

echoMySQLInfo() {
  echo -e "\n\n"
  echo "====================================================================================="
  echo "MySQL version is ${MYSQL_VERSION}"
  echo "MySQL port is ${MYSQL_PORT}"
  echo "MySQLx port is ${MYSQLX_PORT}"
  echo "MySQL basedir is ${MYSQL_INSTALL_DIR}"
  echo "MySQL datadir is ${MYSQL_DATA_DIR}"
  echo "MySQL logdir is ${MYSQL_LOG_DIR}"
  echo "MySQL config file is ${MYSQL_CONFIG_FILE}"
  echo "MySQL systemd service is ${MYSQL_SERVICE_FILE}"
  echo "====================================================================================="
  echo -e "\n\n"
}

buildEnvironment() {
  # 检查用户和用户组是否存在,如果不存在则创建
  if id "mysql" >/dev/null 2>&1; then
    echo "User exists"
  else
    echo "User does not exist, creating now."
    groupadd mysql
    useradd -r -g mysql -s /bin/false mysql
  fi

  # 检查目录是否存在,如果不存在则创建
  local dir
  for dir in ${MYSQL_INSTALL_DIR} ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR}; do
    if [ -d "$dir" ]; then
      echo "$dir exists. remove it first!"
      exit 1 # 这里直接报错,不然会影响到其他软件
      # rm -rf "$dir"
    else
      echo "$dir does not exist, creating now."
      mkdir -p "$dir"
      chown -R mysql.mysql "$dir"
    fi
  done
}

downloadMySQLFile() {
  # 下载 MySQL 二进制包
  if [ -f mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.xz ]; then
    echo "mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.xz file exists"
  else
    wget ${MYSQL_DOWNLOAD_PATH}/mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.xz
  fi

  # 解压缩二进制包
  echo "tar Jxf mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.xz -C ${MYSQL_INSTALL_DIR} --strip-components=1"
  if ! tar Jxf mysql-${MYSQL_VERSION}-linux-glibc2.12-x86_64.tar.xz -C "${MYSQL_INSTALL_DIR}" --strip-components=1; then
    echo "The tar command failed."
    exit
  fi
}

setProfile() {
  if [ ! "$SET_ENVIRONMENT" -eq 0 ]; then
    export PATH=${MYSQL_INSTALL_DIR}/bin/:$PATH
    # 重新启动linux系统后也生效,永久修改
    echo "echo 'export PATH=\"'${MYSQL_INSTALL_DIR}'/bin:\$PATH\"' >> /etc/profile"
    echo "export PATH=${MYSQL_INSTALL_DIR}/bin:\$PATH" >>/etc/profile
  fi
}

createMySQLConf() {
  # 创建 my.cnf 文件
  cat <<EOF >"${MYSQL_CONFIG_FILE}"
[mysqld]
log-bin=${MYSQL_LOG_DIR}/mysql_bin.log
bind-address=0.0.0.0
port=${MYSQL_PORT}
mysqlx_port=${MYSQLX_PORT}
log_error=${MYSQL_LOG_DIR}/error.log
character-set-server=utf8mb4
max_connections=1000
server-id=${MYSQL_PORT}

basedir=${MYSQL_INSTALL_DIR}
datadir=${MYSQL_DATA_DIR}
pid-file=${MYSQL_INSTALL_DIR}/mysql.pid
socket=${MYSQL_INSTALL_DIR}/mysql.sock
slow_query_log=1
slow_query_log_file=/${MYSQL_LOG_DIR}/mysql_slow.log

[client] 
port=${MYSQL_PORT}
socket=${MYSQL_INSTALL_DIR}/mysql.sock

EOF
}

initMySQL() {
  # 初始化数据目录
  echo -e "\n\n${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=${MYSQL_CONFIG_FILE} --initialize-insecure --user=mysql --basedir=${MYSQL_INSTALL_DIR} --datadir=${MYSQL_DATA_DIR}\n\n"
  "${MYSQL_INSTALL_DIR}/bin/mysqld" --defaults-file="${MYSQL_CONFIG_FILE}" --initialize-insecure --basedir="${MYSQL_INSTALL_DIR}" --datadir="${MYSQL_DATA_DIR}" --user=mysql
}

createMySQLService() {
  # 创建 MySQL 服务单位文件
  cat <<EOF >"${MYSQL_SERVICE_FILE}"
[Unit]
Description=MySQL Server
After=network.target

[Service]
ExecStart=${MYSQL_INSTALL_DIR}/bin/mysqld --defaults-file=${MYSQL_CONFIG_FILE} --user=mysql --basedir=${MYSQL_INSTALL_DIR} --datadir=${MYSQL_DATA_DIR} --socket=${MYSQL_INSTALL_DIR}/mysql.sock
ExecStop=${MYSQL_INSTALL_DIR}/bin/mysqladmin -S ${MYSQL_INSTALL_DIR}/mysql.sock shutdown
Restart=always

[Install]
WantedBy=multi-user.target
EOF
}

startMySQL() {
  # 重新加载 systemd 配置
  systemctl daemon-reload

  # 启动 MySQL 服务
  systemctl start "mysql-${MYSQL_PORT}"

  # 检查 MySQL 服务状态
  systemctl status "mysql-${MYSQL_PORT}"
}

createUser() {
  # 创建用户
  echo "${MYSQL_INSTALL_DIR}/bin/mysql -uroot -h127.0.0.1 -P${MYSQL_PORT} -e \"CREATE USER root@'%' IDENTIFIED BY '123456';GRANT ALL PRIVILEGES ON *.* TO root@'%';FLUSH PRIVILEGES;\""
  "${MYSQL_INSTALL_DIR}/bin/mysql" -uroot -h127.0.0.1 -P"${MYSQL_PORT}" -e "CREATE USER root@'%' IDENTIFIED BY '123456';GRANT ALL PRIVILEGES ON *.* TO root@'%';FLUSH PRIVILEGES;"

  echo -e "\n\n"
  echo "====================================================================================="
  echo "create user root@'%' with password 123456"
  echo "IF you want delete install, you can execute follow command"
  echo -e "\n"
  echo "systemctl stop mysql-${MYSQL_PORT}"
  echo "rm -rf ${MYSQL_INSTALL_DIR} ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR} ${MYSQL_SERVICE_FILE} "
  echo -e "\n"
  echo "Or you can run follow script file: ${MYSQL_INSTALL_DIR}/uninstall.sh"
  cat <<EOF >"${MYSQL_INSTALL_DIR}/uninstall.sh"
#!/bin/bash
systemctl stop mysql-${MYSQL_PORT}

rm -rf ${MYSQL_INSTALL_DIR} ${MYSQL_DATA_DIR} ${MYSQL_LOG_DIR} ${MYSQL_SERVICE_FILE}
EOF
  chmod +x "${MYSQL_INSTALL_DIR}/uninstall.sh"
  echo "====================================================================================="
  echo -e "\n\n"
}

function main() {
  closeFirewall
  echoMySQLInfo
  buildEnvironment
  downloadMySQLFile
  setProfile
  createMySQLConf
  initMySQL
  createMySQLService
  startMySQL
  createUser
}

main "$@"

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: 首先你需要在你的Linux系统上安装MySQL服务器。你可以使用以下命令在终端中安装MySQL: ``` sudo apt-get install mysql-server ``` 安装完成后,你需要设置root用户的密码,可以使用以下命令: ``` sudo mysql_secure_installation ``` 安装完成后你就可以登陆MySQL服务器了。 ``` mysql -u root -p ``` 输入密码登陆。 如果你想要在shell脚本安装并配置MySQL,你可以使用以下命令: ``` #!/bin/bash sudo apt-get update sudo apt-get install mysql-server -y sudo mysql_secure_installation ``` 请确保你有在你的系统上运行shell脚本的权限,然后运行上面的脚本就可以安装并配置MySQL了。 ### 回答2: 安装Mysql一般有两种方式:二进制包安装和源码编译安装。 二进制包安装 1. 下载二进制包 我们可以从Mysql官方网站下载对应版本的二进制包。 2. 解压并安装 在命令行输入以下命令进行解压和安装。 tar zxvf mysql-5.5.20-linux2.6-x86_64.tar.gz cd mysql-5.5.20-linux2.6-x86_64 groupadd mysql useradd -r -g mysql mysql ./scripts/mysql_install_db --user=mysql chown -R root . chown -R mysql data cp support-files/my-medium.cnf /etc/my.cnf bin/mysqld_safe --user=mysql & 源码编译安装 1. 下载源码包 从Mysql官方网站下载对应版本的源码包,解压后进入目录。 2. 编译和安装 在命令行输入以下命令进行编译和安装。 cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DEXTRA_CFLAGS=-I/usr/local/include \ -DEXTRA_LDFLAGS=-L/usr/local/lib make && make install 3. 配置Mysql 在命令行输入以下命令进行配置。 groupadd mysql useradd -r -g mysql mysql cd /usr/local/mysql ./scripts/mysql_install_db --user=mysql cp support-files/mysql.server /etc/init.d/mysql.server cp support-files/my-medium.cnf /etc/my.cnf sed "/skip-external-locking/s/^/#/" -i /etc/my.cnf chkconfig --add mysql.server # 添加到系统启动项 chkconfig mysql.server on # 设置系统启动时自动启动 4. 启动Mysql 在命令行输入以下命令启动Mysql。 service mysql.server start 总结 在安装Mysql时,需要选择适合自己的安装方式,然后按照步骤顺序执行。在安装完成后,还需要进行必要的配置,才能使Mysql正常运行。 ### 回答3: 随着云计算和大数据时代的到来,MySQL已成为最常用的关系型数据库之一,其优点是可靠性高、开源免费、性能稳定且易于管理。在大型服务系统中,MySQL的数据库安装是必不可少的。而使用Shell脚本安装MySQL是一个高效、方便且适用于大规模部署的方式。 首先,我们需要准备一个Shell脚本安装MySQL。下面是一个用于安装MySQLShell脚本: ```bash #!/bin/bash # 安装MySQL sudo apt-get update sudo apt-get install -y mysql-server mysql_secure_installation ``` 该脚本首先更新操作系统并安装MySQL。然后它会启动mysql_secure_installation程序,用于设置MySQL的安全性选项,例如删除匿名用户、设置root用户密码等等。 接下来,我们需要为脚本添加一些变量,来支持更灵活和可配置的MySQL安装。例如,我们可以添加一个变量来存储输入的MySQL root密码: ```bash #!/bin/bash # 输入MySQL root密码 read -p "请输入MySQL root密码: " MYSQL_ROOT_PASSWORD # 安装MySQL sudo apt-get update sudo apt-get install -y mysql-server mysql --user=root --password=${MYSQL_ROOT_PASSWORD} -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQL_ROOT_PASSWORD}');" mysql_secure_installation ``` 这个脚本中我们在安装MySQL之前询问用户输入MySQL root密码,并使用mysql命令设置root用户的密码。由于容易泄露密码,建议生产环境时使用安全的方式存储密码,例如在服务器上存储加密的密码文件,或使用加密的环境变量。 此外,我们还可以添加其他环境变量来配置MySQL安装,例如数据库用户、数据库密码、数据库名称等等。以下是一个示例脚本: ```bash #!/bin/bash # 输入MySQL root密码 read -p "请输入MySQL root密码: " MYSQL_ROOT_PASSWORD # 输入数据库用户名和密码 read -p "请输入数据库用户名: " DB_USER read -p "请输入数据库用户密码: " DB_PASSWORD # 输入数据库名称 read -p "请输入数据库名称: " DB_NAME # 安装MySQL sudo apt-get update sudo apt-get install -y mysql-server # 设置MySQL root用户密码 mysql --user=root --password=${MYSQL_ROOT_PASSWORD} -e "SET PASSWORD FOR 'root'@'localhost' = PASSWORD('${MYSQL_ROOT_PASSWORD}');" # 创建数据库和用户 mysql --user=root --password=${MYSQL_ROOT_PASSWORD} -e "CREATE DATABASE ${DB_NAME};GRANT ALL PRIVILEGES ON ${DB_NAME}.* to '${DB_USER}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';FLUSH PRIVILEGES;" # 安全设置MySQL mysql_secure_installation ``` 这个脚本中我们在安装MySQL之前询问用户输入MySQL root密码、数据库用户名、数据库用户密码和数据库名称,并使用mysql命令创建数据库和用户。 总结来说,Shell脚本是一个非常便捷的方式来安装MySQL。使用Shell脚本可以自动化、快速部署MySQL,这在大型服务系统中特别有价值。如果您需要安装多台服务器上的MySQL,使用Shell脚本可以节省时间和精力。同时,使用Shell脚本还可以让MySQL安装变得可配置和可扩展。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值