mysql数据库备份脚本指定表_MySQL数据库备份脚本

MySQL数据库备份脚本

实验环境:跨主机操作

mysql-server:192.168.200.101

mysql-client:192.168.200.102     两台机器都安装mariadb

实验要求:对mysql-server的auth库和client库实现异地备份,每天凌晨2:00进行备份,撰写一个数据恢复脚本。

MySQL服务端授权,给予select和lock tables(锁表)权限,以备份

[root@localhost ~]# mysql -uroot -p123456

mysql> grant select,lock tables on auth.* to 'admin'@'192.168.200.102' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> grant select,lock tables on client.* to 'admin'@'192.168.200.102' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

客户端安装客户端软件

[root@client ~]# yum -y install mysql 或者安装mariadb

连接测试

[root@client ~]# mysql -uadmin -p -h192.168.200.101

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| auth               |

| client             |

| test               |

+--------------------+

4 rows in set (0.00 sec)

撰写客户端备份脚本

[root@client ~]# vim /opt/bakmysql.sh

#!/bin/bash

# MySQL数据库备份脚本

#设置登录变量

MY_USER="admin"

MY_PASS="123456"

MY_HOST="192.168.200.101"

MY_CONN="-u$MY_USER -p$MY_PASS -h$MY_HOST"

#设置备份的数据库

MY_DB1="auth"

MY_DB2="client"

#定义备份路径、工具、时间、文件名

BF_DIR="backup"

BF_CMD="/usr/bin/mysqldump"

BF_TIME=$(date +%Y%m%d-%H%M)

NAME_1="$MY_DB1-$BF_TIME"

NAME_2="$MY_DB2-$BF_TIME"

#备份为.sql脚本,然后打包压缩(打包后删除原文件)

[ -d $BF_DIR ] || mkdir -p $BF_DIR

cd $BF_DIR

$BF_CMD $MY_CONN --databases $MY_DB1 > $NAME_1.sql

$BF_CMD $MY_CONN --databases $MY_DB2 > $NAME_2.sql

/bin/tar zcf $NAME_1.tar.gz $NAME_1.sql --remove &>/dev/null

/bin/tar zcf $NAME_2.tar.gz $NAME_2.sql --remove &>/dev/null

[root@client ~]# chmod +x /opt/bakmysql.sh

[root@client ~]# /opt/bakmysql.sh

[root@client ~]# ls backup/

auth-20160505-1805.tar.gz  client-20160505-1805.tar.gz

[root@client ~]# tar tvf backup/auth-20160505-1805.tar.gz

-rw-r--r-- root/root      1967 2016-05-05 18:05 auth-20160505-1805.sql

[root@client ~]# tar tvf backup/client-20160505-1805.tar.gz

-rw-r--r-- root/root      2250 2016-05-05 18:05 client-20160505-1805.sql

[root@client ~]# crontab -e

02***/opt/bakmysql.sh

执行后重启crontab

改变系统时间,执行任务计划,模拟每天的备份,为之后的恢复脚本做准备

[root@client ~]# date 050601592016.59//MMDDhhmmYY.SS月日小时分钟.秒

2016年05月06日星期五01:59:59 CST

[root@client ~]# ls backup/

auth-20160505-1805.tar.gz  client-20160505-1805.tar.gz

auth-20160506-0200.tar.gz  client-20160506-0200.tar.gz

[root@client ~]# date 050701592016.59

2016年05月07日星期六01:59:59 CST

[root@client ~]# date 050801592016.59

2016年05月08日星期日01:59:59 CST

[root@client ~]# ls backup/

auth-20160505-1805.tar.gz  auth-20160508-0200.tar.gz    client-20160507-0200.tar.gz

auth-20160506-0200.tar.gz  client-20160505-1805.tar.gz  client-20160508-0200.tar.gz

auth-20160507-0200.tar.gz  client-20160506-0200.tar.gz

撰写数据恢复脚本

[root@client ~]# vim /opt/restore_mysql.sh

#!/bin/bash

#恢复MySQL数据库数据脚本

#设置变量

MY_USER="admin"

MY_PASS="123456"

MY_HOST="192.168.200.101"

BF_DIR="backup"

mkdir .aaa     //创建隐藏目录

ls $BF_DIR |column -t > .aaa/db_list        //竖项显示

awk -F'-' '{print $2}' .aaa/db_list > .aaa/dt.txt

read -p "请指定要恢复数据库的日期(YYYYMMDD):" dt

if [ $dt -ge 20191130 ] && [ $dt -le 20191201 ];then

grep "$dt" .aaa/dt.txt &>/dev/null

if [ $? -ne 0 ];then

echo "很抱歉,您恢复数据库的备份日期不再备份日期范围内"

else

echo "搜索到的可恢复数据库如下:"

awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list

read -p "请选择您要恢复数据库的编号: " nb

nm=$(awk -F'-' /$dt/'{print NR,$1}' .aaa/db_list |awk /$nb/'{print $2}')

echo "现在开始恢复数据库:$nm到$dt"

cd $BF_DIR

onm=$(ls |grep "$nm-$dt")

mkdir .bbb

tar xf $onm -C .bbb

