shell 脚本MySQL备份

1.MySQL备份

1)利用自带工具MySQL dump 实现数据库分表备份。

分库备份

1] 如何获取需要备份的数据库列表

过滤掉上面的database表

将系统自带的名字去掉

[root@RHCSA ~]# mysql -uroot -pOPEBlab123! -N -e 'show databases' | egrep -v 'information_schema |mysql|performance_schema|sys'
|是或者的意思
#定义一个变量等于上面输出的结果
DBS=`mysql -uroot -pOPEBlab123! -N -e 'show databases' | egrep -v 'information_schema |mysql|performance_schema|sys'`
​
[root@RHCSA ~]# echo $DBS
FIRST_DB SECOND_DB exam firstdb homework indext_db information_schema mydb one sqlprogrm test11
​
2]循环遍历
[root@RHCSA ~]# for db in $DBS
> do
> echo 备份 $db
> done
备份 FIRST_DB
备份 SECOND_DB
备份 exam
备份 firstdb
备份 homework
备份 indext_db
备份 information_schema
备份 mydb
备份 one
备份 sqlprogrm
备份 test11
​
3]备份
[root@RHCSA ~]# mysqldump --help | more --查看帮助
​
复制备份
[root@RHCSA ~]# mysqldump -uroot -p'OPEBlab123!' -B $db > $db_$(date +%F).sql
​
​
[root@RHCSA scripts]# vim bak_db_v1.sh +
​
#!/bin/bash
​
#define var
​
DBS=`mysql -uroot -pOPEBlab123! -N -e 'show databases' | egrep -v 'information_schema|mysql|performance_schema|sys'`
​
for db in $DBS
do
   mysqldump -uroot -p'OPEBlab123!' -B $db > ${db}_$(date +%F).sql
done
​
[root@RHCSA scripts]# sh bak_db_v1.sh
mysql: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
mysqldump: [Warning] Using a password on the command line interface can be insecure.
[root@RHCSA scripts]# ll
total 84
-rw-r--r--. 1 root root   235 Nov  1 11:22 bak_db_v1.sh
-rw-r--r--. 1 root root  4568 Nov  1 11:22 exam_2023-11-01.sql
-rw-r--r--. 1 root root  1462 Nov  1 11:22 firstdb_2023-11-01.sql
-rw-r--r--. 1 root root  1466 Nov  1 11:22 FIRST_DB_2023-11-01.sql
-rw-r--r--. 1 root root  5503 Nov  1 11:22 homework_2023-11-01.sql
-rw-r--r--. 1 root root  2222 Nov  1 11:22 indext_db_2023-11-01.sql
-rw-r--r--. 1 root root   791 Nov  1 11:21 information_schema_2023-11-01.sql
-rw-r--r--. 1 root root 17827 Nov  1 11:22 mydb_2023-11-01.sql
-rw-r--r--. 1 root root  6492 Nov  1 11:22 one_2023-11-01.sql
-rw-r--r--. 1 root root 11240 Nov  1 11:22 SECOND_DB_2023-11-01.sql
-rw-r--r--. 1 root root  3873 Nov  1 11:22 sqlprogrm_2023-11-01.sql
-rw-r--r--. 1 root root  1458 Nov  1 11:22 test11_2023-11-01.sql
​

优化后的脚本

[root@RHCSA scripts]# vim bak_db_v2.sh 
#!/bin/bash
​
#define var
BAK_DIR=/backup/db
CMD_OPT="-uroot -pOPEBlab123!"
EX_DB='information_schema|mysql|performance_schema|sys'
​
DBS=$(mysql ${CMD_OPT} -N -e 'show databases' | egrep -v ${EX_DB})
​
#main program
[ -d ${BAK_DIR} ] || mkdir -p ${BAK_DIR}
for db in $DBS
do
   mysqldump ${CMD_OPT}  -B $db > ${BAK_DIR}/${db}_$(date +%F).sql
