因为分离跟备份都失败,尝试用生成脚本文件的方式备份数据库。
每个数据库表生成一个单独的sql 文件,因此有大量的sql 文件,一个个打开执行,就能达到备份的效果。但是数量太多就尝试用bat文件进行批处理,在网上找到bat如下代码,制作成bat文件后,执行 可以生成相应的表格,但是表格里没有数据。请问如何改才能既生成表格,又保留里面的数据。
@echo off
set PARMSER=127.0.0.1
set PARMDB=ODBC_123
set PARMUSRID=sa
set PARMPSW=abcdef
echo on
del Script_Data_Prepare_%PARMDB%.log
echo "--------------------- Creation of Promotion Package Tasks -------------------------" >> Script_Data_Prepare_%PARMDB%.log
echo Starting >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | date/t >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | time/t >> Script_Data_Prepare_%PARMDB%.log
echo "---------- dbo.测试.Table.sql-----------" >> Script_Data_Prepare_%PARMDB%.log
osql /U %PARMUSRID% /P %PARMPSW% /S %PARMSER% /D %PARMDB% -w999 /n /i D:\dbo.测试.Table.sql >> Script_Data_Prepare_%PARMDB%.log -w 1000 -x 1000000000
echo "">> Script_Data_Prepare_%PARMDB%.log
echo "Program ended at" >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | date/t >> Script_Data_Prepare_%PARMDB%.log
echo ' ' | time/t >> Script_Data_Prepare_%PARMDB%.log
:endproc
可以用shell命令批量执行文件
#!/bin/bash
#execute all script in specified directory
MYDATE=$(date +%F'-'%T'-'%w)
MYSQL_PATH=/opt/modules/scripts/test_sql #指定的目录
confirm=
db_name=
db_pass=
for file in ${MYSQL_PATH}/*; do
if [ -f "$file" ]; then
postfix=$(echo $file | awk -F'.' '{print "."$NF}')
if [ $postfix = ".sql" ]; then
if [ ! $db_name ]; then #如果没有指定数据库
read -p "请输入数据库名:" db_name
read -p "你输入的数据名是【$db_name】,确认继续请输入--yes--: " confirm
fi
if [ "$confirm" = "yes" ] && [ -n $confirm ]; then
if [ ! $db_pass ]; then #如果没有设置密码
stty -echo #密码输入保护关闭显示
read -p "请输入数据库密码:" db_pass
echo -e "\n"
stty echo
fi
mysql -uroot -p$db_pass -P3306 --default-character-set=utf8 ${db_name} <$file >&error.log
echo $file
echo -e "\n===========$file=============\n" >>${LOG_FILE}
cat error.log >>${LOG_FILE} #输出执行日志
error=$(grep ERROR error.log) #读取错误日志信息
if [ -n "$error" ]; then #如果有错误就退出程序
echo $error
exit
fi
else
echo "您已经取消操作!"
exit
fi
fi
fi
done