mysql -u$MY_USER -p$MY_PASS -h$MY_HOST  < .bbb/*

echo "$nm已经恢复到$dt"

rm -rf .bbb

cd - &>/dev/null

rm -rf .aaa

fi

else

echo "很抱歉,您恢复数据库的备份日期不再备份日期范围内"

fi

[root@client ~]# chmod +x /opt/restore_mysql.sh

如在客户端恢复数据,需要开放权限

mysql> grant all on auth.* to 'admin'@'192.168.200.102';

Query OK, 0 rows affected (0.00 sec)

mysql> grant all on client.* to 'admin'@'192.168.200.102';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

恢复测试:

[root@client ~]# /opt/restore_mysql.sh

请指定要恢复数据库的日期(YYYYMMDD):20160507

搜索到的可恢复数据库如下:

3 auth

7 client

请选择您要恢复数据库的编号: 3

现在开始恢复数据库:auth到20160507

auth已经恢复到20160507

[root@client ~]# /opt/restore_mysql.sh

请指定要恢复数据库的日期(YYYYMMDD):20100101

很抱歉,您恢复数据库的备份日期不再备份日期范围内

bash -X 脚本名  查看执行过程

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个备份MySQL数据库的Shell脚本示例: ```bash #!/bin/bash # MySQL数据库备份脚本 # 设置备份文件名和目录 BACKUP_DIR="/var/backups/mysql" DATE=$(date +%Y-%m-%d_%H-%M-%S) DB_NAME="mydatabase" FILENAME="$BACKUP_DIR/$DB_NAME-$DATE.sql" # 设置MySQL登录信息 MYSQL_USER="root" MYSQL_PASSWORD="password" # 执行备份 mysqldump -u $MYSQL_USER -p$MYSQL_PASSWORD $DB_NAME > $FILENAME # 压缩备份文件 gzip $FILENAME # 删除7天前的备份文件 find $BACKUP_DIR -type f -name "*.gz" -mtime +7 -exec rm {} \; ``` 上述脚本将会备份名为 "mydatabase" 的MySQL数据库,并将备份文件保存在 "/var/backups/mysql" 目录下。脚本将创建一个新的备份文件名,格式为 "mydatabase-YYYY-MM-DD_HH-MM-SS.sql",其中 "YYYY-MM-DD_HH-MM-SS" 是当前日期和时间。备份完成后,脚本将使用 gzip 压缩备份文件,并删除7天前的备份文件。 请注意,为了安全起见,建议将MYSQL_USER和MYSQL_PASSWORD的值设置为有效的MySQL用户名和密码,而不是将其硬编码在脚本中。 ### 回答2: shell脚本备份MySQL数据库是一种自动化的数据库备份方式,它通过编写shell脚本来实现备份任务的执行。下面是一个简单的用于备份MySQL数据库的shell脚本示例: #!/bin/bash # 设置备份目录 BACKUP_DIR="/opt/backup/db" # 设置MySQL登录信息 DB_USER="root" DB_PASSWORD="yourpassword" # 设置备份文件名 BACKUP_FILE="db_backup_$(date +%Y%m%d%H%M%S).sql" # 创建备份目录 mkdir -p $BACKUP_DIR # 备份MySQL数据库指定目录 mysqldump -u $DB_USER -p$DB_PASSWORD --all-databases > $BACKUP_DIR/$BACKUP_FILE # 判断备份是否成功 if [ $? -eq 0 ]; then echo "MySQL数据库备份成功,备份文件名为:$BACKUP_FILE" else echo "MySQL数据库备份失败" fi 在上述脚本中,首先定义了备份目录、MySQL登录信息和备份文件名的变量。然后,通过mkdir命令创建备份目录。接下来,使用mysqldump命令将MySQL数据库备份指定目录,并将备份文件命名为当前日期和时间。最后,通过判断mysqldump命令执行的返回值来确定备份是否成功,并输出相应的提示信息。 使用该脚本进行MySQL数据库备份只需在终端中执行bash命令加上脚本路径即可,如:bash /path/to/backup_mysql.sh。执行完毕后,备份文件将保存在指定备份目录中。 这种shell脚本备份MySQL数据库的方式可以自动化执行备份任务,提高工作效率,同时也方便了备份文件的管理和查找。 ### 回答3: shell脚本备份MySQL数据库是通过编写一个脚本文件来实现自动备份和恢复MySQL数据库的操作。下面是一个简单的示例: #!/bin/bash # Shell脚本备份MySQL数据库 # 定义备份存储目录和时间戳 backup_dir="/path/to/backup" timestamp=$(date +%Y%m%d%H%M%S) # 定义MySQL数据库的连接参数 db_user="root" db_password="password" db_host="localhost" db_name="database_name" # 创建备份目录 if [ ! -d "$backup_dir" ]; then mkdir -p $backup_dir fi # 使用mysqldump命令备份数据库 mysqldump -u$db_user -p$db_password -h$db_host $db_name > $backup_dir/${db_name}_${timestamp}.sql # 检查备份是否成功 if [ $? -eq 0 ]; then echo "数据库备份成功!" else echo "数据库备份失败!" fi # 清理过期备份(保留最新的N个备份) backup_count=$(ls -l $backup_dir | grep -c "^-" 2>/dev/null) if [ $backup_count -gt 10 ]; then oldest_backup=$(ls -tr $backup_dir | head -1) rm -f $backup_dir/$oldest_backup fi # 恢复MySQL数据库(如果需要) # mysql -u$db_user -p$db_password -h$db_host -e "DROP DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host -e "CREATE DATABASE $db_name;" # mysql -u$db_user -p$db_password -h$db_host $db_name < $backup_dir/latest.sql 这个脚本的功能是备份指定MySQL数据库,将备份文件保存到指定的目录中,并可根据需要恢复数据库脚本中使用了mysqldump命令来导出数据库,并使用mysql命令来恢复数据库备份文件保留最新的10个,超过数量的将自动删除最旧的备份文件。可以根据实际需求修改备份目录、数据库连接参数和保留备份数量等设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值