怎样才能把网站宣传做的更好,建设部网站执业资格,做外贸网站公司,万网网站后台留言在哪默认情况下#xff0c;InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植#xff0c;即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能#xff0c;不过只能导出具有.ibd文件的表#xff0c;也就是说导出表的mysql服务…默认情况下InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能不过只能导出具有.ibd文件的表也就是说导出表的mysql服务器启用了innodb_file_per_table选项而且要导出的表还是在启用该选项之后才创建的。
导入表的是要求导入表的服务器版本是MySQL 5.6且启用了innodb_file_per_table选项。
(1). 导出表
导出表是在准备的过程中进行的不是在备份的时候导出。对于一个已经备份好的备份集使用--apply-log和--export选项即可导出备份集中的表。
假如以全备份集/bakdir/2017-04-02_17-41-38为例要导出其中的表。
innobackupex --apply-log --export /bakdir/2017-04-02_17-41-38
在导出过程中会看到如下信息 1 2 xtrabackup:export metadata of tablebackuptest/num_innodb tofile ./backuptest/num_innodb.exp (1 indexes) xtrabackup: namePRIMARY,id.low144, page3
它说明了创建了一个.exp文件。
查看备份集目录下的backuptest目录会发现多出了2个文件.cfg和.exp再加上.ibd文件这3个文件是后续导入表时所需的文件。
-rw-r--r-- 1 root root 349 Apr 2 18:15 num_innodb.cfg
-rw-r----- 1 root root 16K Apr 2 18:15 num_innodb.exp
-rw-r----- 1 root root 8.4K Apr 2 17:41 num_innodb.frm
-rw-r----- 1 root root 31M Apr 2 17:41 num_innodb.ibd
其中.cfg文件是一种特殊的innodb数据字典文件它和exp文件的作用是差不多的只不过后者还支持在xtradb中导入严格地讲要将导出的表导入到MySQL5.6或者percona server 5.6中.cfg文件完全可以不需要但是如果有该文件的话会进行架构验证。
(2). 导入表
要在mysql服务器上导入来自于其它服务器的某innodb表需要先在当前服务器上创建一个跟原表表结构一致的表而后才能实现将表导入
mysql CREATE TABLE tabletest (...) ENGINEInnoDB;
然后将此表的表空间
mysql ALTER TABLE mydatabase.tabletest DISCARD TABLESPACE;
接下来将来自于导出表的的.ibd和.exp文件复制到当前服务器的数据目录如果导入目标服务器是MySQL 5.6也可以复制.cfg文件。然后使用如下命令将其“导入”
mysql ALTER TABLE mydatabase.tabletest IMPORT TABLESPACE;
xtrabackup支持部分备份意味着可以指定备份哪个数据库或者哪个表。
部分备份只有一点需要注意在恢复的时候不要通过--copy-back的方式拷贝回datadir而是应该使用导入表的方式。尽管使用拷贝的方式有时候是可行的但是很多情况下会出现数据库不一致的状态。
(1). 备份
创建部分备份有三种方式 通过--include选项可以指定正则来匹配要备份的表这种方式要使用完整对象引用格式即db_name.tab_name的方式。将要备份的表分行枚举到一个文件中通过--tables-file指定该文件。或者使用--databases指定要备份的数据库或表指定备份的表时要使用完整对象引用格式多个元素使用空格分开。
使用前两种部分备份方式只能备份innodb表不会备份任何myisam即使指定了也不会备份。而且要备份的表必须有独立的表空间文件也就是说必须开启了innodb_file_per_table更精确的说要备份的表是在开启了innodb_file_per_table选项之后才创建的。第三种备份方式可以备份myisam表。
例如 --include^back.*[.]num_* 将备份back字母开头的数据库中num开头的表其中[.]的中括号不能少因为正则中.有特殊意义所以使用中括号来枚举以实现对象的完整引用。
innobackupex --userroot --password123456 --include^back*[.]num_* /bakdir/
使用--include和--tables-file备份后会生成一个时间戳目录目录中只有和要备份的表有关的文件。
[rootxuexi data]# ls /bakdir/2017-04-02_17-35-46/
backup-my.cnf ibdata1 xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile
如果使用的是--databases选项则会生成一个时间戳目录里面有备份的数据库代表的目录如果只备份了某个表则该数据库目录中只有该表相关的文件。
innobackupex --userroot --password123456 --databasesmysql.user backuptest /bakdir/
上面只备份mysql.user表和backuptest数据库在生成的时间戳目录中将有两个mysql目录和backuptest目录。
[rootxuexi data]# ls /bakdir/2017-04-02_17-41-38/
backup-my.cnf backuptest ibdata1 mysql xtrabackup_binlog_info xtrabackup_checkpoints xtrabackup_info xtrabackup_logfile[rootxuexi data]# ls /bakdir/2017-04-02_17-41-38/backuptest/
db.opt num_innodb.frm num_innodb.ibd num_isam.frm num_isam.MYD num_isam.MYI[rootxuexi data]# ls /bakdir/2017-04-02_17-41-38/mysql/
user.frm user.MYD user.MYI