使用Shell对MySQL指定的库进行SQL语句批量插入操作

需求:


  某环境MySQL数据库中有1000个以yz_xxx开头命名的库,要求:在所有以yz_xxx开头命名的库中插入指定的SQL语句。

解决一:


  使用Navicat Mysql工具连接到MySQL数据库,点击yz_xxx开头命名的库,点击查询—>新建查询输入指定的SQL语句,每一个库点开运行一共点开1000个库,运行1000个SQL代码。
在这里插入图片描述

解决二:使用Shell脚本批量插入SQL语句

尝试分析:

  1. 使用Linux操作系统远程连接到MySQL数据库
  2. 通过show databases命令获取到MySQL数据库中所有的库名称
  3. 获取成功后对所有的库名称通过grep过滤yz_xxx开头的库
  4. 过滤成功后通过for循环语句结合sql代码进行插入操作
  5. 最后进行验证

1、Shell&使用Linux操作系统远程MySQL数据库

  Linux远程MySQL数据库可以使用mysql自带的mysql -e命令远程对mysql数据库进行操作,所以在本地服务器需要安装MySQL命令或者用centos7版本的操作系统本地自带有mariadb,直接启动就可以使用mysql命令。
代码如下:

#!/bin/bash
# this is a yankerp

host_url=129.211.9x.xxx
db_name='yanxxpx'
db_password='pwdxxx'
check_mysql_status=`netstat -anplt | grep mysqld | wc -l`
check_nc_status=`rpm -qa | grep nmap-ncat | wc -l`


# 测试是否能够与服务器主机通信
function db_ping(){
    echo "正在检测与数据库主机连接通信是否正常....."
    ping -w 1 $host_url &> /dev/null
    if [ $? -eq 0 ]
        then
            echo "服务器:$host_url主机可正常连接....."
        else
            echo "ERROR:服务器:$host_url主机连接失败....."
            return 1
    fi
}

运行过程:
在这里插入图片描述

2、检测本地的Mysql服务是否正常运行

function check_mysql(){
    echo "---------------------------------------"
    echo "正在检测本地MySQL数据库是否正常运行....."
    if [ $check_mysql_status -eq 0 ]
        then
            echo "ERROR:本地MySQL数据库非正常运行,正在启动本地MySQL数据库"
            systemctl restart mysqld
            if [ $? -eq 0 ] || [ $check_mysql_status -eq 1 ]
                then
                    echo "MySQL数据库启动成功,目前正常运行....."
                else
                    echo "ERROR:MySQL启动失败,请及时检测MySQL目前的状态!!!"
                    return 1
            fi
        else
            echo "本地MySQL数据库正常启动中....."   
    fi
}

运行过程1(本地MySQL若常启动中的情况下)
在这里插入图片描述
运行过程2(本地MySQL正常启动中的情况下)
在这里插入图片描述

3、检测远程MySQL服务器3306端口是否正常通信

function check_telnet(){
    if [ $check_nc_status -eq 0 ]
        then
            yum clean all && yum install nmap-ncat -y &> /dev/null &
            if [ $? -eq 0 ]
                then
                    echo "nc命令安装成功!!!"
                else
                    echo "ERROR:安装nc包失败,请您检查您服务器是否能够正常上网以及配置yum源!!!"
                    exit 1
            fi
        else
            echo "开始检测$host_url数据库3306端口是否开放...."
            sleep 2
            check=`nc -v -z -w 5 $host_url 3306; echo $?` 
            # echo $host_url
            if [ $check -eq 0 ]
                then
                    echo "远程服务器数据库可正常连接!!!"
                else
                    echo "ERROR:请您检查远程服务器的MySQL3306端口是否正常开放!!!"
                    return 1
            fi
    fi
}

运行过程:
在这里插入图片描述

4、连接到远程MySQL进行操作

function connection_mysql(){
    select_db='show databases;'
        /usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} -e"${select_db}" > /root/all_database.txt && {
            cat /root/all_database.txt | grep "yz" > /root/all_gs1.txt
        }
        content=`cat /root/all_gs1.txt`
        SQL_INSERT=''   # 在库中需要运行的sql语句
        for yz in $content
        do
            echo "正在执行$yz库,正在插入数据库文件!!!"
            sleep 2
            /usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} ${yz} -e"${}" &>/dev/null
            
            echo "$yz库运行成功...."
            echo "===================================================================================================================="
        done
}

运行过程:
在这里插入图片描述代码注释1:
远程连接到Mysql数据库中,运行一条SQL语句为 show databases; select_db=show databases; 将查询的结果导出到本地/root/all_database.txt文本当中(这是所有的库名称)

/usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} -e"${select_db}" > /root/all_database.txt

在这里插入图片描述代码注释2:
查询所有库名称导入到all_database.txt中后通过cat+grep过滤出来yz_的库名称导出到/root/all_gs1.txt文件中. yz_xxx名字自己定义

 cat /root/all_database.txt | grep "yz_" > /root/all_gs1.txt

在这里插入图片描述代码注释3:
将/root/all_gs1.txt 的数据库名称赋值到变量content中 循环content中的数据库名称到yz 最后通过mysql -e 指令对数据库进行sql语句插入操作。

content=`cat /root/all_gs1.txt`
        SQL_INSERT=''   # 在库中需要运行的sql语句
        for yz in $content
        do
            echo "正在执行$yz库,正在插入数据库文件!!!"
            sleep 2
            /usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} ${yz} -e"${SQL_INSERT}" &>/dev/null
            
            echo "$yz库运行成功...."
            echo "===================================================================================================================="
        done

我自己的腾讯云服务环境,就不进行插入操作了,大概的流程如下:
在这里插入图片描述附:完整代码段:

#!/bin/bash
# this is a yankerp

host_url=目标数据库的IP地址
db_name='目标数据库库用户名'
db_password='目标数据库密码'
check_mysql_status=`netstat -anplt | grep mysqld | wc -l`
check_nc_status=`rpm -qa | grep nmap-ncat | wc -l`


# 测试是否能够与服务器主机通信
function db_ping(){
    echo "正在检测与数据库主机连接通信是否正常....."
    ping -w 1 $host_url &> /dev/null
    if [ $? -eq 0 ]
        then
            echo "服务器:$host_url主机可正常连接....."
        else
            echo "ERROR:服务器:$host_url主机连接失败....."
            return 1
    fi
}

function check_mysql(){
    echo "---------------------------------------"
    echo "正在检测本地MySQL数据库是否正常运行....."
    if [ $check_mysql_status -eq 0 ]
        then
            echo "ERROR:本地MySQL数据库非正常运行,正在启动本地MySQL数据库"
            systemctl restart mysqld
            if [ $? -eq 0 ] || [ $check_mysql_status -eq 1 ]
                then
                    echo "MySQL数据库启动成功,目前正常运行....."
                else
                    echo "ERROR:MySQL启动失败,请及时检测MySQL目前的状态!!!"
                    return 1
            fi
        else
            echo "本地MySQL数据库正常启动中....."   
    fi
}

function check_telnet(){
    if [ $check_nc_status -eq 0 ]
        then
            yum clean all && yum install nmap-ncat -y &> /dev/null &
            if [ $? -eq 0 ]
                then
                    echo "nc命令安装成功!!!"
                else
                    echo "ERROR:安装nc包失败,请您检查您服务器是否能够正常上网以及配置yum源!!!"
                    exit 1
            fi
        else
            echo "开始检测$host_url数据库3306端口是否开放...."
            sleep 2
            check=`nc -v -z -w 5 $host_url 3306; echo $?` 
            # echo $host_url
            if [ $check -eq 0 ]
                then
                    echo "远程服务器数据库可正常连接!!!"
                else
                    echo "ERROR:请您检查远程服务器的MySQL3306端口是否正常开放!!!"
                    return 1
            fi
 
   fi
}

function connection_mysql(){
    select_db='show databases;'
        /usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} -e"${select_db}" > /root/all_database.txt && {
            cat /root/all_database.txt | grep "yz" > /root/all_gs1.txt
        }
        content=`cat /root/all_gs1.txt`
        SQL_INSERT=''   # 在库中需要运行的sql语句
        for yz in $content
        do
            echo "正在执行$yz库,正在插入数据库文件!!!"
            sleep 2
            #/usr/local/mysql/bin/mysql -h${host_url} -p${3306} -u${db_name} -p${db_password} ${yz} -e"${}" &>/dev/null
            echo "当你看到这条信息就是正在插入$yz库。。。。。。。。"
            echo "$yz库运行成功...."
            echo "===================================================================================================================="
        done
}

function main(){
    db_ping
    check_mysql
    check_telnet
    connection_mysql
}

main

完整运行过程:
在这里插入图片描述在此记录,希望对您有所帮助,再见~

猜你喜欢

转载自blog.csdn.net/qq_39591494/article/details/106543856