当前位置:   article > 正文

MySQL使用mysqldump备份数据库_mysql使用mysqldump进行备份数据库

mysql使用mysqldump进行备份数据库

逻辑备份工具:

mysqldump, mydumper, phpMyAdmin

mysqldump介绍

  • mysqldump是MySQL的客户端命令,
  • 通过mysql协议连接至mysql服务器进行备份

备份数据库三种方式

  • mysqldump database [表] 不建议
    可以备份单一数据库中的表或者指定的表,但是不备份数据库本身,如果创建数据库时指定了字符集和排序规则,恢复时需要手动创建数据库,无法保证一致性
  • mysqldump -B 数据库名 > 板寸的文件.sql
    不仅备份了数据库中的表,还保存了数据库本身
  • mysqldump -A > 板寸的文件.sql
    备份业务数据库和mysql

还原数据库直接导入sql文件

mysql < 板寸的文件.sql

常用选项

-A, --all-databases #备份所有数据库,含create database
-B, --databases db_name… #指定备份的数据库,包括create database语句
-E, --events:#备份相关的所有event scheduler
-R, --routines:#备份所有存储过程和自定义函数
--triggers:#备份表相关触发器,默认启用,用--skip-triggers,不备份触发器
--default-character-set=utf8 #指定字符集
--master-data[=#]: #此选项须启用二进制日志
#1:所备份的数据之前加一条记录为CHANGE MASTER TO语句,非注释,不指定#,默认为1,适合于主从复
制多机使用
#2:记录为被注释的#CHANGE MASTER TO语句,适合于单机使用,适用于备份还原
#此选项会自动关闭--lock-tables功能,自动打开-x | --lock-all-tables功能(除非开启--
single-transaction)
-F, --flush-logs #备份前滚动日志,锁定表完成后,执行flush logs命令,生成新的二进制日志文件,
配合-A 或 -B 选项时,会导致刷新多次数据库。建议在同一时刻执行转储和日志刷新,可通过和--singletransaction
或-x,--master-data 一起使用实现,此时只刷新一次二进制日志
--compact #去掉注释,适合调试,节约备份占用的空间,生产不使用
-d, --no-data #只备份表结构,不备份数据,即只备份create table
-t, --no-create-info #只备份数据,不备份表结构,即不备份create table
-n,--no-create-db #不备份create database,可被-A或-B覆盖
--flush-privileges #备份mysql或相关时需要使用
-f, --force #忽略SQL错误,继续执行
--hex-blob #使用十六进制符号转储二进制列,当有包括BINARY, VARBINARY,
BLOB,BIT的数据类型的列时使用,避免乱码
-q, --quick #不缓存查询,直接输出,加快备份速度
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

mysqldump的InnoDB存储引擎相关的备份选项:

  • InnoDB 存储引擎支持事务,可以利用事务的相应的隔离级别,实现热备,也可以实现温备但不建议用
--single-transaction
#此选项Innodb中推荐使用,不适用MyISAM,此选项会开始备份前,先执行START TRANSACTION指令开启
事务
#此选项通过在单个事务中转储所有表来创建一致的快照。 仅适用于存储在支持多版本控制的存储引擎中的表
(目前只有InnoDB可以); 转储不保证与其他存储引擎保持一致。 在进行单事务转储时,要确保有效的转储
文件(正确的表内容和二进制日志位置),没有其他连接应该使用以下语句:ALTER TABLE,DROP TABLE,
RENAME TABLE,TRUNCATE TABLE,此选项和--lock-tables(此选项隐含提交挂起的事务)选项是相互
排斥,备份大型表时,建议将--single-transaction选项和--quick结合一起使用
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

mysqldump的MyISAM存储引擎相关的备份选项:

  • MyISAM不支持事务,只能支持温备;不支持热备,所以必须先锁定要备份的库,而后启动备份操作
  • MyISAM在老版本中使用,已经淘汰了,但还需要了解
-x,--lock-all-tables #加全局读锁,锁定所有库的所有表,同时加--single-transaction或--
lock-tables选项会关闭此选项功能,注意:数据量大时,可能会导致长时间无法并发访问数据库
-l,--lock-tables #对于需要备份的每个数据库,在启动备份之前分别锁定其所有表,默认为on,--
skip-lock-tables选项可禁用,对备份MyISAM的多个库,可能会造成数据不一致
#注:以上选项对InnoDB表一样生效,实现温备,但不推荐使用
  • 1
  • 2
  • 3
  • 4
  • 5

备份策略应用

  • InnoDB实用备份策略
mysqldump -uroot -p -A -F -E -R --triggers --single-transaction --master-data=1 \
--flush-privileges --default-character-set=utf8 --hex-blob \
>${BACKUP}/fullbak_${BACKUP_TIME}.sql
  • 1
  • 2
  • 3
  • MyISAM实用备份策略
mysqldump -uroot -p -A -F -E -R -x --master-data=1 --flush-privileges -- \
triggers --default-character-set=utf8 --hex-blob \
>${BACKUP}/fullbak_${BACKUP_TIME}.sql 
  • 1
  • 2
  • 3

编写脚本实现mysqldump备份指定的数据库

#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup
DB=hellodb
PASS=aaaaaaaa
[ -d $DIR ] || mkdir $DIR
mysqldump -uroot -p "$PASS" -F -E -R --triggers --single-transaction --master-data=2 \
--default-character-set=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

编写脚本实现mysqldump备份数据库中所有库

#!/bin/bash
TIME=`date +%F_%H-%M-%S`
DIR=/backup
PASS=aaaaaaaa
[ -d "$DIR" ] || mkdir $DIR
for DB in `mysql -uroot -p "$PASS" -e 'show databases' | grep -Ev "^Database|.*schema$"`;do
mysqldump -F --single-transaction --master-data=2 \
--default-characterset=utf8 -q -B $DB | gzip > ${DIR}/${DB}_${TIME}.sql.gz
done
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

还原备份的数据库

  1. 需要在开启服务的情况下操作
  2. 进入数据库临时关闭二进制日志
    > set sql_log_bin=off;
  3. 使用source导入sql后缀备份文件
    source /backup/mysqlbak-2021-5-18.sql
  4. 恢复开启二进制日志
    set sql_log_bin=on;
  5. 测试数据库及表是否可正常访问
  6. 生产上线
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/582574
推荐阅读
相关标签
  

闽ICP备14008679号