超简洁shell解决mysql按表备份需求
databases='test1 test2 test3' Date=$(date "+%Y-%m-%d") Time=$(date "+%H%M%S") for db in $databases do mkdir -p `echo /home/backup/mysql/$db/$Date` done for db in $databases do tables=`mysql -u root -p123456 $db -e "show tables" | grep -v "Tables"` for table in $tables do mysqldump -u root -p123456 $db $table | gzip > /home/backup/mysql/$db/$Date/${table}_$Time.sql.gz done done
改进代码,实现需求:少于2000行则不压缩
databases='test1 test2 test3' Date=$(date "+%Y-%m-%d") Time=$(date "+%H%M%S") for db in $databases do mkdir -p `echo /home/backup/mysql/$db/$Date` done for db in $databases do tables=`mysql -u root -p123456 $db -e "select GROUP_CONCAT(TABLE_NAME,',', TABLE_ROWS) FROM information_schema.TABLES where TABLE_SCHEMA='$db' group by TABLE_NAME;" | grep -v "TABLE_NAME" | grep -v "_copy"` for table_row in $tables do table=`echo $table_row | awk -F, '{print $1}'` rows=`echo $table_row | awk -F, '{print $2}'` if [ $rows -le 2000 ] then mysqldump -uroot -p123456 $db $table > /home/backup/mysql/$db/$Date/$Time/${table}.sql else mysqldump -uroot -p123456 $db $table | gzip > /home/backup/mysql/$db/$Date/$Time/${table}.sql.gz fi done done
建议把备份出来的sql文件实时复制到其他硬盘或其他主机上,防止硬盘损坏导致数据丢失,备份结果也应实时使用wehook发送到钉钉、企业微信或飞书,并生成报表发到邮箱
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架