怎样从ibd文件中苏醒数据,备份苏醒全经过记录

在利用独立表空间的景色下,要是不慎使得innodb存款和储蓄引擎的元数据文件ibdata损坏,大家仍为能够弥补宝贵的数据.因为在innodb使用独立表空间的情况下,ibdata文件会记录各类innodb表的id,只要使得ibd中的表id和ibdata文件中著录的表id相符,就能够开垦表,读取到数据.

xtrabackup全备方案,备份苏醒全经过记录

mysql下存款和储蓄文件难点,mysql存款和储蓄文件难题

#创建表

 

ibdata1 & mysql-bin

CREATE TABLE `ibdtest` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `fid` int(11) NOT NULL COMMENT ‘表b中的id’,
  `content` char(255卡塔尔 NOT NULL COMMENT ‘操作内容,系统生成’,
  `mark` char(255) NOT NULL COMMENT ‘备注’,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

[html] 

主题素材:磁盘空间报告警察方,经查发掘ibdata1和mysql-bin日志占用空间太多(当中ibdata1超过120G,mysql-bin超越80G) 原因:ibdata1是积攒格式,在INNODB类型数据状态下,ibdata1用来囤积文件的多少和目录,而库名的文书夹里的这多少个表文件只是组织而已。 innodb存储引擎有三种表空间的保管办法,分别是: 1)共享表空间(可拆分为四个小的表空间文件),那个是我们日前超越一44%据库使用的格局; 2)独立表空间,各类表有叁个单身的表空间(磁盘文件) 对于二种管理方法,各有上下,具体如下: ①共享表空间: 优点:能够将表空间分成七个公文寄存到分化的磁盘上(表空间文件大小不受表大小的范围,一个表能够遍布在不联合的文书上)。 劣点:全数数据和目录存放在三个文件中,则随着数据的充实,将会有二个不小的文件,尽管能够把一个大文件分为五个小文件,可是四个表及索引在表空间中混合存储,那样只要对于一个表做了汪洋删减操作后表空间旅长有大批量空隙。对于分享表空间管理的点子下,风华正茂旦表空间被分配,就无法再回缩了。当现身权且建索引或是创造多个有时表的操作表空间扩充后,即是剔除相关的表也无法回缩那有个别上空了。 ②独立表空间:在布置文件(my.cnf)中安装: innodb_file_per_table 特点:每种表都有自已单身的表空间;每一种表的数目和目录都会存在自已的表空间中。 优点:表空间对应的磁盘空间能够被收回(Drop table操作自动回笼表空间,假设对于删除大批量数据后的表能够由此:alter table tbl_name engine=innodb;回缩不用的上空。 劣点:假若单表扩充过大,如超越100G,质量也会蒙受震慑。在此种情况下,假使采用分享表空间能够把文件分别,但有相通有多少个标题,假使访谈的限量过大学一年级样会访谈八个文件,同样会不快。假如应用独立表空间,能够思索接纳分区表的措施,在鲜明程度上缓和难题。别的,当启用独立表空间情势时,须要合理调解innodb_open_files参数的安装。 杀绝: 1)ibdata1数量太大:只能通过dump,导出建库的sql语句,再重新创设的艺术。 2)mysql-bin Log太大: ①手动删除: 删除某些日志:mysql>PULX570GE MASTE中华V LOGS TO ‘mysql-bin.010′; 删除某天前的日记:mysql>PU牧马人GE MASTE哈弗 LOGS BEFORE ’二零一零-12-22 13:00:00′; ②在/etc/my.cnf里安装只保留N天的bin-log日志 expire_logs_days = 30 //Binary Log自动删除的大运

威尼斯赌场 1
#加上数码
INSERT ibdtest (fid,content,mark) VALUES (1,’1′,’1′),(2,’2′,’2′);

mysql> use inno  

MySql ibdata1文件

