gpt4 book ai didi

mysql - 在 CentOS 7 (x64) 中通过 bash shell 脚本安装 MySQL Community Server 5.7

转载 作者:行者123 更新时间:2023-11-29 02:19:07 26 4
gpt4 key购买 nike

我正在尝试创建一个 bash shell 脚本来在 CentOS 7 (x64) 上自动安装 MySQL Community Server 5.7 版。

我遇到了这个可爱的脚本 https://github.com/mysql/mysql-docker/blob/mysql-server/5.7/docker-entrypoint.sh并将以下内容放在一起:

#!/bin/sh

DATADIR="/var/lib/mysql"
MYSQL_ROOT_PASSWORD="$(pwmake 128)"

echo ' -> Removing previous mysql installation';
systemctl stop mysqld.service && yum remove -y mysql-community-server && rm -rf /var/lib/mysql && rm -rf /var/log/mysqld.log

echo ' -> Installing mysql database server';
yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum install -y mysql-community-server

echo ' -> Creating mysql data directory'
mkdir -p "$DATADIR"
chown -R mysql:mysql "$DATADIR"

echo ' -> Initializing mysql database'
mysqld --initialize-insecure=on --user=mysql --datadir="$DATADIR"
mysqld --user=mysql --datadir="$DATADIR" --skip-networking & pid="$!"
mysql=( mysql --protocol=socket -uroot )
for i in {30..0}; do
if echo 'SELECT 1' | "${mysql[@]}" &> /dev/null; then
break
fi
echo 'MySQL init process in progress ...'
sleep 1
done
if [ "$i" = 0 ]; then
echo >&2 'MySQL init process failed'
exit 1
fi

echo ' -> Setting mysql server root password';
mysql_tzinfo_to_sql /usr/share/zoneinfo | "${mysql[@]}" mysql
"${mysql[@]}" <<-EOSQL
SET @@SESSION.SQL_LOG_BIN=0;
DELETE FROM mysql.user where user != 'mysql.sys';
CREATE USER 'root'@'%' IDENTIFIED BY '${MYSQL_ROOT_PASSWORD}' ;
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION ;
DROP DATABASE IF EXISTS test ;
FLUSH PRIVILEGES ;
EOSQL
if [ ! -z "$MYSQL_ROOT_PASSWORD" ]; then
mysql+=( -p"${MYSQL_ROOT_PASSWORD}" )
fi
if ! kill -s TERM "$pid" || ! wait "$pid"; then
echo >&2 'MySQL init process failed.'
exit 1
fi
chown -R mysql:mysql "$DATADIR"

echo " -> Mysql server setup completed, your root password: $MYSQL_ROOT_PASSWORD"

脚本应该执行以下操作:

  1. 删除以前的 mysql 安装
  2. 安装mysql数据库服务器
  3. 创建 mysql 数据目录并设置所有权
  4. 正在初始化mysql数据库
  5. 设置mysql服务器root密码

当我运行脚本时,这是我得到的输出:

Total download size: 142 M
Installed size: 652 M
Downloading packages:
mysql-community-server-5.7.10-1.el7.x86_64.rpm | 142 MB 00:00:04
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
Installing : mysql-community-server-5.7.10-1.el7.x86_64 1/1
Verifying : mysql-community-server-5.7.10-1.el7.x86_64 1/1

Installed:
mysql-community-server.x86_64 0:5.7.10-1.el7

Complete!
-> Creating mysql data directory
-> Initializing mysql database
MySQL init process in progress ...
MySQL init process in progress ...
...snipped...
MySQL init process in progress ...
MySQL init process in progress ...
MySQL init process failed

我认为脚本中的步骤非常简单,但它失败了。有什么想法吗?

最佳答案

我通过重写 shell 脚本设法实现了这一点。这现在对我来说完美无缺:)

#!/bin/bash

mysqlRootPass="$(pwmake 128)"

echo ' -> Removing previous mysql server installation'
systemctl stop mysqld.service && yum remove -y mysql-community-server && rm -rf /var/lib/mysql && rm -rf /var/log/mysqld.log && rm -rf /etc/my.cnf

echo ' -> Installing mysql server (community edition)'
yum localinstall -y https://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
yum install -y mysql-community-server

echo ' -> Starting mysql server (first run)'
systemctl enable mysqld.service
systemctl start mysqld.service
tempRootDBPass="`grep 'temporary.*root@localhost' /var/log/mysqld.log | tail -n 1 | sed 's/.*root@localhost: //'`"

echo ' -> Setting up new mysql server root password'
systemctl stop mysqld.service
rm -rf /var/lib/mysql/*logfile*
wget -O /etc/my.cnf "https://my-site.com/downloads/mysql/512MB.cnf"
systemctl start mysqld.service
mysqladmin -u root --password="$tempRootDBPass" password "$mysqlRootPass"
mysql -u root --password="$mysqlRootPass" -e <<-EOSQL
DELETE FROM mysql.user WHERE User='';
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
DELETE FROM mysql.user where user != 'mysql.sys';
CREATE USER 'root'@'%' IDENTIFIED BY '${mysqlRootPass}';
GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EOSQL
systemctl status mysqld.service
echo " -> MySQL server installation completed, root password: $mysqlRootPass";

关于mysql - 在 CentOS 7 (x64) 中通过 bash shell 脚本安装 MySQL Community Server 5.7,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34569373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com