热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql备份数据库案例_案例一、备份MySQL数据库

本脚本的核心知识点是如何备份所有的库。一台MySQL服务器,跑着5个数据库,没有做主从,需要对这5个数据库进行备份,具体要求

本脚本的核心知识点是如何备份所有的库。

一台MySQL服务器,跑着5个数据库,没有做主从,需要对这5个数据库进行备份,具体要求如下:

1)每天备份一次,所有数据库

2)备份数据存到/data/backup/下

3)备份文件名格式示例:database_name-2019-07-01.sql

4)对1天以前的所有sql文件进行压缩,格式为gzip

5)本地数据保留1周

6)备份的数据同步到远程备份中心,本机可以用rsync命令同步,同步目标地址为rsync://10.10.20.100/mysqlbak/

7)远程备份数据保留一个月

本案例参考脚本:

#!/bin/bash

##该脚本用来备份本机数据库

##本地保留一周,远程保留一个月

##作者:

##日期:

##版本:v0.1

mysqldump="/usr/local/mysql/bin/mysqldump"

bakuser="backup"

passwd="34KpmyzUp"

bakdir="/data/backup"

remote_dir="rsync://10.10.20.100/mysqlbak"

d1=`date +%F`

d2=`date +%d`

#定义日志

exec &> /tmp/mysql_bak.log

echo "mysql backup begin at `date`"

#对所有数据库进行遍历

for db in db1 db2 db3 db4 db5

do

$mysqldump -u$bakuser -p$passwd $db > $bakdir/$db-$d1.sql

done

#对一天前的所有sql文件压缩

find $bakdir -type f -name "*.sql" -mtime +1 |xargs gzip

#查找一周前的老文件,并删除

find $bakdir -type f -mtime +7 |xargs rm

#把当天的备份文件备份到远程

for db in db1 db2 db3 db4 db5

do

rsync -a $bakdir/$db-$d1.sql $remote_dir/$db-$d2.sql

done

echo "mysql backup end at `date`"

说明:

1)所有以#开头的行都是为解释说明的文字,为了便于理解,使用了中文,尽可能用英文,因为中文可能会出现乱码。这些注释文字用来对该脚本的描述,通常会写脚本的作用、作者以及时间或者版本等信息。

2)shell脚本中,可以使用反引号来引用一条命令的结果,然后将其保存到变量中。

3)&>,指定正确输出和错误输出到/tmp/mysql_bak.log

4)在shell脚本中,一旦遇到exec命令,则它会接管该shell脚本中后续所有的命令,可以理解为从exec那行以下所有命令都“被拉到一个盒子里去执行”,而这个盒子就是exec本身,所以exec &> 1.txt,就可以理解为这个盒子里所有操作的输出全部都到了1.txt中。

5)shell脚本中,循环遍历,可使用for,语法为:for ... ; do  ... ; done

6)本例中要求远程备份文件保存一个月,由于脚本不能到远程机器上执行find命令,所以在此想了个办法,date +%d表示日期,一个月的所有日期就都有了,每天一个新的sql文件。例如,本月15日sql文件将会覆盖上月15日的,同理,下个月会覆盖本月相同日期的文件,因为文件名是一样的。但无论如何,总能保存一个月。

7)本例中,并没有考虑要把当天的sql文件压缩后再同步到远程机器上,如果想要压缩,也可以这样做:1)压缩;2)同步;3)解压缩。不压缩的话,如果数据大,传输就是一个问题。

知识点一:MySQL数据库备份

假设已知备份数据的用户为backup,密码为34KpmyzUp,要备份5个库分别为db1-db5。备份数据库的命令为:mysqldump -ubackup -p34KpmyzUp db1 > db1.sql

如果是远程MySQL服务,要加上IP和port,例如:mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 db1 > db1.sql

mysqldump工具常用用法,如下:

1)只备份表结构,不备份数据mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 -d db1 > db1.sql

2)只备份数据,不备份表结构mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 -t db1 > db1.sql

3)只备份指定表mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 db1 tb1 > db1_tb1.sql

