跳转至

58. 脚本:mysql分库分表备份

6. mysql数据库分库分表备份

思路分析

mysqldump oldboy test test1 |gzip >bak.sql.gz
1.oldboy 数据库名
2.test、test1 表名

方法2

mysqldump -B oldboy |gzip >bak.sql.gz
mysqldump oldboy test1
mysqldump oldboy test2
mysqldump oldboy test3

脚本

#!/bin/bash
path=/backup
mysql="mysql -uroot -poldboy123"
mysqldump="mysqldump -uroot -poldboy123"
[ -d $path ] || mkdir $path -p
for dbname in `$mysql -e "show databases;" 2>/dev/null |grep -v _schema|sed 1d`
do
    for tname in `$mysql -e "show tables from $dbname;" 2>/dev/nulll |sed 1d`
    do
        $mysqldump $dbname $tname |gzip >$path/${dbname}_${tname}.sql.gz 2>/dev/null
    done
done

也可以修改配置文件,加入如下参数,防止在脚本中加入密码

vim /etc/my.cnf

[client]
user=root
password=oldboy123

则,脚本中可以省略密码

#!/bin/bash
path=/backup
[ -d $path ] || mkdir $path -p

for dbname in `mysql -e "show databases;" 2>/dev/null |grep -v _schema|sed 1d`
do
    for tname in `mysql -e "show tables from $dbname;" 2>/dev/nulll |sed 1d`
    do
        mysqldump $dbname $tname |gzip >$path/${dbname}_${tname}.sql.gz 2>/dev/null
    done
done

改造,跳过报错数据库

#!/bin/bash
path=/backup
[ -d $path ] || mkdir $path -p

for dbname in `mysql -e "show databases;" 2>/dev/null |grep -v _schema|sed 1d`
do      
    for tname in `mysql -e "show tables from $dbname;" 2>/dev/nulll |sed 1d`
    do
        if [ "$dbname" = "mysql" ];then
            mysqldump --skip-lock-tables $dbname $tname |gzip >$path/${dbname}_${tname}.sql.gz 2>/dev/null
        else
            mysqldump $dbname $tname |gzip >$path/${dbname}_${tname}.sql.gz 2>/dev/null
        fi
    done
done

最后更新: 2022-02-19 13:59:07