MySQL备份与恢复
一、备份与恢复
MySQL备份与恢复 备份 备份方式 是否停业务 冷备:停掉业务或DB进行备份(copy、rsync) 热备:不停业务的情况下进行备份 逻辑备份:导出SQL脚本进行备份 mysqldump:只支持单线程工作 mysqlpump:并行的最小粒度是单个数据库对象,对于每张表的导出只能是单个线程的 mydumper:支持对单表多个线程备份,参数-r select into outfile 物理备份:通过拷贝文件进行备份 xtrabackup+binlog 是否拷贝所有数据 全量备份:某一时刻整个数据库快照 增量备份:首次增量基于全量,后续增量可选择基于全量/增量 保存位置 本地备份 远程备份 备份原理 mysqldump、mysqlpump、mydumper、xtrabackup备份原理 InnoDB Crash Recovery MySQLD Crash Recovery和InnoDB Crash Recovery的区别 redo大小调整:5.6以上直接修改my.cnf;5.6以下在apply-log前修改backup-my.cnf中的innodb_log_file% DML、DDL操作对备份的影响 DML操作可能导致mysqldump、mysqlpump备份的non-InnoDB表不一致 DDL操作可能导致InnoDB表开启一致性快照事务之后,如果表结构定义发生改变,事务将无法对该表执行查询 备份方案选择 数据量小:逻辑备份 数据量大:xtrabackup+binlog,日常备份使用方案 恢复 备份时刻恢复 物理备份->copy-back;逻辑备份->mysql、myloader、source 任意时间点恢复 binlog2sql实现对误操作的闪回 全备+mysqlbinlog 高级技术 原始节点做master,恢复节点做slave copy binlog 2 relay-log利用sql_thread应用日志 binlog伪装成master,利用io_thread读取日志恢复
对于数据量超大的情况,建议结合Delayed Replication。其实最好是做分库分表,控制单实例的大小●-●
二、备份参考
2.1、txt、csv导出导入
1、备份生成文本 1.1、mysqldump -T mysqldump -T 批量导出表结构 tablename.sql(对应逻辑show create table)和数据文件 tablename.txt(对应逻辑select into outfile) mysqldump -h127.0.0.1 -P3306 -umydba -p123456 --skip-lock-tables sbtest sbtest1 -T /tmp/ 1.2、select into outfile mysql> select * from sbtest.sbtest1 into outfile '/tmp/sbtest1.csv'; 注意上面两种方式目标路径要和 secure_file_priv 变量一致,生成的数据文件不包含列名 2、文本文件导入 2.1、mysqlimport 通过向服务器发送LOAD DATA INFILE语句来实现,可以使用--local选项使 mysqlimport 从客户端主机(而不是mysql server主机)读取数据文件 mysqlimport -h192.168.18.135 -P3306 -umydba -p123456 sbtest /tmp/sbtest1.csv mysqlimport -h192.168.18.135 -P3306 -umydba -p123456 --local sbtest /tmp/sbtest1.csv 要使用local子句,server端需开启 local_infile(与secure_file_priv无关);mysqlimport client端使用 --local[=1],mysql client端使用 --local-infile[=1] 启用local data loading。客户端尽量避免使用LOCAL子句 https://dev.mysql.com/doc/refman/8.0/en/load-data-local.html binlog_format=row,写到binlog中时内部把load data语句转换为了row格式的insert 2.2、LOAD DATA INFILE mysql> load data infile '/tmp/sbtest1.csv' into table sbtest.sbtest1; load data infile需要开启 secure_file_priv