视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
MySQL备份时排除指定数据库的方法_MySQL
2020-11-09 20:19:46 责编:小采
文档
使用mysqldump命令备份时候,--all-databases 可以备份所有的数据库。 使用ignore-table 还可以排除制定的表。但是,mysqldump没有参数可以排除数据库的。

要备份的数据库少的时候,可以通过mysqldump -uroot -p123456 --databases db1 db2 db3 > mysqldump.sql 这样来备份。

但是假如数据库有数十个的话,这样写起来很累人,也很low。解决办法还是有的,看下面:

【下面演示用的mysql用户名的root,密码123456】

mysql -uroot -p123456 -e 'show databases;'|grep -E -v "Database|information_schema|mysql|test" |xargs 
mysqldump -uroot -p123456 --databases > mysqldump1.sql

但是很不幸的是,在mysql5.5上执行备份时报错了。

查了下资料,发现是由于5.5以后,mysql的performance_schema库导致的。那我们备份时跳过该库即可,下面2种方法任选:

1、mysql -uroot -p123456 -e 'show databases;'|grep -E -v "Database|information_schema|mysql|test"|xargs 
mysqldump -uroot -p123456 --skip-lock-tables performance_schema --databases > 2.sql
2、mysql -uroot -p123456 -e 'show databases;'|grep -E -v "Database|information_schema|mysql|
performance_schema" |xargs mysqldump -uroot -p123456 --databases > 3.sql

我更喜欢第二种的写法。

下面是我写的一个备份的mysql的脚本,每天夜里执行一次。写的简单些,语句也没有做优化。

#!/bin/bash
# Description: backup mysql data
# Author: lee
FILE="mysql_`date +%F`"
BACKDIR="/mysqlbackup"
CONF_FILE="/etc/my.cnf"
mysql -uroot -e 'show databases'|egrep -v "Database|information_schema|performance_schema" \ |xargs 
mysqldump -uroot --databases > $BACKDIR/$FILE.sql && cp $CONF_FILE $BACKDIR/$FILE.cnf \
&& echo -e "Machine: Oracle\nIP: 172.16.10.12\nStatus: MySQL is backup complete" | \ mail -s 
"MySQL BackUP Complete" lee@126.com

下图的代码看的更清楚写。

下面给大家介绍下MySQL使用mysqldump备份数据库时排除指定表

#!/bin/sh
for j in `mysql -uroot -e "USE spservice;SHOW TABLES" | grep -v Tables`
do
 case $j in
 mo_log|mt_log|report_info)
 :
 ;;
 *)
 mysqldump -uroot --default-character-set=gbk --opt spservice $j >> $j.sql
 esac
done
>>表名不固定 #!/bin/sh
for j in `mysql -uroot -e "USE spservice;SHOW TABLES" | grep -v Tables`
do
 for i in "$@"
 do
 if [ $j != $i ];then
 mysqldump -uroot --default-character-set=gbk --opt spservice $j >> $j.sql
 fi
 done
done
>>更简洁的方法
#!/bin/sh
for j in `mysql -uroot -e "USE spservice;SHOW TABLES" | grep -v Tables`
do
 echo $@ | grep -wq "\"
 if [ $? -ne 0 ];then
 mysqldump -uroot --default-character-set=gbk --opt spservice $j >> $j.sql
 fi
done
>>使用方法
sh exclude.sh mo_log mt_log report_log
#定义一个shell数组
tables=(mo_log mt_log report_log)
sh exclude.sh ${tables[@]}

下载本文
显示全文
专题