innobackupex 相关语法讲解【转】
innobackupex 相关语法讲解
连接服务器
The database user used to connect to the server and its password are specified by the --user and --password option
$ innobackupex --user=DBUSER --password=SECRET /path/to/backup/dir/
$ innobackupex --user=LUKE --password=US3TH3F0RC3 --stream=tar ./ | bzip2 -
$xtrabackup --user=DVADER --password=14MY0URF4TH3R --backup --target-dir=/data/bkps/
给用户授权
mysql> CREATE USER ’bkpuser’@’localhost’ IDENTIFIED BY ’s3cret’;
mysql> GRANT RELOAD, LOCK TABLES, REPLICATION CLIENT ON * . * TO ’bkpuser’@’localhost’;
mysql> FLUSH PRIVILEGES;
创建全备份
$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/
不生成时间戳的备份:
$ innobackupex --user=DBUSER --password=DBUSERPASS /path/to/BACKUP-DIR/ --no-timestamp
带 --defaults-file 选项的备份
The --defaults-file option You can provide other configuration file to innobackupex with this option. The only limitation is that it has to be the first option passed:
$ innobackupex --defaults-file=/tmp/other-my.cnf --user=DBUSER --password=DBUSERPASS /path/to/BACKUP
准备全备份
$ innobackupex --apply-log /path/to/BACKUP-DIR
check the last line of the output for a confirmation on the process:
111225 1:01:57 InnoDB: Shutdown completed; log sequence number 1609228
111225 01:01:57 innobackupex: completed OK!
--use-memory 增加备份速度
如果有多的RAM可以增加内存来处理速度,默认100M
$ innobackupex --apply-log --use-memory=4G /path/to/BACKUP-DIR
还原全备份
$ innobackupex --copy-back /path/to/BACKUP-DIR
也可以指定参数配置文件来复制到指定的目录: 如:
innobackupex --defaults-file=/home/devops/mysql3313_back/my.cnf --copy-back /home/devop s/backup/notimestamp
增量备份
1.先按照前面的语法准备一个全备份
$ innobackupex /data/backups
假如生成了/data/backups/2013-04-01_23-01-18 的备份目录(带时间戳的文件夹)
2.在全备份的基础上准备一个增量的备份集
$ innobackupex --incremental /data/backups --incremental-basedir=BASEDIR
其中basedir 就是前面的全备份目录: /data/backups/2013-04-01_23-01-18
假如生成后的增量备份目录是 /data/backups/2013-04-02_23-01-18
3.在前面增量备份的基础上继续增量备份
$ innobackupex --incremental /data/backups --incremental-basedir=INCREMENTAL-DIR-1
INCREMENTAL-DIR-1 指的是最后一次的备份目录 /data/backups/2013-04-02_23-01-18
4.增量备份还可以指定lsn 来备份
innobackupex --incremental /data/backups --incremental-lsn=1291135
从1291135的LSN号开始备份。(暂时理解不了它的用处)
5.准备增量备份 前面有三个目录 BASEDIR INCREMENTAL-DIR-1 INCREMENTAL-DIR-2
innobackupex --apply-log --redo-only BASE-DIR
innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1
innobackupex --apply-log BASE-DIR --incremental-dir=INCREMENTAL-DIR-2
prepare 最后一个备份集的时候,不要指定 redo-only。 不过即使指定了也会执行 rollback 操作,从而使所有的数据保持一致性。
prepare 增量备份结束以后,BASE-DIR的目录依然会包含一个完整的全备份,只是数据更新到了最后一个增量备份的LSN。
6.还原增量备份集
除了需要注意还原的目录是第一次建立的BASE-DIR目录。copy-back操作和前面的没有差别。
使用 innobackupex 来建立复制环境
主要操作:将 mysql3318 实例的数据通过 innobackupex 备份到到文件夹 d5 下,然后导入到 mysql3312 数据库实例中,最后将 mysql3312 作为 master server (mysql3318)的 slave server。
1.建立 mysql3318 的全备份
innobackupex --user=root --password=root --defaults-file=/home/devops/mysql3318/my.cnf /home/devops/backup2014423/fullbackup/d5 --no-timestamp
#建议做实验时的时候带上--no-timestamp 参数,这样可以指定一个容易分辨的备份目录,不然测试起来还是非常不方便的。
2.安装 mysql3312 实例
可以参照 MySQL 定制安装 来安装一个 mysql3312 实例。
需要注意的是 mysql3312 实例的配置文件中的 server-id 不能与 mysql3318 的 server-id 配置相同, 个人是按照端口号来分配的。
3.关闭 mysql3312 实例,将刚刚备份的 backup-dir 目录的数据备份复制到 mysql3312 的 datadir目录下。
操作的时候可能有些文件位置不同,自己针对自己的 mysql 进行修改。 操作如下:
#关闭mysql3312 实例
mysqladmin -uroot -p -S /home/devops/mysql3312/mysqld/mysqld.sock shutdown #复制 backup-dir 数据到 mysql3312 的 datadir 目录下
devops@rd2-v128:~/backup2014423/fullbackup/d5$ cp -r * ~/mysql3312/data/
复制结束以后,进入 mysql3312 的 datadir 目录下可以看到如下的文件列表
devops@rd2-v128:~/mysql3312/data$ ls
xtrabackup_binary ibdata1 mysql rd2-v128.lab.infra.mail.err xtrabackup_binlog_info
ib_logfile0 mysql_query.log relay-log.info xtrabackup_checkpoints
ib_logfile1 mysql-slow.log relay-log.info.backup xtrabackup_logfile
increment op_manage_demo sakila
master.info performance_schema test
其中 xtrabackup_binlog_info 记录着备份 mysql3318 主服务器时候的二进制日志文件和对应的位置,可以使用 cat 命令查看下该文件内容,因为执行后面的 change master 命令的时候需要用到这个参数。
devops@rd2-v128:~/mysql3312/data$ cat xtrabackup_binlog_info
mysql-bin.000006 3671
4.启动 mysql3312 实例
devops@rd2-v128:~/mysql3312/data$ mysql -uroot -p -S /home/devops/mysql3312/mysqld.sock
5.执行 change master 命令来开启 对 master server 的连接。
注意:如果初始的 master server 数据库没有 replication client 权限的用户时,需要在 master server 和 slave server 中创建一个这样的用户。可以参见 MySQL复制环境安装 的创建 slave 用户 一节。
执行 change master 命令
mysql> change master to master_host='10.246.18.128', master_user='repl', master_password='slavepass',master_port=3318, master_log_file='mysql-bin.000006', master_log_pos=3671;
Query OK, 0 rows affected (0.00 sec)
6. 启动 mysql3312 的 slave SQL 进程 ,进行验证。
启动 slave
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
执行 show slave status 验证
mysql> show slave status \G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.246.18.128
Master_User: repl
Master_Port: 3318
Connect_Retry: 60
Master_Log_File: mysql-bin.000006
Read_Master_Log_Pos: 3671
Relay_Log_File: relay-log.000014
Relay_Log_Pos: 253
Relay_Master_Log_File: mysql-bin.000006
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 3671
Relay_Log_Space: 403
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 3318
1 row in set (0.00 sec)
innobackupex slave 相关参数讲解
1.--slave-info
该参数可以在备份 slave server 的时候指定,这样在生成的备份文件中会生成一个 xtrabackup_slave_info 文件,该文件内容包含一条change master 指令,其中包括master server 的二进制文件名和二进制文件位置。这个信息非常有用如果需要将这个数据备份文件作为一个 slave server的初始数据的时候。
innobackupex --user=root -password=root --defaults-file=/home/devops/cnf/mysql3312.cnf --no-timestamp --slave-info /home/devops/backup2014423/fullbackup/slave3312
进入 backupdir(/home/devops/backup2014423/fullbackup/slave3312) 目录:
一定要注意这两个文件的区别,xtrabackup_slave_info 存储的是 master server 的当前日志信息和位置。 xtrabackup_binlog_info 存储的是自己作为 slave server 时自己的当前二进制日志文件和位置。
devops@rd2-v128:~/backup2014423/fullbackup/slave3312$ cat xtrabackup_slave_info CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=3783 devops@rd2-v128:~/backup2014423/fullbackup/slave3312$ cat xtrabackup_binlog_info bin-log.000008 219
2.--safe-slave-backup
这个参数会停止 slave SQL 线程,并等到 SHOW STATUS 命令中显示的 Slave_open_temp_tables 变为0的时候才进行备份。 如果等了 --safe-slave-backup-timeout 参数指定的时间(单位:秒)后,仍然无法让 Slave_open_temp_tables 变为0,备份会失败。
目的:为了保证在备份 slave 数据时的数据一致性, 因为在备份 slave 数据的时候如果 SQL 线程不关闭的情况下,可能会备份的时候 SQL 线程写入中继日志的数据到 slave server中, 影响了备份数据的一致性。 在官方手册中,也是建议在备份 slave server 数据的时候使用这个选项。
innobackupex --user=root -password=root --defaults-file=/home/devops/cnf/mysql3312.cnf --no-timestamp --slave-info --safe-slave-backup /home/devops/backup2014423/fullbackup/d6
其他参数理解
1. --parallel –compress-threads 加快备份
$ innobackupex --parallel=4 /path/to/backup $ innobackupex --stream=xbstream --compress --compress-threads=4 ./ > backup.xbstream
2. --throttle
等同于 mysqlbackup 命令中的 --sleep 选项, 用来控制备份时的IO流量限制。
3.--remote-host
Besides using the --stream for sending the backup to another host via piping (see Streaming and Compressing Backups), innobackupex can do it directly with the --remote-host.(复制过来的)
$ innobackupex --remote-host=REMOTEUSER@REMOTEHOST /path/IN/REMOTE/HOST/to/backup/
还可以通过指定 --sshopt 来指定 ssh 选项, 选项的默认值是 "-Cp -c arcfour"
$ innobackupex --remote-host=REMOTEUSER@REMOTEHOST /path/IN/REMOTE/HOST/to/backup/
--tmpdir=/tmp --scpopt="-Cp -c arcfour"
时间点恢复
这次选择一个单实例 mysql3314 作为实验。
1.先完成一个全备份
innobackupex --user=root --password=root --defaults-file=/home/devops/cnf/mysql3314.cnf --no-timestamp /home/devops/backup2014423/fullbackup/mysql3314
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| testtable |
+----------------+
1 row in set (0.00 sec) mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
2.对 mysql3314 实例进行一些插入修改操作,切换日志。
mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows in set (0.00 sec) mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 565 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
再插入一些数据,关闭服务器。
mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 | 107 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec) mysql> select * from tt;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows in set (0.00 sec) mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
+----+
5 rows in set (0.00 sec)
3.关闭 mysql3314 实例,删除数据库的数据。
devops@rd2-v128:~/cnf$ mysqladmin -uroot -p -S /home/devops/mysql3314/mysqld.sock shutdown
Enter password:
devops@rd2-v128:~/mysql3314$ ls
ibdata1 mysql-bin.000002 mysql-bin.index testtable.ibd
ib_logfile0 mysql-bin.000003 mysqld.log xtrabackup_binlog_pos_innodb
ib_logfile1 mysql-bin.000004 mysql-slow.log
4.copy back 全备份
移除 mysql3314文件夹, (mv mysql3314 mysql3314_back ; mkdir mysql3314 )因为如果mysql3314文件夹不为空会导致copy-back 失败。
innobackupex --copy-back --defaults-file=/home/devops/cnf/mysql3314.cnf /home/devops/backup2014423/fullbackup/mysql3314
复制以后,可以看到下面的目录
devops@rd2-v128:~/mysql3314$ ls
hr ibdata1 increment mysql op_manage_demo performance_schema sakila test
启动 mysql3314。
mysql -uroot -p -S /home/devops/mysql3314/mysqld.sock mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| testtable |
+----------------+
1 row in set (0.00 sec)
可以看到mysql3314的目录发生了变化:
# binary log 从 mysql-bin.000001 重新开始计数了。
devops@rd2-v128:~/mysql3314$ ls
hr ib_logfile0 increment mysql-bin.000001 mysqld.log mysqld.sock op_manage_demo sakila
ibdata1 ib_logfile1 mysql mysql-bin.index mysqld.pid mysql-slow.log performance_schema test
5.执行时间点的恢复。
可以看到 table t 和 tt 都消失了。执行时间点恢复到 t表的状态。 开始时间点:mysql-bin.000003 107 结束时间点:mysql-bin.000003 565 (table t 被插入两条的时间点)
devops@rd2-v128:~/mysql3314_back$ mysqlbinlog --start-position=107 --stop-position=565 /home/devops/mysql3314_back/mysql-bin.000003 |mysql -u root -p -S /home/devops/mysql3314/mysqld.sock
Enter password:
验证数据:
mysql> show tables;
+----------------+
| Tables_in_test |
+----------------+
| t |
| testtable |
+----------------+
2 rows in set (0.00 sec) mysql> select * from t;
+----+
| id |
+----+
| 1 |
| 2 |
+----+
2 rows in set (0.00 sec)
成立了以前的时间点恢复。
总结: 1.时间点恢复可以基于time 和基于二进制日志文件 position 来进行恢复的。个人感觉如果恢复的数据只是需要用到一个二进制文件的话,直接用 position 恢复就可以了,但是如果多个文件操作的话,就需要先用 mysqlbinlog 将多个日志文件写入到一个文件,然后通过时间点恢复比较靠谱。
第一种方法也就是我前面的操作方法
mysqlbinlog --start-position=107 --stop-position=565 /home/devops/mysql3314_back/mysql-bin.000003 |mysql -u root -p -S /home/devops/mysql3314/mysqld.sock
在使用多个日志文件进行恢复的时候,最好用如下的方法:
根据 start-datetime 和 stop-datetime 来进行恢复:
mysqlbinlog --start-datetime="2014-04-25 14:55:00" --stop-datetime="2014-04-20 16:05:00" mysql-bin.000003 mysql-bin.000004 > mysql3314.binlog 然后执行 mysql3314.binlog 文件
mysql -u root -p -S /home/devops/mysql3314/mysqld.sock "source /home/devops/mysql3314_back/mysql3314.binlog"
2.不建议使用这种方式来实现多个二进制日志文件的基于时间点恢复:
shell> mysqlbinlog binlog.000001 | mysql -u root -p # DANGER!!
shell> mysqlbinlog binlog.000002 | mysql -u root -p # DANGER!!
因为有可能 binlog.000002 可能需要 binlog.000001 中的数据,但是因为他们是分两次执行的,可能导致数据无法执行正确。 例如在binlog.000001 中创建了临时表的话,binlog.000002 执行的时候是无法用得到那些临时表的。
建议采用如下的形式:
shell> mysqlbinlog binlog.000001 > /tmp/statements.sql
shell> mysqlbinlog binlog.000002 >> /tmp/statements.sql
shell> mysql -u root -p -e "source /tmp/statements.sql"
===gengxin
转自
innobackupex 相关语法讲解-liushuiwuqing4-ITPUB博客
http://blog.itpub.net/28233716/viewspace-1152079/
innobackupex 相关语法讲解【转】的更多相关文章
- sublime Emmet的用法及相关语法
本节来讲一下Emmet插件的用法及相关语法. Emmet插件极大的提高了编程员的编程速度,下面我们来讲讲它的具体语法: 一.生成 HTML 文档初始结构 HTML 文档的初始结构,就是包括 docty ...
- Verilog HDL基础语法讲解之模块代码基本结构
Verilog HDL基础语法讲解之模块代码基本结构 本章主要讲解Verilog基础语法的内容,文章以一个最简单的例子"二选一多路器"来引入一个最简单的Verilog设计文件的 ...
- PID控制器的数字实现及C语法讲解
PID控制器的数字实现及C语法讲解 概述 为方便学习与交流,根据自己的理解与经验写了这份教程,有错误之处请各位读者予以指出,具体包含以下三部分内容: (1) PID数字化的推导过程(实质:微积分的近 ...
- Markdown语法讲解及MWeb使用教程
写了一个月的博客,忽然感觉Markdown编辑器比较好用,于是就下载了一个本地的Markdown编辑软件学习了一下,刚好软件里自带了一篇英文的指示文档,顺便翻译了一下,通过这个过程也大致熟悉了Mark ...
- HTML基础-------最初概念以及相关语法
HTML概念以及相关语法 HTML HTML是一种类似于(c,java,c++)之类的语言,他是用来描述网页的一种语言.通过各种标签所代表的语义来构建出一个网页,再通过浏览器的渲染功能来实现该网页的各 ...
- 比较C++、Java、Delphi声明类对象时候的相关语法
同学们在学习的时候经常会遇到一些问题,C++.Java.Delphi他们到底有什么不一样的呢?今天我们来比较C++.Java.Delphi声明类对象时候的相关语法.希望对大家有帮助! C++中创建对象 ...
- Elasticsearch基本CURD操作语法讲解
当我们的ES集群搭建完成以后,我怎么能看到集群中各个节点状态以及主节点和健康情况呢,如下讲解使用curl命令来与ES集群进行交互.分别有查询主节点情况.集群状态.以及创建索引查看索引.查看分片以及对E ...
- Mysql表结构定义及相关语法
mysql语法及相关命令1.每个sql命令都需要使用分号来完成2.可以将一个命令写成多行3.可以通过\c来取消本行命令4.可以通过\g.exit.ctrl+c或者quit来退出当前客户端5.可以通过使 ...
- 详细分析SQL语句逻辑执行过程和相关语法
本文目录: 1.SQL语句的逻辑处理顺序 1.2 各数据库系统的语句逻辑处理顺序 1.2.1 SQL Server和Oracle的逻辑执行顺序 1.2.2 MariaDB的逻辑执行顺序 1.2.3 M ...
随机推荐
- c++11 委托构造
c++11 委托构造 #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #includ ...
- TensorFlow入门之MNIST最佳实践
在上一篇<TensorFlow入门之MNIST样例代码分析>中,我们讲解了如果来用一个三层全连接网络实现手写数字识别.但是在实际运用中我们需要更有效率,更加灵活的代码.在TensorFlo ...
- 美团codeM之美团代金券
前天做了下美团的一个codeM比赛的资格赛,遇到一个题目挺有意思的,所以现在做一下总结. 题目描述 美团的每一个用户都有一个用户代金券的消费记录日志,每位用户都能购买若干种代金券,但是每一种代金券最多 ...
- 洛谷 P4091 [HEOI2016/TJOI2016]求和 解题报告
P4091 [HEOI2016/TJOI2016]求和 题目描述 在2016年,佳媛姐姐刚刚学习了第二类斯特林数,非常开心. 现在他想计算这样一个函数的值: \[ f(n)=\sum_{i=0}^n\ ...
- 遇到问题----mongodb-----mongorestore报错too many open files甚至mongo服务崩溃
之前运行mongorestore还原mongodb数据库一直都没问题,今天还原的时候 报错too many open files.而且mongo服务经常崩溃需要重启. 问题有两方面: 原因一 一个原因 ...
- 演化理解 Android 异步加载图片(转)
演化理解 Android 异步加载图片(转)http://www.cnblogs.com/CJzhang/archive/2011/10/20/2218474.html
- 2018.10.20 2018-2019 ICPC,NEERC,Southern Subregional Contest(Online Mirror, ACM-ICPC Rules)
i207M的“怕不是一个小时就要弃疗的flag”并没有生效,这次居然写到了最后,好评=.= 然而可能是退役前和i207M的最后一场比赛了TAT 不过打得真的好爽啊QAQ 最终结果: 看见那几个罚时没, ...
- 【纪中集训2019.3.11】Cubelia
题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...
- go语言操作mongodb
Install the MongoDB Go Driver The MongoDB Go Driver is made up of several packages. If you are just ...
- laravel 获取所有表名
$tables = DB::connection()->getDoctrineSchemaManager()->listTableNames(); 需要 doctrine/dbal 扩展, ...