linux 中.sh脚本自动安装mysql

目录

前言

一、编写.sql文件

二、执行.sql文件

三、复制配置文件

四、完整代码


前言

前段时间写了一个依托docker自动部署mysql、nginx、ftp、nacos、redis、Rocketmq的.sh脚本,做mysql时遇到了一个问题,就是装好的镜像服务初始密码不正确,然后通过修改mysql的配置文件,跳过密码登录,之后在mysql中设置密码解决了这个问题。然后就想也写到.sh脚本中。

一、编写.sql文件

主要就是一个修改密码,记得加上刷新不然不生效

use mysql;
update mysql.user set authentication_string = password("demo@2024") where user="root";
flush privileges;

二、执行.sql文件

如果是在mysql服务中我这个使用了管道符去执行.sql文件

mysql -uroot -p123456 < /install/sqlFile/updatePass.sql

但是我用的是docker安装的mysql镜像,想在镜像外去执行 脚本文件

docker exec -i  镜像名称 mysql -uroot < /install/sqlFile/updatePass.sql

三、复制配置文件

cp -f baseService/mysql/skipPass.cnf 镜像名称/conf/my.cnf

四、完整代码

# 安装MySql
docker_mysql(){
	application="base-mysql"
	image="mysql"
	applicationPath="/usr/local/mysql"
	port="3306"
	passwd="demo@2024"
	version="5.7"

	echo -e "
=========================开始安装MySql=========================
"
	# 删除已有容器和镜像
	delExisting ${application} 
	# 输入版本号并拉取镜像 docker_pull
	# 创建映射目录
	create_file_path conf logs data

	# 创建并启动docker容器
	cp -f baseService/mysql/skipPass.cnf $applicationPath/conf/my.cnf
	echo -e "
开始创建并启动${application}容器……
"

	dockerRunCmd="docker run -itd 
	--network=net --ip 172.18.0.2 -p $port:3306 --name $application 
	--restart=always 
	-e TZ=Asia/Shanghai 
	-v ${applicationPath}/data/:/var/lib/mysql 
	-v ${applicationPath}/logs/:/logs 
	-v ${applicationPath}/conf/:/etc/mysql/conf.d 
	-v /etc/localtime:/etc/localtime:ro 
	--privileged=true 
	-e MYSQL_ROOT_PASSWORD=$passwd 
	-d $image:$version"
	
	eval $dockerRunCmd
	# 判断容器是否启动成功
	successOrNot
	
	# 替换nacos中的IP
	if [ "$ip" == "" ];then
		ip=`hostname -I | awk '{print $1}'`
		echo "本机IP地址为$ip(如有多网卡ip可能会不准确,请自行确认)"
		if [ "$ip" == "" ];then
			read -p "查询内网IP失败,请手动输入:" ip
		fi
	fi
	sed -i "s/192.168.101.153/${ip}/g" `grep 192.168.101.153 -rl sqlFile/nacos.sql`
	sleep 2
	echo -e "
开始导入数据
"
	# 更新密码
	docker exec -i $application mysql -uroot < /install/sqlFile/updatePass.sql
	cp -f baseService/mysql/my.cnf $applicationPath/conf/my.cnf
	docker restart $application

	
	echo -e "
导入数据结束
"
	
	echo -e "
开启防火墙端口3306
"
	firewall-cmd --zone=public --add-port=3306/tcp --permanent
	firewall-cmd --reload
	
	echo -e "
=========================安装MySql结束=========================

"
}