done
​

2)分表

[root@RHCSA ~]# mysql -uroot -p'OPEBlab123!' -N -e 'show tables from mydb'
​[root@RHCSA scripts]# vim bak_db_v3.sh 
​
#!/bin/bash
​
#define var
BAK_DIR=/backup/db
CMD_OPT="-uroot -pOPEBlab123!"
db=mydb
TABS=$(mysql ${CMD_OPT} -N -e "show tables from $db")
​
​
#main program
[ -d ${BAK_DIR}/$db ] || mkdir -p ${BAK_DIR}/$db
for tab in $TABS
do
   mysqldump ${CMD_OPT} $db $tab > ${BAK_DIR}/$db/${db}_${tab}_$(date +%F).sql
done
​

3)分库分表

#库的
#!/bin/bash
​
#define var
BAK_DIR=/backup/db
CMD_OPT="-uroot -pOPEBlab123!"
EX_DB='information_schema|mysql|performance_schema|sys'
​
DBS=$(mysql ${CMD_OPT} -N -e 'show databases' | egrep -v ${EX_DB})
​
for db in $DBS
do
   TABS=$(mysql ${CMD_OPT} -N -e "show tables from $db")
   [ -d ${BAK_DIR}/$db ] || mkdir -p ${BAK_DIR}/$db
    mysqldump ${CMD_OPT}  -B $db > ${BAK_DIR}/${db}_$(date +%F).sql
   for tab in $TABS
     do
      mysqldump ${CMD_OPT} $db $tab > ${BAK_DIR}/$db/${db}_${tab}_$(date +%F).sql
     done
  
done

修改后

#!/bin/bash
​
#define var
BAK_DIR=/backup/db
CMD_OPT="-uroot -pOPEBlab123!"
EX_DB='information_schema|mysql|performance_schema|sys'
​
DBS=$(mysql ${CMD_OPT} -N -e 'show databases' | egrep -v ${EX_DB})
​
#main program
for db in $DBS
do
   TABS=$(mysql ${CMD_OPT} -N -e "show tables from $db")
   [ -d ${BAK_DIR}/$db ] || mkdir -p ${BAK_DIR}/$db
    mysqldump ${CMD_OPT}  -B $db > ${BAK_DIR}/$db/${db}_$(date +%F).sql
​
   for tab in $TABS
     do
      mysqldump ${CMD_OPT} $db $tab > ${BAK_DIR}/$db/${db}_${tab}_$(date +%F).sql
     done
​
done

执行

检查是否成功

4)还原删除的数据库表

#查看数据库表的内容
[root@RHCSA ~]# mysql -uroot -pOPEBlab123! -e 'select * from SECOND_DB.student'
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------+----------+---------+----------+
| stu_id | stu_name | stu_age | class_id |
+--------+----------+---------+----------+
|  10002 | zhangsan |      20 |     1001 |
|  10003 | lisi     |      18 |     1001 |
|  10004 | wangwu   |      19 |     1001 |
+--------+----------+---------+----------+
#删除这个表
[root@RHCSA ~]# mysql -uroot -pOPEBlab123! -e 'drop table SECOND_DB.student'
mysql: [Warning] Using a password on the command line interface can be insecure.
#再次查看证明这个表不存在,已经被删除掉了
[root@RHCSA ~]# mysql -uroot -pOPEBlab123! -e 'select * from SECOND_DB.student'
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 1146 (42S02) at line 1: Table 'SECOND_DB.student' doesn't exist 

#还原完成
[root@RHCSA ~]# mysql -uroot -pOPEBlab123! SECOND_DB < /backup/db/SECOND_DB/SECOND_DB_student_2023-11-01.sql 
​
[root@RHCSA ~]# mysql -uroot -pOPEBlab123! SECOND_DB(要还原的数据库名字) < /backup/db/SECOND_DB/SECOND_DB_student_2023-11-01.sql (备份路径)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值