centos8 安装mysql8.0.11—shell自动化脚本
需求说明
自动化安装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;
打完,收工!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?