MySql
innodb如果是共享表空间,ibdata1文书更大,到达了30两个G,对有些没用的表实行清空:
truncate table xxx;
然后optimize table xxx; 未有效力
因为对分享表空间不起功能。
mysql ibdata1存放数据,索引等,是MYSQL的最要害的数量。
比方不把数量分开存放的话,这几个文件的大大小小比较轻巧就上了G,以致几十G。对于一些应用来讲,并非太合适。因而要把此文件收缩。
力不能支自行减少,必需数据导出,删除ibdata1,然后数据导入,相比较费心,因而需求改为各样表单独的文本。
解决方法:数据文件单独贮存(共享表空间怎么着改为各类表独立的表空间文件卡塔尔(英语:State of Qatar)。
手续如下:
1)备份数据库
备份全体数据库,施行命令
#mysqldump -q -uroot -ppassword –add-drop-table –all-databases
>/home/backup/all.sql
做完此步后,结束数据库服务。
#service mysqld stop
2)找到my.ini或my.cnf文件
linux下执行 
# /usr/libexec/mysqld –verbose –help | grep -A 1 ‘Default options’
Default options are read from the following files in the given order:
/etc/mysql/my.cnf /etc/my.cnf ~/.my.cnf 
windows情状下能够:
mysqld –verbose –help > mysqlhelp.txt
notepad mysqlhelp.txt
在内部查找Default options,能够阅览查找my.ini的逐蓬蓬勃勃,以找到真实目录
3)校订mysql配置文件
打开my.ini或my.cnf文件
[mysqld]下扩展上面配置
innodb_file_per_table=1
证实配置是不是见到效果,能够重启mysql后,实施
#service mysqld restart
#mysql -uroot -ppassword
mysql> show variables like ‘%per_table%’;
+———————–+——-+
| Variable_name         | Value |
+———————–+——-+
| innodb_file_per_table | ON    |
+———————–+——-+
1 row in set (0.00 sec)
怎样从ibd文件中苏醒数据,备份苏醒全经过记录。mysql> 
看看innodb_file_per_table变量是不是为ON
4)删除原数据文件
删去原本的ibdata1文本及日志文件ib_logfile*,删除/var/lib/mysql目录下的接收数据库文件夹(mysql文件夹不要删卡塔尔
5)还原数据库
启航数据库服务
从命令行步向MySQL Server
还原全体数据库,实施命令
#service mysqld start
#mysql -uroot -pocs < /home/backup/all.sql 
通过以上几步后,能够看看新的ibdata1文书就独有几十M了,数据及索引都改为了针对单个表的小ibd文件了,它们在对应数据库的文本夹下边。
# ll
total 295028
drwx——  2 mysql mysql     36864 Apr 22 14:16 glpi
drwx——  2 mysql mysql     36864 Feb 15 13:45 glpi-1
-rw-rw—-  1 mysql mysql  10485760 Apr 22 14:27 ibdata1
-rw-rw—-. 1 mysql mysql 270532608 Apr 22 14:14 ibdata1-1
-rw-rw—-  1 mysql mysql   5242880 Apr 22 14:27 ib_logfile0
-rw-rw—-. 1 mysql mysql   5242880 Apr 22 14:14 ib_logfile0_bak
-rw-rw—-  1 mysql mysql   5242880 Apr 22 14:28 ib_logfile1
-rw-rw—-. 1 mysql mysql   5242880 Apr 21 22:50 ib_logfile1_bak
drwx——  2 mysql mysql      4096 Apr 22 14:16 mrbs
drwx——  2 mysql mysql      4096 Apr 14 12:05 mrbs-1
drwx——. 2 mysql mysql      4096 Apr 22 14:16 mysql
srwxrwxrwx  1 mysql mysql         0 Apr 22 14:16 mysql.sock
drwx——  2 mysql mysql     12288 Apr 22 14:16 ocsweb
drwx——  2 mysql mysql     12288 Nov 16  2011 ocsweb-1
# ll mrbs
total 808
-rw-rw—- 1 mysql mysql     61 Apr 22 14:16 db.opt
-rw-rw—- 1 mysql mysql  10492 Apr 22 14:16 mrbs_area.frm
-rw-rw—- 1 mysql mysql  98304 Apr 22 14:16 mrbs_area.ibd
-rw-rw—- 1 mysql mysql   9264 Apr 22 14:16 mrbs_entry.frm
-rw-rw—- 1 mysql mysql 131072 Apr 22 14:16 mrbs_entry.ibd
-rw-rw—- 1 mysql mysql   9442 Apr 22 14:16 mrbs_repeat.frm
-rw-rw—- 1 mysql mysql  98304 Apr 22 14:16 mrbs_repeat.ibd
-rw-rw—- 1 mysql mysql   8888 Apr 22 14:16 mrbs_room.frm
-rw-rw—- 1 mysql mysql 114688 Apr 22 14:16 mrbs_room.ibd
-rw-rw—- 1 mysql mysql   8688 Apr 22 14:16 mrbs_users.frm
-rw-rw—- 1 mysql mysql  98304 Apr 22 14:16 mrbs_users.ibd
-rw-rw—- 1 mysql mysql   8658 Apr 22 14:16 mrbs_variables.frm
-rw-rw—- 1 mysql mysql  98304 Apr 22 14:16 mrbs_variables.ibd
-rw-rw—- 1 mysql mysql   8738 Apr 22 14:16 mrbs_zoneinfo.frm
-rw-rw—- 1 mysql mysql  98304 Apr 22 14:16 mrbs_zoneinfo.ibd
# ll mrbs-1
total 88
-rw-rw—- 1 mysql mysql    61 Apr 14 12:05 db.opt
-rw-rw—- 1 mysql mysql 10492 Apr 14 12:05 mrbs_area.frm
-rw-rw—- 1 mysql mysql  9264 Apr 14 12:05 mrbs_entry.frm
-rw-rw—- 1 mysql mysql  9442 Apr 14 12:05 mrbs_repeat.frm
-rw-rw—- 1 mysql mysql  8888 Apr 14 12:05 mrbs_room.frm
-rw-rw—- 1 mysql mysql  8688 Apr 14 12:05 mrbs_users.frm
-rw-rw—- 1 mysql mysql  8658 Apr 14 12:05 mrbs_variables.frm
-rw-rw—- 1 mysql mysql  8738 Apr 14 12:05 mrbs_zoneinfo.frm

