MySQL备份与恢复

1 常用备份工具
备份工具 | 安装难度 | 备份类型 | 备份速度 | 备份即时点 | 压缩备份 | 远程备份 |
mysqldump | 自带 | 逻辑 | 慢 | 不支持 | 不支持 | 支持 |
mydumper(推荐) | 简单 | 逻辑 | 快 | 支持 | 支持 | 支持 |
xtrabackup | 比较难 | 物理 | 较快 | 支持 | 不支持 | 不支持 |
注:mydumper工具使用方法参考:https://vip.kingdee.com/article/322678304510088704
2 mysqldump工具
2.1 备份整个数据库
备份命令:mysqldump -u用户名 -p密码 -h主机地址 --single-transaction --skip-add-locks -R --all-databases >备份路径/备份文件名
如:mysqldump -unext -pkingdee -h127.0.0.1 --single-transaction --skip-add-locks -R --all-databases > alldatabases.sql

注意事项:如果将备份文件导入到其他实例中去,且建库用户不一致时。需要修改备份文件中的存储过程的DEFINER用户,命令如下:
sed -i "s/\(DEFINER=\)\(.*\)\`%\`//g" 备份文件
2.2 还原整个数据库
还原命令:mysql -u用户名 -p密码 -h主机地址 -P端口号 < 备份文件

2.3 备份单个库
备份命令:mysqldump -u用户名 -p密码 -h主机地址 --single-transaction --skip-add-locks -R 数据库名>脚本名
如: mysqldump -unext -p -hmysqlhost --single-transaction --skip-add-locks -R mc>mc.sql

注:如果将备份文件导入到其他实例中去,且建库用户不一致时。需要修改备份文件中的存储过程的DEFINER用户,命令如下:
sed -i "s/\(DEFINER=\)\(.*\)\`%\`//g" 备份文件
tips:同时备份多个库通过参数: --databases dbname1 dbname2 dbname3
2.4 还原单个库
还原命令:
CREATE DATABASE 需要还原的库名 DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci;
mysql -u用户名-p密码 -h主机地址 -P端口号 需要还原的库名< 备份文件
tips: 还原的库名必须存在,可以是原来备份的库名,也可以是新建的另一个库名(注意字符集和排序集)
2.5 配置定时任务备份数据库
准备备份脚本:/var/kingdee/script/mysqlbak.sh ,备份脚本参考(可自定义备份脚本):
#!/bin/sh
DB_PORT=3306
DB_IP='数据库IP'
MysqlBinDir=/usr/local/mysql57/bin
RemoteBackDir=/var/kingdee/mysql_backup/
BackFileDir=/var/kingdee/mysql_backup/
BackFileName=mysqlbak_${DB_IP}_${DB_PORT}_`date +%Y%m%d`.sql.gz
mkdir -p ${BackFileDir}
# 备份数据库
${MysqlBinDir}/mysqldump -u数据库用户 -p密码 -h数据库ip --single-transaction --skip-add-locks -R --all-databases|gzip > ${BackFileDir}/${BackFileName}
# 如果需要保存到异机,需要将备份文件传到远程存储中
sshpass -p"password" scp /${BackFileDir}/${BackFileName} root@数据备份服务器IP:${RemoteBackDir}/定时备份任务配置
进行crontab -e 设置,增加以下定时任务:
#备份任务:每天凌晨1点备份
0 1 * * * /bin/sh /var/kingdee/script/mysqlbak.sh >>/var/kingdee/script/log/mysqlbak.log 2>&1
#清理备份: 每天凌晨5点15天前的备份
0 5 * * * find /var/kingdee/mysql_bak/ -name 'mysqlbak_*.gz' -mtime +15 -exec rm {} \;3 xtrabackup工具
3.1 备份原理
innobackupex在后台线程不断追踪InnoDB的日志文件,然后复制InnoDB的数据文件。数据文件复制完成之后,日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始备份以后的事务日志。完成上面的步骤之后,就可以使用InnoDB崩溃恢复代码执行事务日志(redo log),以达到数据的一致性。
备份分为两个过程:
backup,备份阶段,追踪事务日志和复制数据文件(物理备份)。
preparing,重放事务日志,使所有的数据处于同一个时间点,达到一致性状态。
XtraBackup的优点:
(1)可以快速可靠的完成数据备份(复制数据文件和追踪事务日志)
(2)数据备份过程中不会中断事务的处理(热备份)
(3)节约磁盘空间和网络带宽
(4)自动完成备份鉴定
(5)因更快的恢复时间而提高在线时间
3.2 常用参数说明
基本命令:
--defaults-file: 指明服务器的配置文件,此参数必须作为innobackupex的第一个参数,否则报错
--host: 指明主机
--user: 指明备份的用户名
--password: 指明备份用户名的密码
--backup: 指明为备份
--apply-log: 指明为重做日志
--copy-back: 指明为恢复
--slave-info: 备份从库的show slave status信息,仅用于在备份从库时使用
--no-lock: 不锁表,仅适用于存储引擎为innodb,并且不在乎备份位置点时使用
增量备份:
--incremental: 这个选项告诉 xtrabackup 创建一个增量备份,而不是完全备份。它传递到 xtrabackup 子进程。
--incremental-dir:恢复增量备份时,指明增量备份的目录
--incremental-basedir: 指明此次的增量备份是基于之前的哪一次备份,增量备份仅适用于innodb和xtradb引擎
部分备份:
--include: 使用正则表达式备份匹配到的内容;例:备份mysql库中的user表,--
MySQL备份与恢复
声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。如若本站内容侵犯了原著者的合法权益,可联系本站删除。



