Percona XtraBackup is the world’s only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits: Backups that complete
Percona XtraBackup is the world’s only open-source, free MySQL hot backup software that performs non-blocking backups for InnoDB and XtraDB databases. With Percona XtraBackup, you can achieve the following benefits:
Backups that complete quickly and reliably
Uninterrupted transaction processing during backups
Savings on disk space and network bandwidth
Automatic backup verification
Higher uptime due to faster restore time
以上摘自官方文档对Xtrabackup的描述。
Xtrabackup是Percona公司的开源mysql热备软件,软件自身支持完全备份和增量备份,功能强大,使用简单,且备份结束会自动检查备份的可用性。对于InnoDB和XtraDB可以实现无阻塞的备份。
Xtrabackup会在备份目录下自动生成以当前日期和时间为名的目录,目录下包含当前备份所有数据文件和丰富的当前备份时的状态信息。
实例演示:
xtrabackup的安装,安装包可从官网下载http://www.percona.com/software/percona-xtrabackup,官方提供了二进制和源码包,根据自己需要下载
/* 下载官方的rpm包安装,xtrabackup要依赖perl-DBD-mysql包,不想手动解决依赖关系可以yum localinstall安装 */ [root@console ~]# yum localinstall --nogpgcheck percona-xtrabackup-2.1.4-656.rhel6.x86_64.rpm -y /* xtrabackup安装后生成的文件不多 */ [root@console ~]# rpm -ql percona-xtrabackup /usr/bin/innobackupex /* 备份时用的命令,会根据mysql版本自动调用xtrabackup_{55,56} */ /usr/bin/innobackupex-1.5.1 /usr/bin/xbcrypt /* 提供备份过程加密支持 */ /usr/bin/xbstream /* 支持流式备份 */ /usr/bin/xtrabackup /usr/bin/xtrabackup_55 / * 这个和下面那个才是备份过程实际调用的备份程序 */ /usr/bin/xtrabackup_56 /usr/share/doc/percona-xtrabackup-2.1.4 /usr/share/doc/percona-xtrabackup-2.1.4/COPYING /* 文档只有一个软件授权文件,没有man文档,不过--help给出的帮助信息也比较丰富 */
备份过程:
/* 在库db1中准备一张表tb1,做效果比较用 */ MariaDB [(none)]> CREATE DATABASE db1; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> USE db1 Database changed MariaDB [db1]> CREATE TABLE `tb1` ( `id` int(11) NOT NULL AUTO_INCREMENT, `Name` varchar(30) NOT NULL, `Gender` enum('F','M','O') NOT NULL, PRIMARY KEY (`id`) ); Query OK, 0 rows affected (0.22 sec) MariaDB [db1]> DESC tb1; +--------+-------------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------+-------------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | Name | varchar(30) | NO | | NULL | | | Gender | enum('F','M','O') | NO | | NULL | | +--------+-------------------+------+-----+---------+----------------+ 3 rows in set (0.00 sec) MariaDB [db1]> INSERT INTO tb1 (Name,Gender) VALUES ('Tom','M'),('Jerry','F'); Query OK, 2 rows affected (0.05 sec) Records: 2 Duplicates: 0 Warnings: 0 MariaDB [db1]> SELECT * FROM tb1; +----+-------+--------+ | id | Name | Gender | +----+-------+--------+ | 1 | Tom | M | | 2 | Jerry | F | +----+-------+--------+ 2 rows in set (0.00 sec) /* 创建一个用于备份的最小权限的用户 */ MariaDB [(none)]> CREATE USER 'bakuser'@'localhost' IDENTIFIED BY 'backupass'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> REVOKE ALL PRIVILEGES,GRANT OPTION FROM 'bakuser'@'localhost'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> GRANT RELOAD,LOCK TABLES,REPLICATION CLIENT ON *.* TO 'bakuser'@'localhost'; Query OK, 0 rows affected (0.00 sec)
现在先做一次完全备份:
/* 全备只需指定用于备份的用户名、密码和备份路径即可,最后出现innobackupex: completed OK! 则代表备份成功 */ [root@node1 ~]# innobackupex --user=bakuser --password=backupass /innobackup/ innobackupex: Backup created in directory '/innobackup/2014-07-31_09-27-36' innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 1270 140731 09:27:39 innobackupex: Connection to database server closed 140731 09:27:40 innobackupex: completed OK! /* 看一下备份都生成了哪些文件,除了数据库文件外还多了一些文件,注意由于我用root登陆系统,备份后的文件属主属组都是root,恢复后要改为运行mysqld进程的用户,不然mysql起不来 */ [root@node1 ~]# cd /innobackup/2014-07-31_09-27-36/ [root@node1 2014-07-31_09-27-36]# ll total 18476 -rw-r--r--. 1 root root 260 Jul 31 09:27 backup-my.cnf /* 备份命令用到的配置选项信息 */ drwx------. 2 root root 4096 Jul 31 09:27 db1 drwx------. 2 root root 4096 Jul 31 09:27 hellodb -rw-r-----. 1 root root 18874368 Jul 31 09:27 ibdata1 drwx------. 2 root root 4096 Jul 31 09:27 mydb drwxr-xr-x. 2 root root 4096 Jul 31 09:27 mysql drwxr-xr-x. 2 root root 4096 Jul 31 09:27 performance_schema drwxr-xr-x. 2 root root 4096 Jul 31 09:27 test -rw-r--r--. 1 root root 13 Jul 31 09:27 xtrabackup_binary /* 记录备份过程实际用的备份程序 */ -rw-r--r--. 1 root root 24 Jul 31 09:27 xtrabackup_binlog_info /* 记录备份时的二进制日志文件和当前的位置 */ -rw-r-----. 1 root root 89 Jul 31 09:27 xtrabackup_checkpoints /* 记录备份类型、 状态(是否prepared)、是否压缩、备份的LSN(Log Sequence Number日志序列号)范围等信息 */ -rw-r-----. 1 root root 2560 Jul 31 09:27 xtrabackup_logfile /* xtrabackup自己的日志文件,新版本中不直接可见 */ [root@node1 2014-07-31_09-27-36]# cat backup-my.cnf # This MySQL options file was generated by innobackupex. # The MySQL server [mysqld] innodb_data_file_path=ibdata1:10M:autoextend innodb_log_files_in_group=2 innodb_log_file_size=5242880 innodb_fast_checksum=0 innodb_page_size=16384 innodb_log_block_size=512 [root@node1 2014-07-31_09-27-36]# cat xtrabackup_binary xtrabackup_55[root@node1 2014-07-31_09-27-36]# [root@node1 2014-07-31_09-27-36]# cat xtrabackup_binlog_info mysql-bin.000001 1270 [root@node1 2014-07-31_09-27-36]# cat xtrabackup_checkpoints backup_type = full-backuped from_lsn = 0 to_lsn = 1660869 last_lsn = 1660869 compact = 0 [root@node1 2014-07-31_09-27-36]# file xtrabackup_logfile xtrabackup_logfile: data
全备完成后,对数据库做一些修改后再做一次增备:
/* 第一次增量备份,--incremental 备份类型为增量, --incremental-basedir 指定这次增备是相对哪一个备份做的增量,这里是相对全备 */ [root@node1 innobackup]# innobackupex --user=bakuser --password=backupass --incremental /innobackup/ --incremental-basedir=/innobackup/2014-07-31_09-27-36/ innobackupex: Backup created in directory '/innobackup/2014-07-31_11-51-19' innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 1525 140731 11:51:48 innobackupex: Connection to database server closed 140731 11:51:48 innobackupex: completed OK! /* 做些修改,做第二次增备 */ MariaDB [db1]> DELETE FROM tb1 WHERE Name='Tom'; Query OK, 1 row affected (0.09 sec) MariaDB [db1]> UPDATE tb1 SET Gender='F' WHERE Name='Dongfang Bubai'; Query OK, 1 row affected (0.02 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [db1]> SELECT * FROM tb1; +----+----------------+--------+ | id | Name | Gender | +----+----------------+--------+ | 2 | Jerry | F | | 3 | Bob | M | | 4 | Dongfang Bubai | F | +----+----------------+--------+ 3 rows in set (0.00 sec) /* incremental-basedir 相对第一次增量的增量 */ [root@node1 innobackup]# innobackupex --user=bakuser --password=backupass --incremental /innobackup/ --incremental-basedir=/innobackup/2014-07-31_11-51-19/ innobackupex: Backup created in directory '/innobackup/2014-07-31_11-59-29' innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 1922 140731 11:59:33 innobackupex: Connection to database server closed 140731 11:59:33 innobackupex: completed OK! /* 第二次增备完成后,再做一些数据修改操作,以模拟实际生产环境数据库突然崩溃场景 */ MariaDB [db1]> INSERT INTO tb1 (Name,Gender) VALUES ('Kangshifu Guamian','O'); Query OK, 1 row affected (0.04 sec) /* 将二进制日志备份出来一份,生产环境中二进制日志切记不要和数据文件放在一起, 最好不要在同一分区甚至同一物理磁盘, 以免一旦玉石俱焚,悔之晚矣 */ [root@node1 innobackup]# mysql -e 'SHOW MASTER STATUS;' +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 2168 | | | +------------------+----------+--------------+------------------+ [root@node1 innobackup]# cp /mydata/data/ aria_log.00000001 hellodb/ ib_logfile1 mysql-bin.000001 node1.bob.org.pid aria_log_control ibdata1 mydb/ mysql-bin.index performance_schema/ db1/ ib_logfile0 mysql/ node1.bob.org.err test/ [root@node1 innobackup]# cp /mydata/data/mysql-bin.000001 /innobackup/ /* 人工让数据库彻底崩盘 */ [root@node1 innobackup]# service mysqld stop Shutting down MySQL.. [ OK ] [root@node1 innobackup]# rm -rf /mydata/data/*
恢复:
xtrabackup的恢复比较特殊,恢复前要先执行prepare过程,prepare主要完成把已提交的事务数据同步到数据文件,未完成的事务则回滚,这是对于只有一个完全备份来说。当还需要结合其他的增备时,则在些过程只需要将已提交的事务同步,未提交的事务则不用回滚,因为在本次备份时未提交的事务可能会在下一备份中已经提交,以避免这种无谓的劳动。
/* 注意 backup_type 和 to_lsn的变化 */ [root@node1 innobackup]# cat 2014-07-31_09-27-36/xtrabackup_checkpoints backup_type = full-backuped from_lsn = 0 to_lsn = 1660869 last_lsn = 1660869 compact = 0 /* Prepare全备,--apply-log 指定要prepare, --redo-only 只处理已提交事务,未提交的事务则不回滚 backup_type由full-backuped --> full-prepared */ [root@node1 innobackup]# innobackupex --apply-log --redo-only /innobackup/2014-07-31_09-27-36/ ... 140731 15:05:53 innobackupex: completed OK! [root@node1 innobackup]# cat 2014-07-31_09-27-36/xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 1660869 last_lsn = 1660869 compact = 0 /* prepare 增备1, --incremental-dir 增备的路径 */ [root@node1 innobackup]# innobackupex --apply-log --redo-only /innobackup/2014-07-31_09-27-36/ --incremental-dir /innobackup/2014-07-31_11-51-19/ /* 再来看full backup 的 to_lsn 已经 --> 增备1 的 to_lsn了,此时增量1也就退出舞台了 */ [root@node1 innobackup]# cat 2014-07-31_11-51-19/xtrabackup_checkpoints backup_type = incremental from_lsn = 1660869 to_lsn = 1661993 last_lsn = 1661993 compact = 0 [root@node1 innobackup]# cat 2014-07-31_09-27-36/xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 1661993 last_lsn = 1661993 compact = 0 /* prepare 增备2,增量1已经prepare上去了,所以基准还是全备,--incremental-dir 指向增量2 */ [root@node1 innobackup]# innobackupex --apply-log /innobackup/2014-07-31_09-27-36/ --incremental-dir=/innobackup/2014-07-31_11-59-29/ /* 完事后再瞅一眼,全备的 to_lsn 已经 --> 增量2 的了 */ [root@node1 innobackup]# cat 2014-07-31_09-27-36/xtrabackup_checkpoints backup_type = full-prepared from_lsn = 0 to_lsn = 1664255 last_lsn = 1664255 compact = 0 [root@node1 innobackup]# cat 2014-07-31_11-59-29/xtrabackup_checkpoints backup_type = incremental from_lsn = 1661993 to_lsn = 1664255 last_lsn = 1664255 compact = 0
至此,恢复的预准备工作已完成,两个增备也完成了历史使命,恢复只要用全备的一个就可以了:
/* 恢复过程灰常简单,恢复过程也不需要启动mysql, 但是备份过程是一定要启动mysql的,因为要以备份用户身份连到Mysql上的嘛 */ [root@node1 innobackup]# innobackupex --copy-back /innobackup/2014-07-31_09-27-36/ /* 现在还不能启动mysql, 对了,属主属组还没改 */ [root@node1 innobackup]# ll /mydata/data/ total 18456 drwxr-xr-x. 2 root root 4096 Jul 31 15:54 db1 drwxr-xr-x. 2 root root 4096 Jul 31 15:54 hellodb -rw-r--r--. 1 root root 18874368 Jul 31 15:54 ibdata1 drwxr-xr-x. 2 root root 4096 Jul 31 15:54 mydb drwxr-xr-x. 2 root root 4096 Jul 31 15:54 mysql drwxr-xr-x. 2 root root 4096 Jul 31 15:54 performance_schema drwxr-xr-x. 2 root root 4096 Jul 31 15:54 test [root@node1 innobackup]# chown -R mysql.mysql /mydata/data/* /* 现在就可以启动了 。。 */ [root@node1 innobackup]# service mysqld start Starting MySQL..... [ OK ] /* 正常启动,数据都在 */ MariaDB [db1]> SELECT * FROM tb1; +----+----------------+--------+ | id | Name | Gender | +----+----------------+--------+ | 2 | Jerry | F | | 3 | Bob | M | | 4 | Dongfang Bubai | F | +----+----------------+--------+ 3 rows in set (0.00 sec)
再加上最后的二进制日志恢复,整个恢复过程就全搞颠了
[root@node1 innobackup]# cat /innobackup/2014-07-31_11-59-29/xtrabackup_binlog_info mysql-bin.000001 1922 [root@node1 innobackup]# mysqlbinlog --start-position=1922 mysql-bin.000001 > 11.sql [root@node1 innobackup]# mysql < 11.sql MariaDB [(none)]> SELECT * FROM db1.tb1; +----+-------------------+--------+ | id | Name | Gender | +----+-------------------+--------+ | 2 | Jerry | F | | 3 | Bob | M | | 4 | Dongfang Bubai | F | | 5 | Kangshifu Guamian | O | +----+-------------------+--------+ 4 rows in set (0.01 sec) /* 二进制日志恢复,kangshifu guamian finnaly O 出锅了 */
To be continued ...

