• MySQL 高级知识之使用 mysqldump 备份和恢复


    一 前言

    mysqldump是 MySQL 自带的备份工具,它可以实现对 MyISAM 表的温备份和对 innodb 表的热备份。但是它的还原速度很慢,在备份小型数据库时,使用很方便。

    二 数据库备份类型

    热备份 温备份 冷备份

    • 热备份:数据读写不受影响
    • 温备份:仅可以执行读操作
    • 冷备份:离线备份、读写均终止

    物理备份 逻辑备份

    • 物理备份:复制数据文件
    • 逻辑备份:将数据导出成文本文件

    完全备份 增量备份 差异备份

    • 完全备份:备份所有数据
    • 增量备份:仅备份上次完全备份或增量备份变化的数据
    • 差异备份:仅备份上次完全备份以来所有变化的数据

    三 数据库备份

    3.1 备份全库

    1. # 备份全库
    2. mysqldump -h192.168.1.11 -uroot -p123456 --all-databases > /opt/#{DATE}.sql

    3.2 备份单库

    1. # 备份单库
    2. mysqldump -h192.168.1.11 -uroot -p123456 db-name > /opt/#{DATE}.sql
    3. # 还原单库
    4. mysql -uroot -p123456 db-name

    3.3 排除部分库备份

    mysql -uroot -p'123456' -N -e "show databases;"|grep -Ev "information_schema|performance_schema|sys|mysql|database1"|xargs mysqldump -uroot -p'123456' --databases > /opt/#{DATE}.sql

    3.4 备份脚本

    创建备份脚本:vim backup.sh

    1. #!/bin/bash
    2. #备份 MySQL 数据库
    3. db_user=root
    4. db_password=123456
    5. # 排除库名称
    6. db_names="information_schema|mysql|performance_schema|sys"
    7. echo "MySQL 数据库备份开始时间:...............$(date "+%Y-%m-%d %H:%M:%S")">>/home/project/backup-mysql/logs.log
    8. mysql -u$db_user -p$db_password -N -e "show databases;"|grep -Ev $db_names|xargs mysqldump -u$db_user -p$db_password --databases |gzip > /home/project/backup-mysql/mysql-db-$(date "+%Y-%m-%d").sql.gz
    9. echo "MySQL 数据库备份结束时间:...............$(date "+%Y-%m-%d %H:%M:%S")">>/home/project/backup-mysql/logs.log

    3.5 自动化备份脚本

    创建备份脚本:vim backup.sh

    1. #!/bin/bash
    2. # 定义备份用户/密码
    3. DbUser=root
    4. DbPasswd=123456
    5. # 定义备份数据库
    6. DbName=("neworg_prod_project" "prod_project")
    7. # 定义备份目录
    8. Path=/home/project/backup-mysql/data
    9. # 定义备份数据保存天数 Mtime=3+1 天数也就是4天
    10. Mtime=3
    11. # 定时任务日志
    12. LogPath=/home/project/backup-mysql/db_backup.log
    13. Time=$(date +%F)
    14. CurrentPath=$(pwd)
    15. if ! [ -d ${Path} ];then
    16. mkdir ${Path}
    17. fi
    18. for i in ${DbName[@]};do
    19. if [ -d ${Path}/${Time} ];then
    20. cd ${Path}/${Time}
    21. else
    22. mkdir ${Path}/${Time} && cd ${Path}/${Time}
    23. fi
    24. mysqldump -f -x -u${DbUser} -p${DbPasswd} ${i} >${i}.sql
    25. zip ${i}.zip ${i}.sql
    26. rm -f ${i}.sql
    27. done
    28. cd ${Path} && find ${Path} -name '*.sql' -mtime +${Mtime}|awk -F"/" '{print $3}'|xargs rm -rf
    29. # 定时任务凌晨1点 自动添加
    30. if ! (grep -r ${CurrentPath}/${0} /var/spool/cron/root &>/dev/null);then
    31. echo >> /var/spool/cron/root
    32. echo "#DBServer: Backup Database" >> /var/spool/cron/root
    33. echo "0 0 1 * * ? bash ${CurrentPath}/${0} >> ${LogPath}" >> /var/spool/cron/root
    34. fi
  • 相关阅读:
    深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛
    【OpenVINO】 使用 OpenVINO CSharp API 部署 PaddleOCR 项目介绍
    使用 Lambda 表达式的正确姿势,写得太好了叭
    elasticsearch7 分组统计
    ThinkPHP5 按年度水平分表实例
    Nginx解决vue项目服务器部署以及跨域访问后端
    windows下使用FFmpeg开源库进行视频编解码完整步聚
    R语言使用lm函数构建线性回归模型、使用subset函数指定对于数据集的子集构建回归模型(使用floor函数和length函数选择数据前部分构建回归模型)
    thinkphp5.0.23漏洞复现以及脚本编写
    猿创征文——C++|string类2
  • 原文地址:https://blog.csdn.net/lovelichao12/article/details/127697915