shell 自动导出导入数据库,将导出的格式为 : 数据库名+时间.sql

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: mysqldump 自动导出mysql8 or mariadb10x 数据库工具,导入数据库工具,mysql 创建于删除数据库

#!/bin/bash
# databases out save
# developer : eisc.cn
# 开发: 小绿叶技术博客; 功能:shell 自动导出数据库,将导出的格式为 : 数据库名+时间.sql 
echo "linux user: $USER ;  Enter the current user sudo password: " ; sudo date ; formatdate=`date +%Y.%m.%d-%H%M%S` ; echo "time year month day Hour branch second: $formatdate "
dir=/datadisk/eisc/back/sql
sudo mkdir -p $dir ; sudo chmod 777 $dir
# 数据库导出文件保存目录, 创建这个目录,和附加权限

DestDir=/datadisk/eisc/back/sql
DestDBName=(`ls $DestDir | grep "sql" | grep -vE "tar|gz|zip|sh"`)
# 目标服务器,需要导入的数据库文件。根据实际存放目录修改

# user=root
# passwd=eisc.cn
# dataip=127.0.0.1
# 脚本中配置 数据库用户名 和密码 和数据库链接地址

if [ "$user"="" ]
then 
    echo "请输入数据库管理员用户和密码以及ip, 案例:root eisc.cn 127.0.0.1
Please enter the database administrator user and password and ip, case: root eisc.cn 127.0.0.1
" 
    read -p "input: " inputuser
else
    echo "[ok] 已经定义过 user 和 passwd 的值!"
fi

inputuser=($inputuser)
user=${inputuser[0]}
passwd=${inputuser[1]}
dataip=${inputuser[2]}

