当前位置:   article > 正文

Shell 实现Docker MySQL5.7安装及SQL脚本运行_shell 脚本 执行docker 加载mysql 镜像包 并运行

shell 脚本 执行docker 加载mysql 镜像包 并运行

Linux Shell 实现Docker MySQL安装及脚本运行的目标:

1、实现MySQL5.7安装

2、安装完成后创建对应的账号和数据库实例表等

创建docker mysql容器实例

定义docker_mysql_install.sh

  1. #! /bin/bash
  2. #file:mysql_docker_install.sh
  3. #company:cvnavi.com
  4. #author:Pengjunlin
  5. echo "当前执行文件......$0"
  6. exists_name=""
  7. exists_tag=""
  8. # 下载 mysql
  9. for i in [ `docker images ` ]; do
  10. if [[ $i == "docker.io/mysql" ]]; then
  11. echo "$i"
  12. exists_name="1"
  13. fi
  14. if [[ $i == "5.7" ]]; then
  15. echo "$i"
  16. exists_tag="1"
  17. fi
  18. done
  19. if [[ $exists_name == "1" && $exists_tag == "1" ]]; then
  20. echo "本地已存在mysql:5.7镜像."
  21. else
  22. docker pull mysql:5.7
  23. fi
  24. # 停止mysql容器
  25. for i in [ `docker ps ` ]; do
  26. if [[ $i == "mysql5.7" ]]; then
  27. echo "停止mysql5.7容器 "
  28. docker stop mysql5.7
  29. break
  30. fi
  31. done
  32. # 删除mysql容器
  33. for i in [ `docker ps -a` ]; do
  34. if [[ $i == "mysql5.7" ]]; then
  35. echo "删除mysql5.7容器 "
  36. docker rm mysql5.7
  37. break
  38. fi
  39. done
  40. if [[ -f "/usr/local/docker_mysql_create_table.sh" ]]; then
  41. # 创建mysql映射目录
  42. if [[ ! -d "/etc/mysql" ]]; then
  43. mkdir /etc/mysql
  44. fi
  45. if [[ ! -d "/etc/mysql/conf.d" ]]; then
  46. mkdir /etc/mysql/conf.d
  47. fi
  48. if [[ ! -d "/etc/mysql/logs" ]]; then
  49. mkdir /etc/mysql/logs
  50. fi
  51. if [[ ! -d "/etc/mysql/data" ]]; then
  52. mkdir /etc/mysql/data
  53. fi
  54. # 运行容器实例
  55. docker run -d -p 3306:3306 --name mysql5.7 -v /etc/mysql/conf.d:/etc/mysql/conf.d -v /etc/mysql/logs:/logs -v /etc/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=root mysql:5.7
  56. # 映射copy文件路径到docker容器
  57. docker cp /usr/local/docker_mysql_create_table.sh mysql5.7:/usr/local/docker_mysql_create_table.sh
  58. # 打印即将执行的指令
  59. echo " docker exec -it mysql5.7 /bin/bash -c 'sh /usr/local/docker_mysql_create_table.sh'"
  60. # 进入容器并执行脚本:
  61. docker exec -it mysql5.7 /bin/bash -c "sh /usr/local/docker_mysql_create_table.sh"
  62. else
  63. echo "/usr/local/docker_mysql_create_table.sh文件不存在,docker需要用此文件创建mysql容器实例并创建用户和数据库表."
  64. exit 1
  65. fi

注意:mysql容器的 账号密码都是root,使用了/bin/bash/ -c 来执行指令文件。

创建用户和执行SQL语句

定义docker_mysql_create_table.sh

  1. #!/bin/bash
  2. #file:docker_mysql_create_table.sh
  3. #company:cvnavi.com
  4. #author:Pengjunlin
  5. echo "当前执行文件......$0"
  6. # Mysql数据库相关配置
  7. mysql_database_host="localhost"
  8. mysql_database_name="filecache"
  9. mysql_root_user_name="root"
  10. mysql_root_user_pwd="root"
  11. mysql_remote_user_name="rtvsweb"
  12. mysql_remote_user_pwd="rtvs2018"
  13. mysql_table_name="avinfo";
  14. # 进入mysql控制台 默认用户是root
  15. echo "Docker Mysql控制台创建数据库...."
  16. echo "***********************************以下容执行可能会有错误提示,请忽略**************************"
  17. # 为root用户设置密码
  18. echo "Docker Mysql控制台为root用户设置密码....$mysql_root_user_pwd"
  19. sql_alter_user="ALTER USER '$mysql_root_user_name'@'$mysql_database_host' IDENTIFIED BY '$mysql_root_user_pwd'"
  20. mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -e"$sql_alter_user"
  21. # 添加远程登录用户
  22. echo "Docker Mysql控制台创建远程用户....$mysql_remote_user_name"
  23. sql_create_user="CREATE USER '$mysql_remote_user_name'@'%' IDENTIFIED WITH mysql_native_password BY '$mysql_remote_user_pwd'"
  24. mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -e"$sql_create_user"
  25. #为远程账号添加权限
  26. echo "Docker Mysql控制台为远程账号添加权限.... *.* TO '$mysql_remote_user_name'@'%'"
  27. sql_grant_user="GRANT ALL PRIVILEGES ON *.* TO '$mysql_remote_user_name'@'%'"
  28. mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -e"$sql_grant_user"
  29. # 创建数据库
  30. echo "Docker Mysql控制台创建数据库.... $mysql_database_name"
  31. sql_create_database="create database IF NOT EXISTS $mysql_database_name"
  32. mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -e"$sql_create_database"
  33. #用户创建Mysql数据库脚本
  34. echo "Docker Mysql控制台创建数据库表.... $mysql_table_name"
  35. sql_create_table="create table IF NOT EXISTS $mysql_table_name (
  36. F_ID varchar(255) NOT NULL,
  37. F_SIM varchar(20) NOT NULL,
  38. F_CHANNEL int(11) NOT NULL,
  39. F_ALARM decimal(18,0) NOT NULL,
  40. F_STORAGE_TYPE int(11) NOT NULL,
  41. F_STREAM_TYPE int(11) NOT NULL,
  42. F_START_TIME decimal(20,0) NOT NULL,
  43. F_END_TIME decimal(20,0) NOT NULL,
  44. F_FILE_PATH varchar(255) NOT NULL,
  45. F_FILE_SIZE decimal(18,0) NOT NULL,
  46. F_DATA_TYPE int(11) default NULL,
  47. PRIMARY KEY (F_ID)
  48. ) ENGINE=InnoDB DEFAULT CHARSET=utf8"
  49. mysql -u$mysql_root_user_name -p$mysql_root_user_pwd -d$mysql_database_name -e"$sql_create_table"
  50. echo "***********************************上内容执行可能会有错误提示,请忽略**************************"

这里创建了远程账号rtvsweb,数据库实例filecache,以及数据库表avinfo。

注意:mysql是运行在容器中的,我们在外部不能直接使用mysql -uroot -proot 来验证访问,因为它是一个微型的容器实例有自己的ip地址,如172.17.0.2 ,容器默认的网关是172.17.0.1。我们访问容器实例可以通过外部的mysql客户端如navicat来验证远程账号。如果本地已经安装过mysql 可以使用如:mysql -h172.17.0.2  -urtvsweb -prtvs2018 来访问容器版本的mysql。

非容器管理的MySQL安装请参考:shell脚本实现msyql5.7全自动安装

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/530824
推荐阅读
相关标签
  

闽ICP备14008679号