6:7 题一起MySQL数据库分库备份

企业Shell面试题6MySQL数据库分表备份

请实现对MySQL数据库进行分表备份,用脚本实现。

解答:

 

复制代码
[root@db01 scripts]# cat fenbiao.sh
#!/bin/bash
#. /etc/rc.d/init.d/functions

start_db () {
if [ -e /etc/init.d/mysqld ]
then
    M_ST=$(/etc/init.d/mysqld status|awk '{print $3}')
    [ "${M_ST}" != "running" ]&&/etc/init.d/mysqld start
        sleep 1
        M_ST=$(/etc/init.d/mysqld status|awk '{print $3}')
        [ "${M_ST}" != "running" ]||exit 0
else
    echo  "start up file not exits,error"
        exit 2
  
fi
}


dump_db () {
for db in `mysql -u root -poldboy123 -e "show databases;"|sed '1,2d'`
do
    for tb in `mysql -u root -poldboy123 -e "use $db;show tables;"|sed '1d'`           
    do
         mkdir -p /server/dbbackup/$(date +%F)/$db
         /application/mysql/bin/mysqldump  --lock-tables=0  -uroot -poldboy123  $db  $tb  >/server/dbbackup/$(date +%F)/${db}/${db}.${tb}$(date +%F).sql
        

    done
done
}

main() {
  M_ST=$(/etc/init.d/mysqld status|awk '{print $3}')
  if [ "${M_ST}" != "running" ]
  then
    echo "to start db"
    start_db
        sleep 3

  fi
   dump_db >/dev/null 2>&1

}

main
复制代码

 

方法二:之分库备份:

 

 

复制代码
[root@db01 scripts]# cat fenku_backup.sh 
#!/bin/bash
#gaobo  40team  614627690@qq.com
#
#
#对数据库进行启动二次检查
function checkdb() {
  if [ -f /etc/init.d/mysqld ]
    then
    db_stat=$(/etc/init.d/mysqld status|awk '{print $3}')
    if [ "${db_stat}" != "running" ]
        then
        /etc/init.d/mysqld start
        sleep 10
        db_stat=$(/etc/init.d/mysqld status|awk '{print $3}')
        echo $db_stat
        [ "${db_stat}" != "running" ] && /etc/init.d/mysqld start
        sleep 10
        db_stat=$(/etc/init.d/mysqld status|awk '{print $3}')
                echo $db_stat
        [ "${db_stat}" != "running" ] && {
            echo "启动失败,请检查数据库"
            exit 11;
        }
            
        
    fi
    
  else
    echo "数据库启动文件不存在请检查"

  fi


}

# 按照库进行分库不同的文件备份
# -e 不进入数据库执行命令
function seperate_db() {
for db in  $(mysql -uroot -poldboy123 -e "show databases;"|awk 'NR>1{print $0}') 
do
    /application/mysql/bin/mysqldump  --lock-tables=0 -uroot -poldboy123  $db >/server/dbbackup/$(date +%F)/${db}$(date +%F).sql

done

}


#按照数据库的表为不同文件进行备份
#
seperate_tb () {
for db in `mysql -u root -poldboy123 -e "show databases;"|sed '1,2d'`
do
    for tb in `mysql -u root -poldboy123 -e "use $db;show tables;"|sed '1d'`           
    do
         mkdir -p /server/dbbackup/$(date +%F)/$db
         /application/mysql/bin/mysqldump  --lock-tables=0  -uroot -poldboy123  $db  $tb  >/server/dbbackup/$(date +%F)/${db}/${db}.${tb}$(date +%F).sql
        

    done
done
}




function main() {
    checkdb
    
    case $1 in 
        seperate_db)    
        seperate_db  >/dev/null 2>&1
        ;;
        seperate_tb)
        seperate_tb  >/dev/null 2>&1
        ;;
        *)
        echo "Usage fenku_backup.sh  {seperate_db|seperate_tb}"    
        ;;
    esac    
}

main $1
复制代码

 

posted @   滴滴滴  阅读(305)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示