一键安装MySQL & MariaDB脚本【所有版本】

MySQL的二进制安装脚本


重要说明(一)
  • MySQL 5.6以及旧版本,直接安装即可空密码登录!
  • MySQL 5.7以及新版本,安装后在日志中生成一次性root密码,第一次登录后必须先修改密码
  • 以下安装 5.7 和 8.0 脚本已将初始密码修改为 centos
  • 安装 5.7 和 8.0 之后,安全加固脚本使用了 expect 语句,注意语法
# MySQL 5.7 以及新版本
初始化操作:
cd /usr/local/mysql/
./scripts/mysql_install_db --initialize --datadir=/data/mysql --user=mysql

其中选项 --initialize 就是'生成初始密码的原因!!!!'
因此 MySQL 5.7 以及新版本的安装,在这一步骤中必须添加此选项

# 注意!!!!!!!!!!!!!!
MariaDB各个版本的安装都不能加上此选项!!!!!!!!!!!!!!
重要说明(二)
  • 各个版本安装包中内容会有所不同,注意检查是否有【 service unit 】文件
  • 以下所有版本安装均使用 /etc/rc.d/init.d/目录实现开机自启
只有存在 service unit 文件,才能够将其拷贝至'/usr/lib/systemd/system/'目录
从而达到 使用`systemctl`进行控制 的效果!!!!!!

# 否则就只能使用目录'/etc/rc.d/init.d/',用于存放服务启动脚本!!
重要说明(三)

注意:从10.4版本开始,安全加固脚本多了一个提问!出现在第二题!!

此项会导致一个变化:安装完毕之后,若当前用户是系统root,则能够以数据库 root 身份空口令登录!!

这是一种更新机制,不是bug
理由:系统 root 账户具有所有权限,应该有空口令登录数据库的特权

详细解释与解决方法:https://www.chaoswork.cn/1107.html

# 若想禁止空口令登录,只需要一条SQL语句
# 登录数据库之后执行:
ALTER USER root@localhost IDENTIFIED VIA mysql_native_password USING PASSWORD("passwd")
'其中passwd即为你想要设置的密码

MySQL 5.6

#!/bin/bash

DIR=`pwd`
NAME="mysql-5.6.47-linux-glibc2.12-x86_64.tar.gz"
FULL_NAME=${DIR}/${NAME}

yum install -y libaio perl-Data-Dumper libncurses*

if [ ! -f ${FULL_NAME} ];then
    echo "package not found"
    exit 1
fi

if [ -h /usr/local/mysql ];then
    echo "MySQL is already installed"
    exit 2
fi   

if id mysql &> /dev/null ; then
    userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql

