博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
innobackupex 相关语法讲解【转】
阅读量:4511 次
发布时间:2019-06-08

本文共 13062 字,大约阅读时间需要 43 分钟。

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-DIRinnobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1innobackupex --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 实例

可以参照  来安装一个 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$ lsxtrabackup_binary ibdata1        mysql               rd2-v128.lab.infra.mail.err  xtrabackup_binlog_infoib_logfile0    mysql_query.log     relay-log.info    xtrabackup_checkpointsib_logfile1    mysql-slow.log      relay-log.info.backup xtrabackup_logfileincrement      op_manage_demo      sakilamaster.info    performance_schema  test

其中 xtrabackup_binlog_info 记录着备份 mysql3318 主服务器时候的二进制日志文件和对应的位置,可以使用 cat 命令查看下该文件内容,因为执行后面的 change master 命令的时候需要用到这个参数。

devops@rd2-v128:~/mysql3312/data$ cat xtrabackup_binlog_infomysql-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 中创建一个这样的用户。可以参见  的创建 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: 0Master_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: 33181 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_infoCHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=3783devops@rd2-v128:~/backup2014423/fullbackup/slave3312$ cat xtrabackup_binlog_infobin-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 shutdownEnter password:
devops@rd2-v128:~/mysql3314$ lsibdata1      mysql-bin.000002  mysql-bin.index  testtable.ibdib_logfile0  mysql-bin.000003  mysqld.log       xtrabackup_binlog_pos_innodbib_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$ lshr  ibdata1  increment  mysql  op_manage_demo  performance_schema  sakila  test

启动 mysql3314。

mysql -uroot -p -S /home/devops/mysql3314/mysqld.sockmysql> show tables;+----------------+| Tables_in_test |+----------------+| testtable      |+----------------+1 row in set (0.00 sec)

可以看到mysql3314的目录发生了变化:

# binary log 从 mysql-bin.000001 重新开始计数了。devops@rd2-v128:~/mysql3314$ lshr       ib_logfile0  increment  mysql-bin.000001  mysqld.log  mysqld.sock     op_manage_demo      sakilaibdata1  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.sockEnter 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.sqlshell> mysqlbinlog binlog.000002 >> /tmp/statements.sqlshell> mysql -u root -p -e "source /tmp/statements.sql"

===gengxin

转自

innobackupex 相关语法讲解-liushuiwuqing4-ITPUB博客

http://blog.itpub.net/28233716/viewspace-1152079/

转载于:https://www.cnblogs.com/paul8339/p/7692860.html

你可能感兴趣的文章
cocos2d-x 关于无法找到gl/gl.h头文件错误,以及r.java无法生成解决办法
查看>>
微信小程序——获取步数
查看>>
pycharm快捷键大全
查看>>
C++读取BMP文件
查看>>
20180821ImportContactFromExcel
查看>>
RedHat系列软件管理(第二版) --二进制软件包管理
查看>>
Ubuntu 12.04 LTS 屏幕亮度无法保存
查看>>
Maven 更换远程仓库地址
查看>>
SQL拼接大法
查看>>
第一阶段总结各组评价
查看>>
http & https & http/2 & SPDY & WebSocket
查看>>
[JLOI2013]卡牌游戏
查看>>
【题解】Luogu P2047 社交网络总结 (Floyd算法,最短路计数)
查看>>
rabbitmq vhost
查看>>
杂谈随笔
查看>>
php小程序-文章发布系统
查看>>
CocosCreator内存调试技巧H5版
查看>>
使用md5加密的登录密码
查看>>
Java 执行jar linux 实例
查看>>
染色(bzoj 2243)
查看>>