MySQL InnoDB 备份与恢复

MySQL InnoDB 备份与恢复

MysqlDump

这种方式不仅适用于InnoDB,还适用于其它类型的存储引擎,如MyISAM。备份的时候将数据库备份成SQL(包含drop,create,insert等语句),恢复的时候直接导入即可。属于逻辑备份。

Copy Files拷贝文件

我们知道InnoDB底层存储的时候会将数据和元信息存在下列文件中:
ibdata*, *.ibd, *.frm, .ib_logfile,所以备份这些文件即可备份InnoDB的数据,另外别忘了将MySQL的配置文件my.cnf也一并备份起来。
如果my.cnf中开启了innodb_file_per_table那么InnoDB在存储的时候也会像MyISAM那样每一个表都会有相应的文件,你也可以只备份其中的某些文件(也就是表)。
注意copy这些files的时候,最好能确保InnoDB的所有事务都commit了。
比如你可以将MySQL暂时关闭掉,如果不能忍受一些down time的话,先不要考虑这种方式。
另外还可以先获取Table的read lock, 比如Lock Tables Customers READ.
你可以用show innodb status看看还有没有活动的事务没有commit。属于物理备份。

下面讲一下这种备份方式怎么恢复:

a. 停止任何关于这个表的写,lock tables customers write;

b. 删除这个表的空间,alter table customers discard tablespace;

c. 将你备份的.ibd文件拷贝到相应的目录下。

d. 重新建立表空间,alter table customers import tablespace;

e. 释放写锁,unlock tables customers;

ibbackup

这是一个商业化的工具,将你线上的my.cnf配置文件复制一份出来到比如说/etc/my.backup.cnf,更改里边的datadir等比如说到/data/backup,然后运行 ibbackup /etc/my.cnf /etc/my.backup.cnf, ibbackup就会讲my.cnf所指向的的数据内容备份到my.backup.cnf指向的数据目录。恢复的时候也很奇葩,因为你现在等于说是拥有了两个数据目录,所以你重新运行mysql,safe_mysqld --defaults-file=/etc/my.backup.cnf. 这种方式仅局限于你的数据库全部使用InnoDB存储引擎。

innobackup

如果你还有其它数据表用的是MyISAM,那么你可以使用innobackup,它不但会将InnoDB的相关文件备份起来,还会将MyISAM的比如MYI, MYD文件也备份起来。innobackup使用了ibbackup作为InnoDB的备份子工具。

MySQL Administrator

binary logs

需要开启log-bin, 所有的更新操作都会被写到binary file里。恢复的时候mysqlbinlog binlog_file | mysql,这种方式基本上可以用在在线备份上。属于逻辑备份。

XtraBackup

对InnoDB做数据备份的开源工具,支持在线热备,备份时不影响数据读写。属于物理备份。
项目地址https://github.com/percona/percona-xtrabackup,可以结合使用Innobackupex进行全备,xtrabackup进行增量备份。

个人觉得第一种,第二种和第六种和第七种都非常不错,各有自己的特点。第一种方式比较适合小型的数据库,由于是SQL,所以不仅可以跨存储引擎,还能跨不同的数据库,比如PostgreSQL。数据量稍大一些就可以用第二种方式了,由于是文件传输,所以效率就是文件传输的效率了。第六种方式将数据库本身与备份方式利用binlog进行解耦,既不会对在线数据库造成太大的overhead,而且因为所有的更新操作都在binlog里了,所以可以利用此数据做很多的事情。第七种方式比较特殊,结合了第三种和第四种,所以功能上比较强大,商业上可以选用。

Continue reading...

MySQL. ERROR! The server quit without updating PID file

错误日志内容大概为
130714 04:26:48 mysqld_safe Starting mysqld daemon with databases from /disk/database
130714 4:26:48 InnoDB: The InnoDB memory heap is disabled
130714 4:26:48 InnoDB: Mutexes and rw_locks use GCC atomic builtins
130714 4:26:48 InnoDB: Compressed tables use zlib 1.2.3
^G/usr/local/mysql/bin/mysqld: Can't create/write to file '/tmp/ibfvDbsy' (Errcode: 13)
130714 4:26:48 InnoDB: Error: unable to create temporary file; errno: 13
130714 4:26:48 [ERROR] Plugin 'InnoDB' init function returned error.
130714 4:26:48 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
130714 4:26:48 [ERROR] Unknown/unsupported storage engine: InnoDB
130714 4:26:48 [ERROR] Aborting
在阿里云服务器中,出现这个问题比较平常。

在后来试过的方法中,以为是data目录无法进行写入权限。
尝试过比较多方法都无效。

尝试更改tmp权限解决

# chown -R mysql:mysql /tmp/

有时候感觉sun公司的报划机制会误导我们。

Continue reading...

Centos安装no usable disk have been found

有时候硬盘不一样,比如是虚拟机下安装centos 会提示no usable disk have been found这样的错误,这时候我们需要在选择”Re-initialize All”,然后回车。
\no usable disk have been found.jpg
如果还是不行则是SCSI硬盘的问题,只需要将硬盘模式改为IDE,如是虚拟机,则将SCSI硬盘删除新建IDE硬盘即可。

Continue reading...

Win2003下Apache性能优化

Win2003下Apache性能优化
1、Apache线程数和超时设置

Apache的线程数控制文件为conf/exrtra/http-mpm.conf,需要在httpd.conf中将 Include conf/extra/httpd-mpm.conf前#去掉,以使得http-mpm.conf生效。

在Windows系统中,起作用的是Winnt mpm段,

Continue reading...

Column count of mysql.proc is wrong. Expected 20, found 16.解决方法

1558 - Column count of mysql.proc is wrong. Expected 20, found 16. Created with MySQL 50018, now running 50146. Please use mysql_upgrade to fix this error.

今天58lianmeng服务器上出现了这个不起眼的错误。

其实这个错误如果用phpmyadmin的话发现不了、
错误来源,是由于你曾经升级过数据库。
升级完后未使用mysql_upgrade升级数据结构造成的。
用Navicat For MySQL会有此错误提示。
记录一下解决方法。

mysql.proc
这个是5.1里面的系统表来的,用来记录存储过程或函数的信息.

你的数据库肯定作过升级或用不同的版本进行备份迁移恢复.

解决办法:
使用命令:mysql_upgrade 就可以解决

mysql_upgrade -u root -p123456 --datadir=D:\Database --basedir=D:\Mysql
MySQL utility for upgrading databases to new MySQL versions.

Continue reading...



about me

  • 陶之11's Blog Name:陶之11 OICQ:14779023 Site:Pao11.com

分类

快捷入口