青铜到王者,快速提升你 MySQL 数据库的段位!
DBA 人员,如果不能保证数据的完整性,一切操作都是徒劳无功。所以备份的重要性可想而知。虽然备份不能带来业务上的提升,还会增加我们的成本。但是没有数据的完整性,无法保证我们线上业务的正常运行。是数据损坏时最后的一个救命稻草。 备份按方法分:冷备和热备 冷备:数据库关掉,影响业务。系统级别的文件 copy(PS:现在这种基本被废弃了) 热备:数据库在线备份,不影响现有业务的进行。 在热备里面又分为: 1. 逻辑备份 a. mysqldump b. mydumper c. mysqlpump(mysql 5.7才出现) 2. 裸文件备份 物理底层去 copy 文件,工具是 percona-xtrabackup 按内容又可以分为:全量备份、增量备份 生产中最常用的两种方法: 1. mysqldump 2. xtrabackup mysqldump 参数详解: --single-transaction 用于保证innodb备份数据一致性,配合RR隔离级别使用;当发起事务,读取一个快照版本,直到备份结束时,都不会读取到本事务开始之后提交的数据;(很重要) -q, --quick 加 SQL_NO_CACHE 标示符来确保不会读取缓存里的数据-l --lock-tables 发起 READ LOCAL LOCK锁,该锁不会阻止读,也不会阻止新的数据插入 --master-data 两个值 1和2,如果值等于1,就会添加一个CHANGE MASTER语句(后期配置搭建主从架构) 如果值等于2,就会在CHANGE MASTER语句前添加注释(后期配置搭建主从架构) -c, --complete-insert; 导出完整sql语句 -d,--no-data; 不导出数据,只导表结构 -t,--no-create-info; 只导数据,不导表结构 -w, --where=name ; 按条件导出想要的数据 备份数据库: 备份单个数据库或单个数据库中的指定表: mysqldump [OPTIONS] database [tb1] [tb2]… 备份多个数据库: mysqldump [OPTIONS] –databases [OPTIONS] DB1 [DB2 DB3...] 备份所有数据库: mysqldump [OPTIONS] –all-databases [OPTIONS] 利用mysql命令恢复数据: mysql -uroot -proot23 db_name < table_name.sql xtrabackup备份原理分析: 对于Innodb,它是基于Innodb的crash recovery功能进行备份。 数据库崩溃恢复原理介绍:Innodb 维护了一个 redo log,它记录着 Innodb 所有数据的真实修改信息,当数据库重启过程中,redo log 会应用所有已经提交的事务进行前滚,并把所有未提交的事务进行回滚,来保证宕机那一时刻的数据完整性。 XtraBackup 在备份的时候并不锁定表,而是一页一页地复制 InnoDB 的数据,与此同时,XtraBackup 还有另外一个线程监视着 transactions log,一旦 log 发生变化,就把变化过的 log pages 复制走。在全部数据文件复制完成之后,停止复制 logfile。 常用命令: 首先需要创建备份目录:/opt/data/ innobackupex --no-timestamp --defaults-file=/etc/my.cnf --user root --socket=/tmp/mysql.sock --password root123 /opt/data/all-20170719-bak 注--no-timestamp 该参数的含义:不需要系统创建时间目录,自己可以命名; 增备原理分析: 在完整备份和增量备份文件中都有一个文件 xtrabackup_checkpoints 会记录备份完成时检查点的LSN。在进行新的增量备份时,XtraBackup 会比较表空间中每页的 LSN 是否大于上次备份完成的 LSN,如果是,则备份该页,并记录当前检查点的 LSN。 7月20日的增备信息 [root@node3 all-20170720-incr]# cat xtrabackup_checkpoints backup_type = incremental from_lsn = 267719862 to_lsn = 267720940 last_lsn = 267720940 compact = 0 7月21日的增备信息 [root@node3 all-20170721-incr2]# cat xtrabackup_checkpoints backup_type = incremental from_lsn = 267720940 to_lsn = 267721260 last_lsn = 267721260 compact = 0 可以看出 7月20日 的结束 lsn 号(to_lsn)是 7月21日 的开始 lsn 号(from_lsn)。 增备常用命令: 7月20日的增量文件 ./innobackupex --no-timestamp --user root --socket=/tmp/mysql.sock --password root123 --defaults-file=/etc/my.cnf --incremental --incremental-basedir=/opt/data/all-20170719-bak /data/xtrabackup/all-20170720-incr 注#–incremental-basedir:用来标识当前的增备从哪里开始 7月21日的增量文件 ./innobackupex --no-timestamp --user root --socket=/tmp/mysql.sock --password root123 --defaults-file=/etc/my.cnf --incremental --incremental-basedir=/data/xtrabackup/all-20170720-incr /data/xtrabackup/all-20170721-incr2 完整备份集=全备+增备1+增备2 恢复操作: (编辑:PHP编程网 - 黄冈站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |