mysql还原所有库

#!/bin/bash
#scripts sh batch_databasename.sh

bakfile=/data/dbbackup
logfile=/data/bak.log

dbuser=xxx
dbpasswd=xxx
ip=ifconfig | grep "inet addr"| grep Bcast| awk '{print $2}'| awk -F":" '{print $2}'

NowTime=$(date +%Y%m%d)

#ser_port=cat /usr/jyinit/serverlist | awk '{print $3}' | tr "\n" " "

serverlist=/usr/jyinit/serverlist

#time=13

read -p "请输入需要恢复的数据的时间:(备份的小时数):" time ;echo $time

recovery_databases()
{

#库删除或重建
mysql -u$dbuser -p$dbpasswd -e "drop database if exists xmxyshxy${zoneid}"
echo "批量删除xmxyshxy${zoneid} 完成"
mysql -u$dbuser -p$dbpasswd -e "create database if not exists xmxyshxy${zoneid}"
echo "批量创建xmxyshxy${zoneid} 完成"

#数据还原
cd $bakfile
#解压备份文件
gzip -cdv ${NowTime}xmxy${pf}${zoneid}${time}.FullyBak.tar.gz > ${NowTime}xmxy${pf}${zoneid}${time}.FullyBak.sql
if (test -e ${NowTime}xmxy${pf}${zoneid}${time}.FullyBak.sql)
then
#解压的sql导入到库
mysql -u$dbuser -p$dbpasswd xmxy${pf}${zoneid} < ${NowTime}xmxy${pf}${zoneid}${time}.FullyBak.sql
echo xmxy${pf}${zoneid} backup success >> $logfile
else
echo xmxy${pf}${zoneid} backup fail >>$logfile
exit 1
fi
}

while read noteline
do
if [ -z "echo $noteline | grep -v ^$" ]; then
continue
fi

commentflag=${noteline:0:1}
if [ "${commentflag}"x == "#"x ]; then
            continue
fi

pf=`echo $noteline | awk '{print $1}'`
zoneid=`printf "$noteline" | awk '{print $2}' ` 
echo $zoneid
echo $pf

recovery_databases 

done<$serverlist

转载于:https://blog.51cto.com/yzg784534398/2085893

### 在 Linux 环境下还原 MySQL 数据库备份文件的方法 在 Linux 系统中,可以通过多种方式来还原 MySQL数据库备份文件。以下是具体方法: #### 方法一:使用 `mysql` 命令行工具 这是最常见的方法之一,适合大多数场景下的数据库恢复操作。 假设有一个名为 `/root/mysql-bak-2023-07-27.sql` 的备份文件,可以按照以下方式进行恢复: ```bash mysql -u用户名 -p密码 数据库名 < /路径/到/备份文件.sql ``` 例如,如果要将备份文件导入到名为 `mydatabase` 的数据库中,则命令如下[^2]: ```bash mysql -uroot -p mydatabase < /root/mysql-bak-2023-07-27.sql ``` 需要注意的是,在执行上述命令之前,目标数据库必须已经存在。如果没有预先创建数据库,可以根据实际情况手动创建或者直接使用带有 `CREATE DATABASE` 语句的全量备份文件[^5]。 --- #### 方法二:针对全量备份(含所有数据库) 当备份文件是由 `mysqldump --all-databases` 参数生成时,可以直接忽略具体的数据库名称部分。此时无需提前创建任何单独的目标数据库实例,因为备份文件本身会包含必要的 `CREATE DATABASE` 和 `USE` 语句。 相应的命令形式简化为: ```bash mysql -u用户名 -p < /路径/到/备份文件.sql ``` 例如: ```bash mysql -uroot -p < /root/all_dbs_backup_2023-08-01.sql ``` --- #### 方法三:通过远程服务器恢复 如果需要从另一台远程机器上的 MySQL 实例加载数据,也可以利用 `-h` 参数指定主机地址[^4]。例如: ```bash mysql -h 远程主机IP -u 用户名 -p 密码 数据库名 < /路径/到/备份文件.sql ``` 这允许管理员灵活处理跨网络环境的数据迁移需求。 --- #### 注意事项 1. **权限管理** 执行这些操作前,请确认当前登录账户具有足够的权限访问并修改对应资源。 2. **字符集匹配** 如果源端与目的端之间可能存在编码差异问题,则建议显式声明 charset 设置以避免乱码现象发生。比如添加额外参数如 `--default-character-set=utf8mb4` 给相关指令调用。 3. **大文件优化策略** 对于特别庞大的 SQL 文档来说,默认管道输入可能会遇到性能瓶颈甚至失败风险。这时可考虑分批读取内容再逐条提交给服务进程完成整个过程;又或者是借助其他专门设计用来应对这种情况的应用软件辅助实现高效传输效果。 --- ### 示例代码片段展示 这里给出一段简单的 Python 脚本来自动化批量导入多个 .sql 文件至不同命名空间内的例子供参考: ```python import os import subprocess def restore_mysql(dump_file, db_name, user='root', password=''): command = f'mysql -u{user} ' if password: command += f'-p{password} ' command += f'{db_name} < {dump_file}' try: result = subprocess.run(command, shell=True, check=True) print(f'Successfully restored {dump_file}') except Exception as e: print(f'Failed to restore {dump_file}: {e}') if __name__ == '__main__': base_dir = '/path/to/dumps' files = ['file1.sql', 'file2.sql'] for file in files: dump_path = os.path.join(base_dir, file) dbname = file.split('.')[0] restore_mysql(dump_path, dbname) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值