export_databases(){
    databases=(`mysql -u $user  -p$passwd -e "show databases;"`)
    NoOutDatabases=(Database information_schema mysql performance_schema sys )
    # 这是系统库,不是项目中的数据库。只需要导出项目库

    echo "databases is : ${databases[*]}
    NoOutDatabases is : ${NoOutDatabases[*]}
     "

    sudo tar -czvf $dir/sqlback_$formatdate.tar.gz $dir ; sudo rm -rf $dir/*

    for i in ${databases[*]}
    do
        echo "#-------- database $i -----------# "
      
        for o in ${NoOutDatabases[*]}
        do
            case "$i" in 
                "$o") echo " [ok]  $i : The current database does not need to be exported!" ; OutStatus=0 ; echo "" ;echo "" ;;
            esac

        done
    
        if [ "$OutStatus" = "1" ]
        then 
            sql="sudo mysqldump --column-statistics=0 -h $dataip -u $user -p$passwd  --databases $i"
            echo "[runing] shell cmd:  $sql" ; echo ""
            $sql > $dir/$i-$formatdate.sql
            # mysqldump 不支持有变量的数据库,因此赋值为字符串
            # 因为新版的mysqldump默认启用了一个新标志,通过- -column-statistics=0来禁用他
        else 
            echo "[ok] $i Database does not need to be saved" 
        fi 
    
        OutStatus=1
        # 状态 为 1 才进行导出数据,由于受到 NoOutDatabases 不导出影响,会被定义为 0. 最后再次将状态更新为正常 1 
        # 注意: shell if 判断的时候需要在变量和值加双引号,否则异常
    done

    echo "数据库导出保存目录: $dir 将目录 $dir 备份为:sqlback_$formatdate.tar.gz"
    ls -alh $dir
}


mysql_database_tools(){
#!/bin/bash
# shell 自动创建数据库 用户和密码
sudo apt install libncurses*
# 解决mysql 命令报错,缺少库:Couldn't find any package by glob 'libncurses.so.5'

sudo apt install mysql-client  -y
# 安装连接数据库工具
sudo mkdir /var/run/mysqld/
sudo ln -s /tmp/mysql.sock /var/run/mysqld/mysqld.sock
# 解决 mysql 报错,无法进入mysql 。 mariadb 的启动sock 不一样

    runmysql=`sudo netstat -nltp | grep 3306 | grep -w tcp | grep mariadb`
    if [ ${#runmysql} -lt 1 ]
    then
      sudo /etc/init.d/mariadb1011 start
    fi

sudo $installdir/mysql/mariadb1011/bin/mysqladmin  -u root password eisc.cn
# 启动数据库,重置数据库 root 用户密码为: eisc.cn

  echo "#---------------- 数据库管理工具 ------------#

参考输入案例: create eisc.cn www www 000000 localhost

  1 创建 or 删除,输入: create 或 drop
  2 数据库 root 用户密码
  3 子数据库名
  4 子库用户名
  5 子库密码
  6 开放数据库方式:本地/远程 输入: localhost 或 %
  用空格隔开,必须按照顺序输入6个参数!"
  read -p "请输入:" in_buff
  buff=( abcd $in_buff);

  echo "你输入的信息为: ${buff[*]}";

  case ${buff[1]} in
  "create")
#    mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8 collate utf8_bin;"
    mysql -uroot -p${buff[2]} -e "create database ${buff[3]} character set utf8;"
    mysql -uroot -p${buff[2]} -e "grant all on ${buff[4]}.* to '${buff[4]}'@'${buff[6]}' identified by '${buff[5]}'"
    mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';"
  ;;
  "drop")
    mysql -uroot -p${buff[2]} -e "drop database ${buff[3]}"
    mysql -uroot -p${buff[2]} -e "drop user '${buff[4]}'@'${buff[6]}'"
    mysql -uroot -p${buff[2]} -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='${buff[4]}';"
  ;;
  esac
}

import_databases(){
    dipasswd=eisc.cn
    # 定义 子库密码
    echo  "将从文件目录: $DestDir 导入数据库, 注意,不能出现重复的数据库文件。一个数据库保留一个sql 文件。列出该目录的文件,如下:" ; ls $DestDir
    read -p "是否将文件放置在该目录?y/n:" fzfile 
    if [ "$fzfile" != "y" ]
    then 
        echo "[ok] 退出! 将文件复制到该目录后,重新执行函数"
        exit
    fi
    echo "如果遇到问题,你可以使用 mysql管理工具来创建数据库和用户, 不使用该工具,会自动创建数据库。"

    for((s=0;s<${#DestDBName[*]};s++))
    do
        di=`echo ${DestDBName[$s]} | awk -F"-" '{print $1}'`
        difile=${DestDBName[$s]} 

        ShowDBName=`mysql -h $dataip -u $user -p$passwd -e "show databases" | grep $di `
        if [ "$ShowDBName"  = "$di"]
        then 
            echo "[error] Database exists $di "
        else
            echo "[ok] runing import data $di"
            mysql -h $dataip -u $user -p$passwd -e "create database $di character set utf8;"
            mysql -h $dataip -u $user -p$passwd -e "grant all on $di.* to '$di'@'localhost' identified by '$dipasswd'"
            mysql -h $dataip -u $user -p$passwd -e "show databases;SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS ListUsername FROM mysql.user where User='$di';"
        fi

        mysql -h $dataip -u $user -p$passwd -e "use $di ; source $DestDir/$difile ; show tables;"
        echo "[ok] import databases $DestDir/$difile "
    done
}

main(){

echo "
欢迎使用,小绿叶技术博客 eisc.cn 数据库搬家,数据库导出与导入工具,提供工具功能:
1. 数据库导出
2. 数据库导入
3. 数据库管理工具,创建与删除数据库和用户
请输入功能序号:


Welcome to the small green leaf technology blog eisc.cn database move, database export and import tool, providing tool functions:
1. Database export
2. Database import
3. Database management tool, creating and deleting databases and users
Please enter the function serial number:
" 
    read -p "input number: " tnumber
    case "$tnumber" in 
        "1") echo "[runing]  1. Database export" ;          export_databases ;; 
        "2") echo "[runing]  2. Database import" ;          import_databases ;;
        "3") echo "[runing]  3. Database management tool" ; mysql_database_tools ;;
    esac

}

main

# 一键下载使用:    wget eisc.cn/file/ubuntu/shell/server/mysql_export_import.sh ; chmod +x mysql_export_import.sh ; ./mysql_export_import.sh

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
SQL 缓存 监控
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
本文详细解析了数据库、缓存、异步处理和Web性能优化四大策略,系统性能优化必知必备,大厂面试高频。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
大厂面试高频:4 大性能优化策略(数据库、SQL、JVM等)
|
6天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
7天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
17天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
15 2
|
22天前
|
SQL JSON Java
没有数据库也能用 SQL
SPL(Structured Process Language)是一款开源软件,允许用户直接对CSV、XLS等文件进行SQL查询,无需将数据导入数据库。它提供了标准的JDBC驱动,支持复杂的SQL操作,如JOIN、子查询和WITH语句,还能处理非标准格式的文件和JSON数据。SPL不仅简化了数据查询,还提供了强大的计算能力和友好的IDE,适用于多种数据源的混合计算。
|
24天前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
17天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
40 2
6种方法打造出色的Shell脚本
|
3天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
13 1