文字出自:

ibdata1
mysql-bin
难点:磁盘空间报告急察方,经查发现ibdata1和mysql-bin日志占用空间太多(个中ibdata1抢先12…

SELECT * FROM ibdtest;

Database changed  

 威尼斯赌场 2

mysql> insert into mm select 1;  

关门mysql将ibdtest.ibd copy出来,放到任何数据库中来模拟灾害.

Query OK, 1 row affected (0.01 sec)  

威尼斯赌场 3

Records: 1  Duplicates: 0  Warnings: 0  

[[email protected]
~]#/opt/soft/mysql/bin/mysqladmin -p123456 shutdown

  

120130 18:31:50 mysqld_safe mysqld from pidfile
/opt/soft/mysql/60137.localdomain.pid ended

mysql> insert into mm select 2;  

[1]+ Done         
          /opt/soft/mysql/bin/mysqld_safe–defaults-file=/opt/soft/mysql/config/my.cnf
–user=mysql

Query OK, 1 row affected (0.00 sec)  

 [[email protected] ~]# cd /home/soft/mysql/data/test/
[[email protected] test]# ll
total 1296
-rw-rw—-. 1 mysql mysql  8612 Jan 18 00:06 a.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 18 00:24 a.ibd
-rw-rw—-. 1 mysql mysql  8624 Jan 30 08:34 area.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 08:36 area.ibd
-rw-rw—-. 1 mysql mysql  8642 Jan 18 00:05 b.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 18 00:08 b.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 18:27 ibdtest.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 18:28 ibdtest.ibd
-rw-rw—-. 1 mysql mysql  8728 Jan  6 16:23 testa.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 10 04:10 testa.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 14:30 testmc.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 14:30 testmc.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 13:54 testme.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 13:55 testme.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 14:40 testmm.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 14:45 testmm.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 13:40 testmu.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 13:40 testmu.ibd
-rw-rw—-. 1 mysql mysql  8693 Jan 30 11:08 testmv.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 30 11:10 testmv.ibd
-rw-rw—-. 1 mysql mysql  8694 Jan  4 21:55 testuser.frm
-rw-rw—-. 1 mysql mysql 98304 Jan  4 22:04 testuser.ibd
-rw-rw—-. 1 mysql mysql  8644 Jan 14 21:55 user.frm
-rw-rw—-. 1 mysql mysql 98304 Jan 14 21:55 user.ibd
[[email protected] test]# cp ibdtest.ibd /home/download/
[[email protected] test]# cd /home/download/

Records: 1  Duplicates: 0  Warnings: 0  

#vim展开ibd,使用16进制查看
[[email protected] download]# vim -b ibdtest.ibd 
:%!xxd  

  

从下图中能看见 此表在 当前mysql数据库中的id为0x10,即16.

mysql> insert into mm select 3;  

威尼斯赌场 4

Query OK, 1 row affected (0.00 sec)  

那儿,大家只要灾流产生,ibdata损坏…

Records: 1  Duplicates: 0  Warnings: 0  

只剩下了ibdtest.ibd文,我们跳转到另一个mysql服务器上,用一样的建表语句创造ibdtest表.

  

威尼斯赌场 5

mysql> select * from mm;  

那时候我们开垦那些mysql服务器下的ibdtest.ibd看看:

+——+  

 威尼斯赌场 6

| a    |  

其一表的id为0x16,即为22,那么,大家只需将原有的ibdtest.ibd表id改进为0x16就可以.

+——+  

威尼斯赌场 7

|    1 |  

抽离保存的时候势须要记得使用:%!xxd  -r

|    2 |  

退出保存.

|    3 |  

并将官和校官正好的文本覆盖掉新的ibdtest.ibd即可,

+——+  

威尼斯赌场 8

3 rows in set (0.00 sec)  

此mysql服务器会认为该表损毁,不只怕开荒,没提到,改革innodb_force_recovery
= 6,

  

威尼斯赌场 9

mysql> show create table mm;  

重启mysql服务:

+——-+————————————————————————————-+
 

威尼斯赌场 10

| Table | Create Table                                                  
                     |  

Select下,就精晓数码是或不是复苏了从未:

威尼斯赌场 ,+——-+————————————————————————————-+
 

威尼斯赌场 11

| mm    | CREATE TABLE `mm` (  

那时,不恐怕实行写操作,应尽早将数据dump出来,更正innodb_force_recovery =
0,重启服务,创设新表后,把数量倒回去就ok了.复苏数据就不演示了.

  `a` int(11) DEFAULT NULL  

威尼斯赌场 12

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |  

摘自 ylqmf的专栏

+——-+————————————————————————————-+
 

1 row in set (0.00 sec)  

  

mysql> exit  

mysql> use inno  

Database changed  

mysql> create table t(a int)  

    -> ;  

Query OK, 0 rows affected (0.06 sec)  

  

mysql> show create table t;  

+——-+————————————————————————————+
 

| Table | Create Table                                                  
                    |  

+——-+————————————————————————————+
 

| t     | CREATE TABLE `t` (  

  `a` int(11) DEFAULT NULL  

) ENGINE=InnoDB DEFAULT CHARSET=utf8 |  

+——-+————————————————————————————+
 

1 row in set (0.01 sec)  

  

mysql> insert into t select 1;  

Query OK, 1 row affected (0.00 sec)  

Records: 1  Duplicates: 0  Warnings: 0  

  

mysql> insert into t select 2;  

Query OK, 1 row affected (0.01 sec)  

Records: 1  Duplicates: 0  Warnings: 0  

  

mysql> insert into t select 3;  

Query OK, 1 row affected (0.00 sec)  

Records: 1  Duplicates: 0  Warnings: 0  

  

mysql> select * from t;  

+——+  

| a    |  

+——+  

|    1 |  

|    2 |  

|    3 |  

+——+  

3 rows in set (0.00 sec)  

  

mysql>  

以上是希图条件,以下开首张开测验;

[html] 

全备:  

[[email protected]
back_up]# xtrabackup_55 –defaults-file=/etc/my.cnf  –backup
 –target-dir=/data/back_up/  

xtrabackup_55 version 1.6.2 for MySQL server 5.5.10 Linux (i686)
(revision id: undefined)  

xtrabackup: uses posix_fadvise().  

xtrabackup: cd to /usr/local/mysql/data  

xtrabackup: Target instance is assumed as followings.  

xtrabackup:   innodb_data_home_dir = ./  

xtrabackup:   innodb_data_file_path = ibdata1:10M:autoextend  

xtrabackup:   innodb_log_group_home_dir = ./  

xtrabackup:   innodb_log_files_in_group = 2  

xtrabackup:   innodb_log_file_size = 5242880  

130327 14:11:12 InnoDB: Using Linux native AIO  

130327 14:11:12  InnoDB: Warning: allocated tablespace 2, old maximum
was 0  

>> log scanned up to (893330211)  

[01] Copying ./ibdata1   

     to /data/back_up//ibdata1  

>> log scanned up to (893330211)  

>> log scanned up to (893330211)  

[01]        …done  

[01] Copying ./inno/mm.ibd   

     to /data/back_up//inno/mm.ibd  

[01]        …done  

[01] Copying ./inno/t.ibd   

     to /data/back_up//inno/t.ibd  

[01]        …done  

xtrabackup: The latest check point (for incremental): ‘893330211’  

>> log scanned up to (893330211)  

xtrabackup: Stopping log copying thread.  

xtrabackup: Transaction log of lsn (893330211) to (893330211) was
copied.  

[[email protected]
back_up]#   

[[email protected]
back_up]# ls  

ibdata1  inno  xtrabackup_checkpoints  xtrabackup_logfile  

[[email protected]
back_up]# cd inno/  

[[email protected]
inno]# ls  

mm.ibd  t.ibd  

[[email protected]
inno]# ll  

total 208  

-rw-r–r– 1 root root 98304 Mar 27 14:11 mm.ibd  

-rw-r–r– 1 root root 98304 Mar 27 14:11 t.ibd  

[[email protected]
inno]#   

[[email protected]
inno]# cp /usr/local/mysql/data/inno/*.frm  /data/back_up/inno/  
–复制表构造文件实行到备份目录内;  

[[email protected]
inno]# cd /data/back_up/inno/  

[[email protected]
inno]# ls  

mm.frm  mm.ibd  t.frm  t.ibd  
—-此目录内有完全的IBD数据文件和frm表布局文件;  

[[email protected]
inno]#   

[[email protected]
inno]# cd ..  

[[email protected]
data]# ls  

book         log.1             mysql-bin.000004    prod  

ibdata1      mysql             mysql-bin.index     Slave02.err  

ib_logfile0  mysql-bin.000001  mysqld_multi.log    Slave02.pid  

ib_logfile1  mysql-bin.000002  mysql.pid           slow.log  

inno         mysql-bin.000003  performance_schema  test  

—以下起头测验全库innodb的东山复起进程  

[[email protected]
data]# rm -rf inno/      —-删除inno里的富有文件(ibd,from等)  

[[email protected]
data]# ls  

book         mysql             mysql-bin.index     Slave02.err  

ibdata1      mysql-bin.000001  mysqld_multi.log    Slave02.pid  

ib_logfile0  mysql-bin.000002  mysql.pid           slow.log  

ib_logfile1  mysql-bin.000003  performance_schema  test  

log.1        mysql-bin.000004  prod  

[[email protected]
data]# cp -r /data/back_up/inno/ /usr/local/mysql/data/  
–使用备份的多少实行恢复生机到相关目录  

[[email protected]
data]# ls  

book         log.1             mysql-bin.000004    prod  

ibdata1      mysql             mysql-bin.index     Slave02.err  

ib_logfile0  mysql-bin.000001  mysqld_multi.log    Slave02.pid  

ib_logfile1  mysql-bin.000002  mysql.pid           slow.log  

inno         mysql-bin.000003  performance_schema  test  

[[email protected]
data]# cd inno/  

[[email protected]
inno]# ll                                            
—查见到相关的当下放权力限不对,进行校勘  

total 240  

-rw-r—– 1 root root  8554 Mar 27 14:20 mm.frm  

-rw-r–r– 1 root root 98304 Mar 27 14:20 mm.ibd  

-rw-r—– 1 root root  8554 Mar 27 14:20 t.frm  

-rw-r–r– 1 root root 98304 Mar 27 14:20 t.ibd  

[[email protected]
inno]#   

[[email protected]
inno]# ll  

total 240  

-rw-r—– 1 root root  8554 Mar 27 14:20 mm.frm  

-rw-r–r– 1 root root 98304 Mar 27 14:20 mm.ibd  

-rw-r—– 1 root root  8554 Mar 27 14:20 t.frm  

-rw-r–r– 1 root root 98304 Mar 27 14:20 t.ibd  

[[email protected]
inno]# chown -R mysql:mysql /usr/local/mysql/data/inno/  

[[email protected]
inno]# ll -la  

total 256  

drwx—— 2 mysql mysql  4096 Mar 27 14:20 .  

drwxr-xr-x 8 mysql mysql  4096 Mar 27 14:20 ..  

-rw-r—– 1 mysql mysql  8554 Mar 27 14:20 mm.frm  

-rw-r–r– 1 mysql mysql 98304 Mar 27 14:20 mm.ibd  

-rw-r—– 1 mysql mysql  8554 Mar 27 14:20 t.frm  

-rw-r–r– 1 mysql mysql 98304 Mar 27 14:20 t.ibd  

[[email protected]
inno]#   

[[email protected]
inno]# service mysqld restart        —–重启msyql,进行校验下多少;
 

Shutting down MySQL.                                       [  OK  ]  

Starting MySQL..                                           [  OK  ]  

[[email protected]
inno]# mysql -uroot -proot  

Welcome to the MySQL monitor.  Commands end with ; or \g.  

Your MySQL connection id is 1  

Server version: 5.5.13-log Source distribution  

  

Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights
reserved.  

  

Oracle is a registered trademark of Oracle Corporation and/or its  

affiliates. Other names may be trademarks of their respective  

owners.  

  

Type ‘help;’ or ‘\h’ for help. Type ‘\c’ to clear the current input
statement.  

  

mysql> use inno;  

Database changed  

mysql> show tables;  

+—————-+  

| Tables_in_inno |  

+—————-+  

| mm             |  

| t              |  

+—————-+  

2 rows in set (0.00 sec)  

  

mysql> select * from mm;   —苏醒不错平常;  

+——+  

| a    |  

+——+  

|    1 |  

|    2 |  

|    3 |  

|    4 |  

+——+  

4 rows in set (0.00 sec)  

  

mysql>   

mysql> select * from t;  

+——+  

| a    |  

+——+  

|    1 |  

|    2 |  

|    3 |  

+——+  

3 rows in set (0.00 sec)  

  

mysql>   

 

[html]
mysql use inno Database changed mysql insert into mm select 1; Query OK,
1 row affected (0.01 sec) Records: 1 Duplicates…

admin

网站地图xml地图