Shell脚本-数据库导入大量数据
一、前言
v1.0
工作中使用Heidisql/Navicat工具导入sql脚本,数据量不多的sql脚本,工具导入执行是能应付的,
但是在sql脚本数据量动辄几十G时,使用工具导入sql脚本,会直接令工具死机!
v1.1
于是选择使用在数据库服务器上执行导入sql脚本命令,
但是当连接服务器中断时,执行导入sql脚本命令也中断!
v1.2
于是执行导入sql脚本命令,加入&后台执行,nohup xx &
但是得不停去检查数据库是否还在变化,判断数据是否导入完毕
v1.3
将sql脚本写入到shell中,
执行完毕,则服务器发送邮件提示使用者
二、动手
1.服务器配置邮件
# 1)安装邮件
yum -y install mailx
# 2)修改邮件配置
vim /etc/mail.rc
# 3)修改配置,如qq邮箱,进入qq邮箱设置中获取
set from="user@xxx.com(username)" # 发信电子邮件地址(括号内为邮件显示名称)
set smtp=smtp.xxx.com # 发信服务器地址
set smtp-auth=login # 认证方式
set smtp-auth-user=user@xxx.com # 发信认证账户(一般同发信电子邮件地址)
set smtp-auth-password=password # 发信认证账户密码
# 4)检查是否配置成功
mail -s "subject" user@xxx.com
2.准备shell脚本
执行vim data.sh
#!/bin/bash
# 数据库基础信息配置
database_user="root"
database_pw="123456"
database_name="test_database"
sql_name="test.sql"
sql_dir="/data/test"
# 创建数据库,不需要创建,直接删除命令或写个判断
mysql -u${database_user} -p${database_pw} << EOF 2>/dev/null
create database ${database_name};
exit
EOF
# 执行脚本导入
start_time=$(date "+%Y-%m-%d %H:%M:%S")
echo -e "脚本开始执行时间: ${start_time} \n" > txt
# 记录服务器的cpu利用率等
echo `sar -u 10 4` >> txt &
mysql -u ${database_user} -p${database_pw} --database=${database_name} < /data/test/${sql_name}
end_time=$(date "+%Y-%m-%d %H:%M:%S")
echo "脚本结束执行时间: ${end_time}" >> txt
echo -e `cat txt` | mail -s "数据库导入通知" abc@qq.com
3.修改shell脚本权限
chmod +x data.sh
4.执行脚本
脚本目录下:./data.sh
三、引申
备份多个数据库
#!/bin/bash
date1=`date +"%Y%m%d%H%M"`
mkdir -p /data/update/sql_data/${date1}bak
for i in {database_a,database_b};
do
date2=`date +"%Y%m%d%H%M"`
mysqldump -uadmin -p123456 $i >/data/update/sql_data/${date1}bak/${i}_${date2}.sql
done

浙公网安备 33010602011771号