4)导出全部数据库mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 -A > all_db.sql

5)导出指定多个库mysqldump -ubackup -p34KpmyzUp -h192.168.100.100 -P3308 -B db1 db2 > db1_2.sql

6)--master-data

我们在使用mysqldump工具备份时,偶尔会用到--master-data选项,它可以在导出时增加binlog文件的位置和change master语句(这样有利于我们做从库)。

这个选项有两个值,分别为--master-data=1和--master-data=2。

当值等于1,就会添加一个CHANGE MASTER语句;

当值等于2,就会在CHANGE MASTER语句前添加注释,这个参数会--lock-all-tables锁表,除非你指定了--single-transation。

若MySQL数据量很大,比如有几十GB,使用mysqldump备份工具会很慢,推荐使用percona-xtrabackup备份工具该工具官方下载地址为https://www.percona.com/software/mysql-database/percona-xtrabackup,它包含两个备份工具:xtrabackup和innobackupex。如果数据引擎为myisam或者个别表的数据引擎为myisam,则需要使用innobackupex。

知识点二:date命令

date命令:在Linux系统里可以显示当前的系统日期和时间,示例:

# date

2019年 07月 01日 星期一 19:16:52 CST

在shell脚本中,date命令非常有用,就比如本例,要求备份文件名称要带日期。

date +%F      2019-07-01      日期

date +%T      18:29:10           时间

date +%Y       2019                年份(四位数)

date +%y        19                   年份(两位数)

date +%m       07                   月

date +%d        01                   日

date +%H       18                    小时

date +%M       29                    分钟

date +%S        10                    秒钟

date +%s         1561980346     时间戳(距离1970-01-01 00:000:00 GMT过去多少秒)

date +%w        1                      周几

date +%W        26                    本年度第几周

date -d"-1 day" +%F     2019-06-30     昨天的日期

date -d"1 month ago" +%F     2019-06-01     一个月以前的日期

date -d"-1 min" +%Y:%H:%M     2019:19:31   格式化输出指定日期和时间

知识点三:find命令

在Linux系统里找文件有一个很厉害的工具—find。常用用法示例:

1)找到logs目录下一周以前的文件find logs/ -type f -mtime +7

2)找到/etc/目录下所有文件为.cnf结尾的文件find /etc/ -type f -name "*.cnf"

3)找到当前目录下所有权限为777的目录find . -type d -perm 777

4)找到/tmp/下大小超过1MB的文件find /tmp/ -type f -size +1M

5)找到当前目录下10天前的文件并删除find . -type f -mtime +10 -exec rm -f {} \;

还可以使用管道+xargs命令的形式:find . -type f -mtime +10 |xargs rm

本例中,要求把一天前的备份文件找到:find /data/backup/ -name "*.sql" -mtime +1

知识点四:gzip压缩

gzip支持压缩文件,但不支持压缩目录,压缩文件的命令:

gzip file

此时文件被压缩为file.gz,该文件被压缩后也会被删除掉。解压.gz的文件,使用-d选项,如:

gzip -d file.gz

本例中,把一天前的备份文件压缩,命令为:find /data/backup/ -name "*.sql" -mtime +1 |xargs gzip

知识点五:rsync

rsync同步数据有两种方式,一种是通过ssh协议,需要知道对方机器的用户密码或者通过密钥认证,此方式相对来说安全性较差,毕竟知道了对方机器的密码或者建立了密钥认证,那么就能登录到对方机器上执行命令。

另一种是通过在远程机器上开启一个rsyncd的服务,通过它特有的通信协议进行数据传输,该方式不用密码或建立密钥认证,但可以设置虚拟用户及密码,这样就安全多了。本例中给出的远程备份地址,属于第二种方式。

平时使用rsync同步数据时,使用-a选项基本上就可以达到我们想要的效果了,只是有时候会有个别需求,会用到-a --no-OPTION,-u,-L,--delete,--exclude及--progress这些,如果遇到特殊需求了,可以查一下rsync的man文档。