데이터베이스 최적화에서 쿼리 요구 사항에 따라 인덱싱 전략을 선택해야합니다. 1. 쿼리에 여러 열이 포함되고 조건 순서가 수정되면 복합 인덱스를 사용하십시오. 2. 쿼리에 여러 열이 포함되어 있지만 조건 순서가 고정되지 않은 경우 여러 단일 열 인덱스를 사용하십시오. 복합 인덱스는 다중 열 쿼리를 최적화하는 데 적합한 반면 단일 열 인덱스는 단일 열 쿼리에 적합합니다.

MySQL 느린 쿼리를 최적화하려면 SlowQueryLog 및 Performance_Schema를 사용해야합니다. 1. SlowQueryLog 및 Set Stresholds를 사용하여 느린 쿼리를 기록합니다. 2. Performance_schema를 사용하여 쿼리 실행 세부 정보를 분석하고 성능 병목 현상을 찾고 최적화하십시오.

MySQL 및 SQL은 개발자에게 필수적인 기술입니다. 1.MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템이며 SQL은 데이터베이스를 관리하고 작동하는 데 사용되는 표준 언어입니다. 2.MYSQL은 효율적인 데이터 저장 및 검색 기능을 통해 여러 스토리지 엔진을 지원하며 SQL은 간단한 문을 통해 복잡한 데이터 작업을 완료합니다. 3. 사용의 예에는 기본 쿼리 및 조건 별 필터링 및 정렬과 같은 고급 쿼리가 포함됩니다. 4. 일반적인 오류에는 구문 오류 및 성능 문제가 포함되며 SQL 문을 확인하고 설명 명령을 사용하여 최적화 할 수 있습니다. 5. 성능 최적화 기술에는 인덱스 사용, 전체 테이블 스캔 피하기, 조인 작업 최적화 및 코드 가독성 향상이 포함됩니다.

