#我们在用mysqldump导出mysql的库数据时,库中有些表可能较大并且我们也不需要它。此时mysqldump命令的一个--ignore-table参数便派上了用场,它在导出库时可以跳过指定库表。
#centos7上亲测无问题,shell脚本内容如下:
#!/bin/bash
#变量定义部分
dbuser="root" #mysql用户名
dbpassword="Test@320" #mysql用户密码
db_ip_host="10.0.0.184" #mysql服务所在ip或主机
database=("db1" "db2") #定义mysql库的数组db1和db2
ignore_tb_db1=("table0" "table1" "table2") #定义指定库db1要导出忽略的表
ignore_tb_db2=("table3" "table4" "table5") #定义指定库db2要导出忽略的表
backup_dir=/root/sql_dump_dir #定义导出sql文件的存放目录
#检查存放sql文件目录部分
cd && ls | grep -x 'sql_dump_dir' &>/dev/ull #查看目录是否已创建
if [ $? -ne 0 ];then
mkdir -p "${backup_dir}" &>/dev/null && echo "备份目录:$backup_dir 刚刚创建成功" #if判断,没有目录的话创建目录
else
echo "备份目录:$backup_dir 之前已创建" #有目录无需创建
fi
#for循环遍历和导出部分
for db in "${database[@]}" #for循环遍历库的数组
do
ignore_tables=() #定义空数组,存放导出时忽略的表
if [ "$db" == "db1" ]; then #判断是否是库db1
for tb1 in "${ignore_tb_ab1[@]}" #遍历db1要忽略的表
do
ignore_tables+=("--ignore-table=${db}.${tb1}") #追加到库数组中
done
else
for tb2 in "${ignore_tb_db2[@]}" #遍历db2要忽略的表
do
ignore_tables+=("--ignore-table=${db}.${tb2}") #追加到数组中
done
fi
output_file="${backup_dir}/${db}_$(date +%F_%H:%M:%S).sql" #定义导出文件路径和文件名称,格式:库名称_时间.sql
mysqldump -u"${dbuser}" -p"${dbpassword}" -h"${db_ip_host}" "${db}" "${ignore_tables[@]}" > "${output_file}" &>/dev/null && \
echo "`date +%F_%H:%M:%S`-"${db}"数据备份成功" #导出sql文件到指定路径下的指定文件并输出备份成功
done