推荐阅读
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • Centos7.6安装Gitlab教程及注意事项
    本文介绍了在Centos7.6系统下安装Gitlab的详细教程,并提供了一些注意事项。教程包括查看系统版本、安装必要的软件包、配置防火墙等步骤。同时,还强调了使用阿里云服务器时的特殊配置需求,以及建议至少4GB的可用RAM来运行GitLab。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
  • 浏览器中的异常检测算法及其在深度学习中的应用
    本文介绍了在浏览器中进行异常检测的算法,包括统计学方法和机器学习方法,并探讨了异常检测在深度学习中的应用。异常检测在金融领域的信用卡欺诈、企业安全领域的非法入侵、IT运维中的设备维护时间点预测等方面具有广泛的应用。通过使用TensorFlow.js进行异常检测,可以实现对单变量和多变量异常的检测。统计学方法通过估计数据的分布概率来计算数据点的异常概率,而机器学习方法则通过训练数据来建立异常检测模型。 ... [详细]
  • 在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ... [详细]
  • 从Oracle安全移植到国产达梦数据库的DBA实践与攻略
    随着我国对信息安全和自主可控技术的重视,国产数据库在党政机关、军队和大型央企等行业中得到了快速应用。本文介绍了如何降低从Oracle到国产达梦数据库的技术门槛,保障用户现有业务系统投资。具体包括分析待移植系统、确定移植对象、数据迁移、PL/SQL移植、校验移植结果以及应用系统的测试和优化等步骤。同时提供了移植攻略,包括待移植系统分析和准备移植环境的方法。通过本文的实践与攻略,DBA可以更好地完成Oracle安全移植到国产达梦数据库的工作。 ... [详细]
  • 本文介绍了H5游戏性能优化和调试技巧,包括从问题表象出发进行优化、排除外部问题导致的卡顿、帧率设定、减少drawcall的方法、UI优化和图集渲染等八个理念。对于游戏程序员来说,解决游戏性能问题是一个关键的任务,本文提供了一些有用的参考价值。摘要长度为183字。 ... [详细]
  • Windows7企业版怎样存储安全新功能详解
    本文介绍了电脑公司发布的GHOST WIN7 SP1 X64 通用特别版 V2019.12,软件大小为5.71 GB,支持简体中文,属于国产软件,免费使用。文章还提到了用户评分和软件分类为Win7系统,运行环境为Windows。同时,文章还介绍了平台检测结果,无插件,通过了360、腾讯、金山和瑞星的检测。此外,文章还提到了本地下载文件大小为5.71 GB,需要先下载高速下载器才能进行高速下载。最后,文章详细解释了Windows7企业版的存储安全新功能。 ... [详细]
  • GSIOpenSSH PAM_USER 安全绕过漏洞
    漏洞名称:GSI-OpenSSHPAM_USER安全绕过漏洞CNNVD编号:CNNVD-201304-097发布时间:2013-04-09 ... [详细]
  • 本文介绍了sqlserver云存储和本地存储的区别,云存储是将数据存储在网络上,方便查看和调用;本地存储是将数据存储在电脑磁盘上,只能在存储的电脑上查看。同时提供了几种启动sqlserver的方法。此外,还介绍了如何导出数据库的步骤和工具。 ... [详细]
  • 【shell】网络处理:判断IP是否在网段、两个ip是否同网段、IP地址范围、网段包含关系
    本文介绍了使用shell脚本判断IP是否在同一网段、判断IP地址是否在某个范围内、计算IP地址范围、判断网段之间的包含关系的方法和原理。通过对IP和掩码进行与计算,可以判断两个IP是否在同一网段。同时,还提供了一段用于验证IP地址的正则表达式和判断特殊IP地址的方法。 ... [详细]
  • 本文介绍了在MacOS系统上安装MySQL的步骤,并详细说明了如何设置MySQL服务的开机启动和如何修改MySQL的密码。通过下载MySQL的macos版本并按照提示一步一步安装,在系统偏好设置中可以找到MySQL的图标进行设置。同时,还介绍了通过终端命令来修改MySQL的密码的具体操作步骤。 ... [详细]
author-avatar
pierce2502910693
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有