首页 > 数据库 >centos8 安装mysql8.0.11—shell自动化脚本

centos8 安装mysql8.0.11—shell自动化脚本

时间:2023-02-24 11:25:33浏览次数:72  
标签:11 opt shell echo cnf etc mysql8.0 mysql my

需求说明

自动化安装mysql 8.0.11
并修改密码为指定字符
并根据提供的sql文件创建以文件名为名称的数据库
并执行sql文件

下载压缩包

下载地址

流程总览:

1.将压缩包上传到服务器/opt路径下
2.开发shell脚本
3.运行安装

mysql安装流程linux系统的搜帖子看一下

进入实操

image

解压,初始化,安装,启动服务

cd opt/
vi install_mysql.sh
进入shell脚本开发自动化功能,代码如下

#! /bin/bash
cd /opt
#解压
tar -xvf mysql-8.0.11-linux-glibc2.12-x86_64.tar.gz
#改目录名为mysql8
mv mysql-8.0.11-linux-glibc2.12-x86_64 mysql8
#创建、添加mysql用户组
groupadd mysql
useradd -r -g mysql mysql
#创建data空目录
mkdir /opt/mysql8/data
#关联myql用户到mysql用户组中
chown mysql:mysql -R /opt/mysql8
#编辑my.cnf配置文件 每次写入前清空此文件内容
cat /dev/null > /etc/my.cnf
echo "[client]" >> /etc/my.cnf
echo "port=3306" >> /etc/my.cnf
echo "default-character-set=utf8" >> /etc/my.cnf
echo "[mysql]" >> /etc/my.cnf
echo "default-character-set = utf8" >> /etc/my.cnf
echo "socket=/tmp/mysql.sock" >> /etc/my.cnf
echo "[mysqld]" >> /etc/my.cnf
echo "bind-address=0.0.0.0" >> /etc/my.cnf
echo "basedir=/opt/mysql8" >> /etc/my.cnf
echo "datadir=/opt/mysql8/data" >> /etc/my.cnf
echo "default_authentication_plugin = mysql_native_password" >> /etc/my.cnf
echo "socket=/tmp/mysql.sock" >> /etc/my.cnf
echo "user=mysql" >> /etc/my.cnf
echo "port=3306" >> /etc/my.cnf
echo "character_set_server = utf8" >> /etc/my.cnf
echo "log-error=/opt/mysql8/data/error.log" >> /etc/my.cnf
echo "pid-file=/opt/mysql8/data/mysql.pid" >> /etc/my.cnf
echo "tmpdir=/tmp" >> /etc/my.cnf
#复制文件
cp -a /opt/mysql8/support-files/mysql.server /etc/init.d/mysql
chmod +x /etc/init.d/mysqld
#将mysql服务加到系统服务中
chkconfig --add mysqld
#初始化,且密码为空
/opt/mysql8/bin/mysqld --defaults-file=/etc/my.cnf --initialize-insecure -user=mysql --basedir=/opt/mysql8 --datadir=/opt/mysql8/data
#添加到环境变量
export PATH=$PATH:/opt/mysql8/bin:/opt/mysql8/lib
source /etc/profile
#启动服务
service mysql start
#软连接
ln -s /opt/mysql8/bin/mysql /usr/bin
ln -s /lib64/libtinfo.so.6 /lib64/libtinfo.so.5

连接一次mysql

不知道什么原因,安装后不能一次性直接用shell脚本操作mysql,修改密码的时候会报错:ERROR 1396 (HY000) at line 3: Operation ALTER USER failed for 'root'@'%'。但是手动连接后在运行修改功能的脚本就没问题了,这里笔者也不解,望指教。

vi connect.sh

#! /bin/bash
cd /opt
mysql -uroot<<EOF
use mysql;
update user set host ='%' where user='root';
ALTER USER "root"@"%" IDENTIFIED  BY "1";
flush privileges;
EOF

这里会报上面说的错误ERROR 1396,不影响实际功能,虽然有点膈应人,

修改密码,创建数据库,执行sql文件

vi create_db.sh

#! /bin/bash
cd /opt
#再次连接后执行sql就可以修改密码了,很奇怪,可能是因为初始化设置了空密码。
set_db() {
    mysql -uroot <<EOF
    use mysql;
    update user set host ='%' where user='root';
    ALTER USER "root"@"%" IDENTIFIED  BY "1";
    flush privileges;
EOF
echo "打开远程连接、修改密码成功"
}

set_db
#读取sql文件,并用文件名创建数据库
readDir() {
    # 获取传入的目录路径
    local dir=/opt/sql_path
    # 循环指定目录下的所有文件
    local files
    files=$(ls "$dir")
    for file in $files; do
        local path="$dir/$file" #指的是当前遍历文件的完整路径
        # 判断是否是目录,如果是目录则递归遍历,如果是文件则打印该文件的完整>路径
        if [ -d "$path" ]; then
            echo "跳过$path目录"
        else
            mysql -uroot -p1 -e "CREATE DATABASE ${file%%.sql*} DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"
            mysql -uroot -p1 ${file%%.sql*} -e "source $path"
            echo "执行sql文件${file%%.sql*}中"
        fi
    echo "运行成功"
    done
}

readDir

echo "finished install"

完成功能开发,将上述三个shell文件串起来写到main.sh执行

vi main.sh

#! /bin/bash
cd /opt
#给三个功能脚本授权运行
chmod +x install_mysql.sh
chmod +x create_db.sh
chmod +x connect.sh

./install_mysql.sh

./connect.sh
echo "连接mysql中"
./create_db.sh

给main.sh脚本授权运行
chmod +x main.sh
运行main.sh
./main.sh

运行结果

image

测试结果

image

sql文件及内容

image
image

CREATE TABLE `user0`
(
    `id`       varchar(50) NOT NULL,
    `username` varchar(50) NOT NULL,
    `hobby`    varchar(50) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

image

CREATE TABLE `user1`
(
    `id`       varchar(50) NOT NULL,
    `username` varchar(50) NOT NULL,
    `hobby`    varchar(50) NOT NULL,
    PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

打完,收工!

标签:11,opt,shell,echo,cnf,etc,mysql8.0,mysql,my
From: https://www.cnblogs.com/zk-python/p/17150620.html

相关文章

  • 使用Alpine Linux做基础镜像备份mysql8.0+数据库
    说明本篇文章仅是基于k8scronjob备份mysql8.0+数据库,使用AlpineLinux作为基础镜像时遇到的问题做下简单的排坑,没有涉及到具体的部署细节,后面有时间再补上。镜像打包#......
  • docker 安装rabbitmq3.11-management
    1,dockerpullrabbitmq:3.11-managementmanagement版本表示带有web管理后台2,创建映射目录mkdir-p/docker/rabbitmq/data3,启动dockerrun-p5672:5672-p15672......
  • CF611H New Year and Forgotten Tree
    首先注意到:任何合法方案一定能调整成:每种位数选一个关键点,每条边都至少有一个关键点。本质上是希望找一个边和点的匹配。一种思路是确定关键点之间形成的树后(暴力枚举),让......
  • 119、商城业务---订单服务---创建业务交换机、队列等
    1、导入依赖<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId>......
  • ES6-ES11 箭头函数的实践与应用
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • ES6-ES11 箭头函数以及声明特点
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • ES6-ES11 模板字符串
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • ES6-ES11 对象的简化写法
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......
  • Python 异步: 等待任务集合(11)
    我们可以通过asyncio.wait()函数等待异步任务完成。可以等待不同的条件,例如所有任务完成、第一个任务完成以及第一个任务因异常而失败。让我们仔细看看。1.什么是asy......
  • ES6-ES11 变量的解构赋值
    视频<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title>......