一、mysql的备份无非有下面几种方式
1、mysqldump工具
MySQL自己提供的mysqldump是把数据转换为SQL语句,这种方式的效率比较低,备份和还原的速度都很慢,而且在dump过程中为了保证数据一致性,任何数据插入和更新操作都会被挂起。
2、mysqlhotcopy工具
MySQL自己提供的mysqlhotcopy 是专门针对myisam 数据表进行备份,无法对innodb数据表备份,速度相对快些,因为是文件拷贝,而且在备份的过程中,任何数据插入和更新操作都会被挂起
3、采用Linux LVM的 snapshot 功能进行数据库分区的备份
这种方法是利用的逻辑卷的 镜像 功能对整个分区进行在线备份,这种备份数据量大,而且备份性能低下
4、准备一台从服务器,开启日志同步功能,专门做备份(master-slave方式)
这种备份方法个人认为比较好,开始日志同步功能,无论是myisam,还是innodb,都可以在7*24不影响主服务器的情况下,随心所欲的进行备份
二、Xtrabackup工具对MySQL数据库进行备份
1、Xtrabackup简介
官方网站:http://www.percona.com/
下载地址:http://www.percona.com/percona-builds/
Xtrabackup是一个对InnoDB做数据备份的工具,支持在线热备份(备份时不影响数据读写),是商业备份工具InnoDB Hotbackup的一个很好的替代品。本文测试使用的是0.8版本,与当前最新版本是0.9区别并不大。Xtrabackup有两个主要的工具:xtrabackup、innobackupex
(1)xtrabackup只能备份InnoDB和XtraDB两种数据表,而不能备份MyISAM数据表
(2)innobackupex-1.5.1则封装了xtrabackup,是一个脚本封装,所以能同时备份处理innodb和myisam,但在处理myisam时需要加一个读锁
(3)使用帮助:http://www.percona.com/docs/wiki/percona-xtrabackup:start
2、安装Xtrabackup
安装Xtrabackup有几种方法:
第一种:通过源码进行安装
第二种:通过yum来安装
[percona]
name=CentOS-$releasever – Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
gpgcheck=0
第三种:直接使用xtrabackup、innobackupex这两个二进制可执行文件即可
[root@SQL1 ~]wget http://www.percona.com/percona-builds/XtraBackup/XtraBackup-1.2/Linux/binary/i686/xtrabackup-1.2.tar.gz
[root@SQL1 ~]cp innobackupex-1.5.1 tar4ibd xtrabackup /usr/sbin
3、安装Xtrabackup
1)innobackupex工具
(1)备份操作(下列是几个例子)
####备份employess数据库(普通备份)#### [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –databases=employees /root/backup 1> process_log 2>&1 & 注意:将数据库employees备份到目录/root/backup/XXXX下 [root@SQL1 ~]# ls -l /root/backup total 4 drwxr-xr-x 3 root root 4096 Apr 13 14:16 2010-04-13_14-14-43 ####备份给定的数据库列表中的数据库中(普通备份)#### [root@SQL1 ~]# cat backup_db_name school employees [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –databases=/root/backup_db_name /root/backup 1> process_log 2>&1 & 或者 [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –databases=“school employees” /root/backup 1> process_log 2>&1 & ####备份employess数据库中的employess表(普通备份)#### [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –databases=”employees.employees” /root/backup 1> process_log 2>&1 & ####备份所有的数据库,并打包(tar方式)##### [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –stream=tar /root/backup 1> /root/backup/all_databases.tar 2> process_log & ####备份所有的数据库并压缩,并打包压缩(tar+gzip方式)#### [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –slave-info –stream=tar /root/backup 2> process_log | gzip > /root/backup/all_databases.tar.gz & |
注意:首先要先创建备份目录:/root/backup,–databases=[ db_name.tb_name | db_name ],如果不使用–databases参数的话,那么将备份所有的数据库
(2)恢复操作
(步骤:先apply log,再copy back,最后再chown -R mysql:mysql datadir)
####(普通备份)的还原操作###### [root@SQL1 ~]# ls -l /root/backup/2010-04-13_15-02-37/ total 223484 -rw-r–r– 1 root root 348 Apr 13 15:02 backup-my.cnf drwxr-xr-x 2 root root 4096 Apr 13 15:03 employees -rw-r–r– 1 root root 228589568 Apr 13 15:03 ibdata1 -rw-r–r– 1 root root 0 Apr 13 15:03 mysql-stderr -rw-r–r– 1 root root 379 Apr 13 15:03 mysql-stdout -rw-r–r– 1 root root 1 Apr 13 15:03 xtrabackup_binlog_info -rw-r–r– 1 root root 60 Apr 13 15:03 xtrabackup_checkpoints -rw-r–r– 1 root root 2048 Apr 13 15:02 xtrabackup_logfile -rw-r–r– 1 root root 53 Apr 13 15:03 xtrabackup_slave_info [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –apply-log /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –copy-back /root/backup/2010-04-13_15-02-37 [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup* ####(tar方式备份)的还原操作###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -ixvf all_databases.tar -C /root/backup/db(先解压,注意必须跟-i参数) [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db ####(tar+gzip方式备份)的还原操作###### [root@SQL1 ~]# mkdir /root/backup/db [root@SQL1 ~]# tar -izxvf all_databases.tar.gz -C /root/backup/db(先解压,注意必须跟-i参数) [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –apply-log /root/backup/db [root@SQL1 ~]# innobackupex-1.5.1 –defaults-file=/usr/local/mysql/etc/my.cnf –user=root –host=192.168.1.52 –password=XXXX –port=3306 –socket=/tmp/mysql.sock –copy-back /root/backup/db [root@SQL1 ~]# chown -R mysql:mysql /usr/local/mysql/data [root@SQL1 ~]# rm -rf /usr/local/mysql/data/xtrabackup [root@SQL1 ~]# rm -rf /root/backup/db |
其实:可以不使用copy-back操作,而是直接拷贝备份文件中的数据到datadir目录下即可
cp employees ibdata1 ib_logfile0 ib_logfile1 mysql school test /usr/local/mysql/data/ -rf && chown -R mysql:mysql /usr/local/mysql/data
如果您不关心binary log position of backup 或者all the tables are innodb,那么可以加上–no-lock参数
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
MariaDB InnoDB表空间碎片整理
从MariaDB 10.1开始,MariaDB把Facebook的碎片整理代码合并进来了,并且把所有代码都调整到InnoDB/XtraDB层去实现,因而只需要使用现成的 OPTIMIZE TABLE 命令就行。
-
不同事务隔离级别对MySQL性能的影响
在这篇文章里,我们将讨论InnoDB 事务隔离模式,还有它们与MVCC(多版本并发控制)的关系,以及它们是如何影响MySQL性能的。
-
你需要知道的MySQL开源存储引擎TokuDB
如果你还没有尝试过TokuDB,现在就是一个机会。首先我将介绍TokuDB是如何与MySQL协同工作的。
-
使用Percona Data Recovery Tool for InnoDB恢复数据
没有binlog的innodb表,delete全表以后如何恢复数据,Percona Data Recovery Tool for InnoDB可以完成这一工作,本文就给出了具体的实践方案。