MySQL 비동기 마스터 슬레이브 복제는 Binlog를 통한 데이터 동기화를 가능하게하여 읽기 성능 및 고 가용성을 향상시킵니다. 1) 마스터 서버 레코드는 Binlog로 변경됩니다. 2) 슬레이브 서버는 I/O 스레드를 통해 Binlog를 읽습니다. 3) 서버 SQL 스레드는 데이터를 동기화하기 위해 Binlog를 적용합니다.

MySQL은 오픈 소스 관계형 데이터베이스 관리 시스템입니다. 1) 데이터베이스 및 테이블 작성 : CreateAbase 및 CreateTable 명령을 사용하십시오. 2) 기본 작업 : 삽입, 업데이트, 삭제 및 선택. 3) 고급 운영 : 가입, 하위 쿼리 및 거래 처리. 4) 디버깅 기술 : 확인, 데이터 유형 및 권한을 확인하십시오. 5) 최적화 제안 : 인덱스 사용, 선택을 피하고 거래를 사용하십시오.

MySQL의 설치 및 기본 작업에는 다음이 포함됩니다. 1. MySQL 다운로드 및 설치, 루트 사용자 비밀번호를 설정하십시오. 2. SQL 명령을 사용하여 CreateAbase 및 CreateTable과 같은 데이터베이스 및 테이블을 만듭니다. 3. CRUD 작업을 실행하고 삽입, 선택, 업데이트, 명령을 삭제합니다. 4. 성능을 최적화하고 복잡한 논리를 구현하기 위해 인덱스 및 저장 절차를 생성합니다. 이 단계를 사용하면 MySQL 데이터베이스를 처음부터 구축하고 관리 할 수 있습니다.

