需求说明
自动化安装mysql 8.0.11
并修改密码为指定字符
并根据提供的sql文件创建以文件名为名称的数据库
并执行sql文件
下载压缩包
流程总览:
1.将压缩包上传到服务器/opt路径下
2.开发shell脚本
3.运行安装
mysql安装流程linux系统的搜帖子看一下
进入实操
解压,初始化,安装,启动服务
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
运行结果
测试结果
sql文件及内容
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;
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