mkdir -pv /data/mysql
chown mysql:mysql /data/mysql
tar xf ${FULL_NAME} -C /usr/local
cd /usr/local
ln -sv mysql-5.6.47-linux-glibc2.12-x86_64 mysql
chown -R root:root /usr/local/mysql/
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
EOF
cd /usr/local/mysql/
./scripts/mysql_install_db  --datadir=/data/mysql --user=mysql
cp  support-files/mysql.server  /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
service mysqld start
ln -sv /usr/local/mysql/bin/* /usr/bin/
mysql_secure_installation << EOF

y
centos
centos
y
y
y
y
EOF

MySQL 5.7

############ 安装8.0只需要修改包名即可 ##############
'注意后缀是 gz 还是 xz'

# 安装包
mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz

# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz"
NAME="mysql-5.7.29-linux-glibc2.12-x86_64"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"

# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
    echo  "package not found"
    exit 1
fi

if [ -h /usr/local/mysql ] ; then
    echo  "MySQL is already installed"
    exit 2
fi

echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"

# mysql用户检查
if id mysql &> /dev/null ; then
    userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql

# 解压
tar xf $PACKAGE -C /usr/local
cd /usr/local/
ln -s $NAME/ mysql &> /dev/null
chown -R root.root /usr/local/mysql/

# 设置PATH路径
ln -sv /usr/local/mysql/bin/* /usr/bin/ &> /dev/null

# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock    
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF

# 初始化数据库
mysqld --initialize --user=mysql --datadir=/data/mysql
PASSWD=`awk '/temporary password/{print $NF}' /data/mysql/mysql.log`

# 服务启动脚本与开机自启
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

# 修改初始密码
mysqladmin -uroot -p"$PASSWD" password centos &> /dev/null

# 安全加固 【注意此处调用了expect语法】
yum -y install expect &> /dev/null
expect &> /dev/null <<EOF
spawn mysql_secure_installation
expect {
		"Enter password" { send "centos\n";exp_continue }
		"Press y" { send "n\n";exp_continue }
		"Change the password" { send "n\n";exp_continue }
		"Remove anonymous users" { send "y\n";exp_continue }
		"Disallow root login" { send "y\n";exp_continue }
		"Remove test database" { send "y\n";exp_continue }
		"Reload privilege" { send "y\n" }
}
EOF
echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"

MySQL 8.0

## 包名
mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz    注意后缀'xz'

#!/bin/bash
#
#********************************************
#Author:     	jacklee
#QQ:         	1227163339
#Time:       	2020-09-29_19:24:59
#FileName:   	ins.sh
#Copyright:  	2020 All rights reserved
#Description:   
#*********************************************
# 准备环境与变量
DIR=`pwd`
PACKAGE="mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz"
NAME="mysql-8.0.19-linux-glibc2.12-x86_64"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null

# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
    echo  "package not found"
    exit 1
fi

if [ -h /usr/local/mysql ] ; then
    echo  "mysql is already installed"
    exit 2
fi

echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"

# mysql用户检查
if id mysql &> /dev/null ; then
    userdel -f -r mysql &> /dev/null
fi
useradd -r -s /sbin/nologin mysql

# 解压
tar xf $PACKAGE -C /usr/local
cd /usr/local/
ln -s $NAME/ mysql &> /dev/null
chown -R root.root /usr/local/mysql/

# 设置PATH路径
ln -sv /usr/local/mysql/bin/* /usr/bin/ &> /dev/null

# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock    
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
EOF

# 初始化数据库
mysqld --initialize --user=mysql --datadir=/data/mysql
PASSWD=`awk '/temporary password/{print $NF}' /data/mysql/mysql.log`

# 服务启动脚本与开机自启
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

# 修改初始密码
mysqladmin -uroot -p"$PASSWD" password centos &> /dev/null

# 安全加固 【注意此处调用了expect语法】
yum -y install expect &> /dev/null
expect &> /dev/null <<EOF
spawn mysql_secure_installation
expect {
        "Enter password" { send "centos\n";exp_continue }
        "Press y" { send "n\n";exp_continue }
        "Change the password" { send "n\n";exp_continue }
        "Remove anonymous users" { send "y\n";exp_continue }
        "Disallow root login" { send "y\n";exp_continue }
        "Remove test database" { send "y\n";exp_continue }
        "Reload privilege" { send "y\n" }
}
EOF
echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"

MariaDB 10.2.31

# 安装包
mariadb-10.2.31-linux-systemd-x86_64.tar.gz

# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mariadb-10.2.31-linux-systemd-x86_64.tar.gz"
NAME="mariadb-10.2.31-linux-systemd-x86_64"
INS_DIR="/usr/local"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"

# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
    echo  "package not found"
    exit 1
fi

if [ -h ${INS_DIR}/mysql ] ; then
    echo  "MariaDB is already installed"
    exit 2
fi

echo -e "\e[1;32m正在安装MySQL数据库,请等待。。。\e[0m"

# mysql用户检查
if id mysql &> /dev/null ; then
    userdel -f -r mysql
fi
useradd -r -s /sbin/nologin mysql

# 解压、软链接、文件属性
tar xf $PACKAGE -C $INS_DIR
cd $INS_DIR
ln -s $INS_DIR/$NAME  $INS_DIR/mysql  &> /dev/null
chown -R root.root $INS_DIR/mysql/

# 设置PATH路径
ln -s $INS_DIR/mysql/bin/*  /usr/bin/  &> /dev/null

# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve
#socket=/data/mysql/mysql.sock
#log-error=/data/mysql/mysql.log
#pid-file=/data/mysql/mysql.pid
EOF

# 初始化数据库
cd $INS_DIR/mysql
./scripts/mysql_install_db  --user=mysql --datadir=/data/mysql &> /dev/null

# 服务启动脚本与开机自启
cp -a $INS_DIR/mysql/support-files/mysql.server  /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

# 安全加固
mysql_secure_installation &> /dev/null << EOF

y
centos
centos
y
y
y
y
EOF

echo -e "\e[1;32mMySQL数据库安装完成!\e[0m"

MariaDB 10.5.5

# 安装包
mariadb-10.5.5-linux-systemd-x86_64.tar.gz

# 脚本内容
#!/bin/bash
# 准备环境与变量
DIR=`pwd`
PACKAGE="mariadb-10.5.5-linux-systemd-x86_64.tar.gz"
NAME="mariadb-10.5.5-linux-systemd-x86_64"
INS_DIR="/usr/local"
FULL_NAME=${DIR}/${PACKAGE}
echo -e "\e[1;32m正在准备安装环境,请等待。。。\e[0m"
yum install -y libaio perl-Data-Dumper libncurses* ncurses* &> /dev/null
echo -e "\e[1;32m环境准备OK\e[0m"

# 安装环境检查
if [ ! -f ${FULL_NAME} ] ; then
    echo  "package not found"
    exit 1
fi

if [ -h ${INS_DIR}/mysql ] ; then
    echo "MariaDB is already installed"
    exit 2
fi

echo -e "\e[1;32m正在安装MariaDB数据库,请等待。。。\e[0m"

# mysql用户检查
if id mysql &> /dev/null ; then
    userdel -f -r mysql
fi
useradd -r -s /sbin/nologin mysql

# 解压、软链接、文件属性
tar xf $PACKAGE -C $INS_DIR
cd $INS_DIR
ln -s $INS_DIR/$NAME  $INS_DIR/mysql  &> /dev/null
chown -R root.root $INS_DIR/mysql/

# 设置PATH路径
ln -s $INS_DIR/mysql/bin/*  /usr/bin/  &> /dev/null

# 编辑配置文件
cat > /etc/my.cnf << EOF
[mysqld]
datadir=/data/mysql
skip_name_resolve
#socket=/data/mysql/mysql.sock
#log-error=/data/mysql/mysql.log
#pid-file=/data/mysql/mysql.pid
EOF

# 初始化数据库
cd $INS_DIR/mysql
./scripts/mysql_install_db  --user=mysql --datadir=/data/mysql &> /dev/null

# 服务启动脚本与开机自启
cp -a $INS_DIR/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start

# 安全加固
mysql_secure_installation &> /dev/null << EOF

y
y
centos
centos
y
y
y
y
EOF

echo -e "\e[1;32mMariaDB数据库安装完成!\e[0m"
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是 CentOS 8 一键安装 Nextcloud 和 OnlyOffice 的脚本: ```bash #!/bin/bash # 安装 Nextcloud 和 OnlyOffice # 本脚本仅适用于 CentOS 8 # 安装依赖 dnf install -y epel-release dnf install -y wget unzip nginx mariadb-server php php-fpm php-mysqlnd php-gd php-mbstring php-zip php-intl php-opcache php-xml php-json redis php-pecl-redis # 下载 Nextcloud wget https://download.nextcloud.com/server/releases/latest.zip -O /tmp/nextcloud.zip # 解压 Nextcloud unzip /tmp/nextcloud.zip -d /usr/share/nginx/html/ # 设置权限 chown -R nginx:nginx /usr/share/nginx/html/nextcloud/ # 配置 Nginx cat << EOF > /etc/nginx/conf.d/nextcloud.conf server { listen 80; server_name your.domain.com; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; fastcgi_hide_header X-Powered-By; root /usr/share/nginx/html/nextcloud; location / { rewrite ^ /index.php$request_uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; set $path_info $fastcgi_path_info; try_files $fastcgi_script_name =404; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $path_info; fastcgi_param HTTPS on; fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_intercept_errors on; fastcgi_request_buffering off; fastcgi_read_timeout 300; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } location ~ \.(?:css|js|woff2?|svg|gif|png|html|ttf|ico|jpg|jpeg)$ { try_files $uri /index.php$request_uri; access_log off; expires 360d; add_header Cache-Control "public, max-age=31536000, immutable"; add_header Pragma public; add_header ETag ""; } location ~ \.(?:manifest|appcache|html|xml|json)$ { add_header Cache-Control "no-store, no-cache, must-revalidate, max-age=0"; add_header Pragma no-cache; } location ~ /\. { deny all; access_log off; log_not_found off; } } EOF # 重启 Nginx systemctl restart nginx # 配置 MariaDB systemctl enable mariadb systemctl start mariadb mysql -u root << END CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'password'; CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud'@'localhost'; FLUSH PRIVILEGES; END # 下载 OnlyOffice wget https://github.com/ONLYOFFICE/DocumentServer/releases/download/v6.4.2/ONLYOFFICE-documentserver-opensource-src.v6.4.2.tar.gz -O /tmp/onlyoffice.tar.gz # 解压 OnlyOffice tar -zxvf /tmp/onlyoffice.tar.gz -C /usr/share/nginx/html/ # 设置权限 chown -R nginx:nginx /usr/share/nginx/html/documentserver/ # 配置 Nginx cat << EOF > /etc/nginx/conf.d/onlyoffice.conf server { listen 80; server_name document.domain.com; add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; add_header Referrer-Policy no-referrer-when-downgrade; add_header Content-Security-Policy "default-src * data: 'unsafe-eval' 'unsafe-inline'"; client_max_body_size 0; location / { proxy_pass https://127.0.0.1:8443; proxy_http_version 1.1; proxy_set_header Upgrade \$http_upgrade; proxy_set_header Connection "Upgrade"; proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; proxy_set_header X-Forwarded-Host \$host; } } EOF # 生成 SSL 证书 dnf install -y certbot python3-certbot-nginx certbot --nginx -d your.domain.com -d document.domain.com # 重启 Nginx systemctl restart nginx ``` 在脚本中,您需要将以下内容替换为您自己的配置: - `your.domain.com`:您的 Nextcloud 域名 - `document.domain.com`:您的 OnlyOffice 域名 - `password`:您的 Nextcloud 数据库密码 安装完成后,您可以通过 `https://your.domain.com` 访问 Nextcloud,通过 `https://document.domain.com` 访问 OnlyOffice。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值