innodbbufferpool은 데이터와 색인 페이지를 메모리에로드하여 MySQL 데이터베이스의 성능을 향상시킵니다. 1) 데이터 페이지가 버퍼 풀에로드되어 디스크 I/O를 줄입니다. 2) 더러운 페이지는 정기적으로 디스크로 표시되고 새로 고침됩니다. 3) LRU 알고리즘 관리 데이터 페이지 제거. 4) 읽기 메커니즘은 가능한 데이터 페이지를 미리로드합니다.

MySQL은 설치가 간단하고 강력하며 데이터를 쉽게 관리하기 쉽기 때문에 초보자에게 적합합니다. 1. 다양한 운영 체제에 적합한 간단한 설치 및 구성. 2. 데이터베이스 및 테이블 작성, 삽입, 쿼리, 업데이트 및 삭제와 같은 기본 작업을 지원합니다. 3. 조인 작업 및 하위 쿼리와 같은 고급 기능을 제공합니다. 4. 인덱싱, 쿼리 최적화 및 테이블 파티셔닝을 통해 성능을 향상시킬 수 있습니다. 5. 데이터 보안 및 일관성을 보장하기위한 지원 백업, 복구 및 보안 조치.


핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

MinGW - Windows용 미니멀리스트 GNU
이 프로젝트는 osdn.net/projects/mingw로 마이그레이션되는 중입니다. 계속해서 그곳에서 우리를 팔로우할 수 있습니다. MinGW: GCC(GNU Compiler Collection)의 기본 Windows 포트로, 기본 Windows 애플리케이션을 구축하기 위한 무료 배포 가능 가져오기 라이브러리 및 헤더 파일로 C99 기능을 지원하는 MSVC 런타임에 대한 확장이 포함되어 있습니다. 모든 MinGW 소프트웨어는 64비트 Windows 플랫폼에서 실행될 수 있습니다.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

SublimeText3 영어 버전
권장 사항: Win 버전, 코드 프롬프트 지원!

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경
