使用Xtrabackup备份 MySQL 数据库
mysql的备份无非有下面几种方式:
1、mysqldump
2、mysqlhotcopy
3、采用Linux LVM的 snapshot 功能进行数据库分区的备份
4、准备一台从服务器,开启日志同步功能,专门做备份
当然,上述方法各有优缺点,简单分析下
第一种方法,mysqldump
MySQL自己提供的mysqldump是把数据转换为SQL语句,这种方式的效率比较低,备份和还原的速度都很慢,而且在dump过程中为了保证数据一致性,任何数据插入和更新操作都会被挂起。
第二种方法,mysqlhotcopy
MySQL自己提供的mysqlhotcopy 是专门针对myisam 数据表进行备份,无法对innodb数据表备份,速度相对快些,因为是文件拷贝,而且在备份的过程中,任何数据插入和更新操作都会被挂起。
第三种方法,LVM
这种方法是利用的逻辑卷的 镜像 功能对整个分区进行在线备份,这种备份数据量大,而且备份性能低下。
第四种方法,在 slave 服务器上备份
这种备份方法个人认为比较好,开始日志同步功能,无论是myisam,还是innodb,都可以在7*24不影响主服务器的情况下,随心所欲的进行备份。
以上内容仅供参考,本文主要介绍采用开源的 Xtrabackup 备份工具对innodb 数据表进行在线备份。
InnoDB 有个商业的InnoDB Hotbackup,可以对InnoDB引擎的表实现在线热备。而 percona出品的Xtrabackup,是InnoDB Hotbackup的一个开源替代品,可以在线对InnoDB/XtraDB引擎的表进行物理备份。
innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的,主要是为了方便的同时备份InnoDB和MyISAM引擎的表,并且加入了一些使用的选项,如 –slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
最新下载地址如下:
http://www.percona.com/mysql/xtrabackup/0.7/
安装过程如下:
最简单的安装方式无疑是使用RPM包,不过如果你想使用源代码方式安装的话,则会发现其安装方式有点古怪,这是因为它采用的在MySQL源代码上打补丁构建的方式。
tar zxf xtrabackup-0.7.tar.gz
cd xtrabackup-0.7
./configure
make
进行到这里时,千万别惯性使用make install,那样就会接着安装MySQL了,正确方法是接着:
cd innobase/xtrabackup/
make
make install
然后,就会在你的/usr/bin目录里安装上两个工具:xtrabackup,innobackupex-1.5.1
xtrabackup可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam。
innobackupex-1.5.1是一个脚本封装,能同时处理innodb和myisam,但在处理myisam时需要加一个读锁。
下面我们来拿一个innodb数据表进行备份及恢复,示例如下:
[root@localhost backup]# /usr/bin/innobackupex-1.5.1 --user=root --password=123456 --databases=innodb --slave-info --stream=tar /root/backup/ | gzip > /root/backup/bak_mysql.tar.gz
以下是输出内容:
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackup
prints "innobackup completed OK!".
innobackupex: Using mysql Ver 14.14 Distrib 5.1.33, for pc-linux-gnu (i686) using readline 5.1
innobackupex: Using mysql server version 5.1.33-log
innobackupex: Created backup directory /root/backup
090628 14:53:43 innobackupex: Starting mysql with options: --unbuffered --password=123456 --user=root
090628 14:53:43 innobackupex: Connected to database with mysql child process (pid=3996)
090628 14:53:47 innobackupex: Connection to database server closed
090628 14:53:47 innobackupex: Starting ibbackup with command: xtrabackup --backup --suspend-at-end --log-stream --target-dir=./
xtrabackup: suspend-at-end is enabled.
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql
innobackupex: Waiting for ibbackup (pid=4003) to suspend
innobackupex: Suspend file '/var/lib/mysql/xtrabackup_suspended'
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
xtrabackup: Stream mode.
>> log scanned up to (0 48456)
090628 14:53:49 innobackupex: Continuing after ibbackup has suspended
innobackupex: Starting to backup InnoDB tables and indexes
innobackupex: from original InnoDB data directory '/var/lib/mysql'
innobackupex: Backing up as tar stream 'ibdata1'
090628 14:53:49 innobackupex: Starting mysql with options: --unbuffered --password=123456 --user=root
090628 14:53:49 innobackupex: Connected to database with mysql child process (pid=4012)
>> log scanned up to (0 48456)
090628 14:53:53 innobackupex: Starting to lock all tables...
>> log scanned up to (0 48456)
>> log scanned up to (0 50014)
>> log scanned up to (0 50315)
090628 14:54:09 innobackupex: All tables locked and flushed to disk
090628 14:54:09 innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,
innobackupex: .TRG, .TRN, and .opt files in
innobackupex: subdirectories of '/var/lib/mysql'
innobackupex: Backing up file '/var/lib/mysql/innodb/innodb_test.frm'
innobackupex: Backing up file '/var/lib/mysql/innodb/db.opt'
090628 14:54:09 innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, and .opt files
innobackupex: Resuming ibbackup
xtrabackup: The latest check point (for incremental): '0:50119'
>> log scanned up to (0 50315)
xtrabackup: Transaction log of lsn (0 48456) to (0 50315) was copied.
090628 14:54:14 innobackupex: All tables unlocked
090628 14:54:14 innobackupex: Connection to database server closed
innobackupex: Backup created in directory '/root/backup'
innobackupex: MySQL binlog position: filename 'mysql-bin.000044', position 1052
090628 14:54:14 innobackupex: innobackup completed OK!
innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
备份完毕后,让我们看看备份了哪些东西:
注意解压缩的时候,一定的加上 -i 这个参数。
[root@localhost backup]# tar zxvfi bak_mysql.tar.gz
backup-my.cnf
ibdata1
xtrabackup_binlog_info
xtrabackup_slave_info
innodb/innodb_test.frm
innodb/db.opt
xtrabackup_logfile
xtrabackup_checkpoints
ok,有了这些信息,你就可以利用这个备份来做 slave。
恢复就很简单了,你找一个测试 mysql实例,将备份里面的 ibdata1,innodb数据表 放进去,然后再通过mysqldump进行数据的导出和导入,,视乎麻烦了一些。
详细信息可以参考wiki
http://www.percona.com/docs/wiki/percona-xtrabackup:start
使用Xtrabackup对MySQL进行热备份是非常简单的,例如我们使用Xtrabackup自带的innobackupex脚本对整个数据库进行热备份,将数据库拷贝到本地的/db_backup目录:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf /db_backup
在备份的同时,将备份文件打包:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf --stream=tar /db_backup | gzip > /db_backup/db.tar.gz
将备份文件直接通过网络备份到一台远程服务器:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf --stream=tar /db_backup | ssh dbbackup@remote_host cat > backup.tar
直接通过ssh端口,将数据库热备份到一台远程的服务器上面去。
总之Xtrabackup为MySQL带来了企业级的数据备份机制,让MySQL在大容量存储方面扫除了后顾之忧。
--------------------
http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual
http://www.187299.com/archives/1436
install xtrabackup-1.0
wget http://www.percona.com/mysql/xtrabackup/1.0/source/xtrabackup-1.0-56.rhel5.src.rpm
rpm -i xtrabackup-1.0-56.rhel5.src.rpm
cd /usr/src/redhat/SOURCES/
tar -zxvf xtrabackup-1.0.tar.gz
cd xtrabackup-1.0
./configure
make
cd innobase/xtrabackup/
make
make install
innobackupex-1.5.1 --version
/usr/bin/innobackupex-1.5.1 --help
backup database(datadir=/var/lib/mysql)
mkdir /backup/
innobackupex-1.5.1 --user=root --password=password /backup/ --stream=tar --defaults-file=/etc/my.cnf > /backup/mysqldb_back.tar
restore database(datadir=/var/lib/mysql)
/etc/init.d/mysqld stop
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
tar -ixvf /backup/mysqldb_back.tar -C /var/lib/mysql
innobackupex-1.5.1 --apply-log /var/lib/mysql --defaults-file=/etc/my.cnf
chown -R mysql:mysql /var/lib/mysql
/etc/init.d/mysqld start
可惜的是,每当你输入一次alias指令后,这个修改只在当前的Shell生效,也就是说,如果你重新开启一个 Shell,或者重新登录之后,这些更改就全消失了。怎么办?修改bash的配置文件~/.bashrc。显然,每个用户都有自己的.bashrc文件,因此每个用户都可以设定自己的个性化命令昵称。
$ vi .bashrc
添加 alias mysql='/usr/local/webserver/mysql/bin/mysql'
保存退出。
vi .bash_profile
PATH=$PATH:$HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/webserver/mysql/bin
或在/etc/profile 中的 export语句前 加入新添加的PATH路径
PATH=$PATH:/usr/local/mysql/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
注意:在修改了PATH值或任何环境变量后,都要用export将其输出,新的PATH值才能生效。
export PATH
从下一次打开 Shell 时,这些设置就生效了。要是你想在当前的Shell中就生效,执行:
$ source ~/.bashrc
--------------------------------------------------------------------------------------------------------------
mysqldump支持在线备份,不过是逻辑备份,效率比较差。
xtrabackup是开源的MySQL备份工具,物理备份,效率很不错。
下载编译好的二进制文件,解压,设置环境变量。MySQL版本为5.1.38,my.cnf里的[mysqld]里的datadir参数为datadir=/data
1.[root@DB1 bin]#wget http://www.percona.com/mysql/xtrabackup/0.9/binary/xtrabackup-0.9.tar.gz
2.[root@DB1 bin]#tar xzvf xtrabackup-0.9.tar.gz
3.[root@DB1 bin]#cd xtrabackup-0.9/bin/
4.[root@DB1 bin]#export PATH=$PATH:/root/xtrabackup-0.9/bin
备份所有数据库,备份目录为/tmp/backup/,innobackupex自动在这个目录下生成 年-月-日_时-分-秒 这类目录,目录下即为备份的文件。
01.[root@DB1 bin]# ./innobackupex-1.5.1 /tmp/backup/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.innobackupex: Backup created in directory '/tmp/backup/2009-10-09_04-35-13'
08.innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 722
09.091009 04:35:45 innobackupex: innobackup completed OK!
关闭MySQL,并删除MySQL datadir目录下的所有文件。
1.[root@DB1 bin]# service mysqld stop
2.Shutting down MySQL... [确定]
3.[root@DB1 bin]# rm -rf /data/*
生成ib_logfile文件
1.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /tmp/backup/2009-10-09_04-35-13/ --defaults-file=/etc/my.cnf
2.
3....省略N行...
4.
5.091009 04:37:11 innobackupex: innobackup completed OK!
这个命令后,/tmp/backup/2009-10-09_04-35-13/目录生成了以下两个文件。
ib_logfile0 ib_logfile1
接下来就是将整个文件夹里的内容复制到mysql datadir目录,并重新设置权限即可恢复。
01.[root@DB1 bin]# ./innobackupex-1.5.1 --copy-back /tmp/backup/2009-10-09_04-35-13/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.091009 04:40:07 innobackupex: innobackup completed OK!
08.[root@DB1 bin]# chown mysql:mysql /data/ -R
09.[root@DB1 bin]# service mysqld start
10.Starting MySQL. [确定]
看到这里大家应该可以发现,其实也可以不用–copy-back这一步,直接在MySQL的datadir目录进行恢复,看下面步骤,是不是更简单呢?
01.[root@DB1 bin]# ./innobackupex-1.5.1 /tmp/backup/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.innobackupex: Backup created in directory '/tmp/backup/2009-10-09_04-35-13'
08.innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 722
09.091009 04:35:45 innobackupex: innobackup completed OK!
10.
11.[root@DB1 bin]# cp /tmp/backup/2009-10-09_04-35-13/* /data/ -a
12.
13.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /data/ --defaults-file=/etc/my.cnf
14.
15.[root@DB1 bin]# chown mysql:mysql /data/ -R
16.[root@DB1 bin]# service mysqld start
17.Starting MySQL. [确定]
innobackupex还有一个参数可以进行打包stream,可以压缩成tar包,需要注意的是解压的时候必须要用-i来解压。
01.[root@DB1 bin]#./innobackupex-1.5.1 /tmp/backup/ --stream=tar --defaults-file=/etc/my.cnf > /tmp/backup/mysqldb_back.tar
02.[root@DB1 backup]# service mysqld stop
03.Shutting down MySQL... [确定]
04.[root@DB1 bin]# rm -rf /data/*
05.[root@DB1 bin]# tar xif /tmp/backup/mysqldb_back.tar -C /data/
06.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /data/ --defaults-file=/etc/my.cnf
07.[root@DB1 bin]# chown mysql:mysql /data/ -R
08.[root@DB1 bin]# service mysqld start
09.Starting MySQL.. [确定]
10.[root@DB1 bin]#
mysql的备份无非有下面几种方式:
1、mysqldump
2、mysqlhotcopy
3、采用Linux LVM的 snapshot 功能进行数据库分区的备份
4、准备一台从服务器,开启日志同步功能,专门做备份
当然,上述方法各有优缺点,简单分析下
第一种方法,mysqldump
MySQL自己提供的mysqldump是把数据转换为SQL语句,这种方式的效率比较低,备份和还原的速度都很慢,而且在dump过程中为了保证数据一致性,任何数据插入和更新操作都会被挂起。
第二种方法,mysqlhotcopy
MySQL自己提供的mysqlhotcopy 是专门针对myisam 数据表进行备份,无法对innodb数据表备份,速度相对快些,因为是文件拷贝,而且在备份的过程中,任何数据插入和更新操作都会被挂起。
第三种方法,LVM
这种方法是利用的逻辑卷的 镜像 功能对整个分区进行在线备份,这种备份数据量大,而且备份性能低下。
第四种方法,在 slave 服务器上备份
这种备份方法个人认为比较好,开始日志同步功能,无论是myisam,还是innodb,都可以在7*24不影响主服务器的情况下,随心所欲的进行备份。
以上内容仅供参考,本文主要介绍采用开源的 Xtrabackup 备份工具对innodb 数据表进行在线备份。
InnoDB 有个商业的InnoDB Hotbackup,可以对InnoDB引擎的表实现在线热备。而 percona出品的Xtrabackup,是InnoDB Hotbackup的一个开源替代品,可以在线对InnoDB/XtraDB引擎的表进行物理备份。
innobackupex是参考了InnoDB Hotbackup的innoback脚本修改而来的,主要是为了方便的同时备份InnoDB和MyISAM引擎的表,并且加入了一些使用的选项,如 –slave-info可以记录备份恢复后,作为slave需要的一些信息,根据这些信息,可以很方便的利用备份来重做slave。
最新下载地址如下:
http://www.percona.com/mysql/xtrabackup/0.7/
安装过程如下:
最简单的安装方式无疑是使用RPM包,不过如果你想使用源代码方式安装的话,则会发现其安装方式有点古怪,这是因为它采用的在MySQL源代码上打补丁构建的方式。
tar zxf xtrabackup-0.7.tar.gz
cd xtrabackup-0.7
./configure
make
进行到这里时,千万别惯性使用make install,那样就会接着安装MySQL了,正确方法是接着:
cd innobase/xtrabackup/
make
make install
然后,就会在你的/usr/bin目录里安装上两个工具:xtrabackup,innobackupex-1.5.1
xtrabackup可以在不加锁的情况下备份innodb数据表,不过此工具不能操作myisam。
innobackupex-1.5.1是一个脚本封装,能同时处理innodb和myisam,但在处理myisam时需要加一个读锁。
下面我们来拿一个innodb数据表进行备份及恢复,示例如下:
[root@localhost backup]# /usr/bin/innobackupex-1.5.1 --user=root --password=123456 --databases=innodb --slave-info --stream=tar /root/backup/ | gzip > /root/backup/bak_mysql.tar.gz
以下是输出内容:
InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
All Rights Reserved.
This software is published under
the GNU GENERAL PUBLIC LICENSE Version 2, June 1991.
IMPORTANT: Please check that the backup run completes successfully.
At the end of a successful backup run innobackup
prints "innobackup completed OK!".
innobackupex: Using mysql Ver 14.14 Distrib 5.1.33, for pc-linux-gnu (i686) using readline 5.1
innobackupex: Using mysql server version 5.1.33-log
innobackupex: Created backup directory /root/backup
090628 14:53:43 innobackupex: Starting mysql with options: --unbuffered --password=123456 --user=root
090628 14:53:43 innobackupex: Connected to database with mysql child process (pid=3996)
090628 14:53:47 innobackupex: Connection to database server closed
090628 14:53:47 innobackupex: Starting ibbackup with command: xtrabackup --backup --suspend-at-end --log-stream --target-dir=./
xtrabackup: suspend-at-end is enabled.
xtrabackup: uses posix_fadvise().
xtrabackup: cd to /var/lib/mysql
innobackupex: Waiting for ibbackup (pid=4003) to suspend
innobackupex: Suspend file '/var/lib/mysql/xtrabackup_suspended'
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
xtrabackup: Stream mode.
>> log scanned up to (0 48456)
090628 14:53:49 innobackupex: Continuing after ibbackup has suspended
innobackupex: Starting to backup InnoDB tables and indexes
innobackupex: from original InnoDB data directory '/var/lib/mysql'
innobackupex: Backing up as tar stream 'ibdata1'
090628 14:53:49 innobackupex: Starting mysql with options: --unbuffered --password=123456 --user=root
090628 14:53:49 innobackupex: Connected to database with mysql child process (pid=4012)
>> log scanned up to (0 48456)
090628 14:53:53 innobackupex: Starting to lock all tables...
>> log scanned up to (0 48456)
>> log scanned up to (0 50014)
>> log scanned up to (0 50315)
090628 14:54:09 innobackupex: All tables locked and flushed to disk
090628 14:54:09 innobackupex: Starting to backup .frm, .MRG, .MYD, .MYI,
innobackupex: .TRG, .TRN, and .opt files in
innobackupex: subdirectories of '/var/lib/mysql'
innobackupex: Backing up file '/var/lib/mysql/innodb/innodb_test.frm'
innobackupex: Backing up file '/var/lib/mysql/innodb/db.opt'
090628 14:54:09 innobackupex: Finished backing up .frm, .MRG, .MYD, .MYI, .TRG, .TRN, and .opt files
innobackupex: Resuming ibbackup
xtrabackup: The latest check point (for incremental): '0:50119'
>> log scanned up to (0 50315)
xtrabackup: Transaction log of lsn (0 48456) to (0 50315) was copied.
090628 14:54:14 innobackupex: All tables unlocked
090628 14:54:14 innobackupex: Connection to database server closed
innobackupex: Backup created in directory '/root/backup'
innobackupex: MySQL binlog position: filename 'mysql-bin.000044', position 1052
090628 14:54:14 innobackupex: innobackup completed OK!
innobackupex: You must use -i (--ignore-zeros) option for extraction of the tar stream.
备份完毕后,让我们看看备份了哪些东西:
注意解压缩的时候,一定的加上 -i 这个参数。
[root@localhost backup]# tar zxvfi bak_mysql.tar.gz
backup-my.cnf
ibdata1
xtrabackup_binlog_info
xtrabackup_slave_info
innodb/innodb_test.frm
innodb/db.opt
xtrabackup_logfile
xtrabackup_checkpoints
ok,有了这些信息,你就可以利用这个备份来做 slave。
恢复就很简单了,你找一个测试 mysql实例,将备份里面的 ibdata1,innodb数据表 放进去,然后再通过mysqldump进行数据的导出和导入,,视乎麻烦了一些。
详细信息可以参考wiki
http://www.percona.com/docs/wiki/percona-xtrabackup:start
使用Xtrabackup对MySQL进行热备份是非常简单的,例如我们使用Xtrabackup自带的innobackupex脚本对整个数据库进行热备份,将数据库拷贝到本地的/db_backup目录:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf /db_backup
在备份的同时,将备份文件打包:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf --stream=tar /db_backup | gzip > /db_backup/db.tar.gz
将备份文件直接通过网络备份到一台远程服务器:
C代码
innobackupex --user=root --password=password --defaults-file=/etc/my.cnf --stream=tar /db_backup | ssh dbbackup@remote_host cat > backup.tar
直接通过ssh端口,将数据库热备份到一台远程的服务器上面去。
总之Xtrabackup为MySQL带来了企业级的数据备份机制,让MySQL在大容量存储方面扫除了后顾之忧。
--------------------
http://www.percona.com/docs/wiki/percona-xtrabackup:xtrabackup_manual
http://www.187299.com/archives/1436
install xtrabackup-1.0
wget http://www.percona.com/mysql/xtrabackup/1.0/source/xtrabackup-1.0-56.rhel5.src.rpm
rpm -i xtrabackup-1.0-56.rhel5.src.rpm
cd /usr/src/redhat/SOURCES/
tar -zxvf xtrabackup-1.0.tar.gz
cd xtrabackup-1.0
./configure
make
cd innobase/xtrabackup/
make
make install
innobackupex-1.5.1 --version
/usr/bin/innobackupex-1.5.1 --help
backup database(datadir=/var/lib/mysql)
mkdir /backup/
innobackupex-1.5.1 --user=root --password=password /backup/ --stream=tar --defaults-file=/etc/my.cnf > /backup/mysqldb_back.tar
restore database(datadir=/var/lib/mysql)
/etc/init.d/mysqld stop
rm -rf /var/lib/mysql
mkdir /var/lib/mysql
tar -ixvf /backup/mysqldb_back.tar -C /var/lib/mysql
innobackupex-1.5.1 --apply-log /var/lib/mysql --defaults-file=/etc/my.cnf
chown -R mysql:mysql /var/lib/mysql
/etc/init.d/mysqld start
可惜的是,每当你输入一次alias指令后,这个修改只在当前的Shell生效,也就是说,如果你重新开启一个 Shell,或者重新登录之后,这些更改就全消失了。怎么办?修改bash的配置文件~/.bashrc。显然,每个用户都有自己的.bashrc文件,因此每个用户都可以设定自己的个性化命令昵称。
$ vi .bashrc
添加 alias mysql='/usr/local/webserver/mysql/bin/mysql'
保存退出。
vi .bash_profile
PATH=$PATH:$HOME/bin:/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/webserver/mysql/bin
或在/etc/profile 中的 export语句前 加入新添加的PATH路径
PATH=$PATH:/usr/local/mysql/bin
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC
注意:在修改了PATH值或任何环境变量后,都要用export将其输出,新的PATH值才能生效。
export PATH
从下一次打开 Shell 时,这些设置就生效了。要是你想在当前的Shell中就生效,执行:
$ source ~/.bashrc
--------------------------------------------------------------------------------------------------------------
mysqldump支持在线备份,不过是逻辑备份,效率比较差。
xtrabackup是开源的MySQL备份工具,物理备份,效率很不错。
下载编译好的二进制文件,解压,设置环境变量。MySQL版本为5.1.38,my.cnf里的[mysqld]里的datadir参数为datadir=/data
1.[root@DB1 bin]#wget http://www.percona.com/mysql/xtrabackup/0.9/binary/xtrabackup-0.9.tar.gz
2.[root@DB1 bin]#tar xzvf xtrabackup-0.9.tar.gz
3.[root@DB1 bin]#cd xtrabackup-0.9/bin/
4.[root@DB1 bin]#export PATH=$PATH:/root/xtrabackup-0.9/bin
备份所有数据库,备份目录为/tmp/backup/,innobackupex自动在这个目录下生成 年-月-日_时-分-秒 这类目录,目录下即为备份的文件。
01.[root@DB1 bin]# ./innobackupex-1.5.1 /tmp/backup/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.innobackupex: Backup created in directory '/tmp/backup/2009-10-09_04-35-13'
08.innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 722
09.091009 04:35:45 innobackupex: innobackup completed OK!
关闭MySQL,并删除MySQL datadir目录下的所有文件。
1.[root@DB1 bin]# service mysqld stop
2.Shutting down MySQL... [确定]
3.[root@DB1 bin]# rm -rf /data/*
生成ib_logfile文件
1.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /tmp/backup/2009-10-09_04-35-13/ --defaults-file=/etc/my.cnf
2.
3....省略N行...
4.
5.091009 04:37:11 innobackupex: innobackup completed OK!
这个命令后,/tmp/backup/2009-10-09_04-35-13/目录生成了以下两个文件。
ib_logfile0 ib_logfile1
接下来就是将整个文件夹里的内容复制到mysql datadir目录,并重新设置权限即可恢复。
01.[root@DB1 bin]# ./innobackupex-1.5.1 --copy-back /tmp/backup/2009-10-09_04-35-13/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.091009 04:40:07 innobackupex: innobackup completed OK!
08.[root@DB1 bin]# chown mysql:mysql /data/ -R
09.[root@DB1 bin]# service mysqld start
10.Starting MySQL. [确定]
看到这里大家应该可以发现,其实也可以不用–copy-back这一步,直接在MySQL的datadir目录进行恢复,看下面步骤,是不是更简单呢?
01.[root@DB1 bin]# ./innobackupex-1.5.1 /tmp/backup/ --defaults-file=/etc/my.cnf
02.InnoDB Backup Utility v1.5.1-xtrabackup; Copyright 2003, 2009 Innobase Oy.
03.All Rights Reserved.
04.
05....省略N行...
06.
07.innobackupex: Backup created in directory '/tmp/backup/2009-10-09_04-35-13'
08.innobackupex: MySQL binlog position: filename 'mysql-bin.000001', position 722
09.091009 04:35:45 innobackupex: innobackup completed OK!
10.
11.[root@DB1 bin]# cp /tmp/backup/2009-10-09_04-35-13/* /data/ -a
12.
13.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /data/ --defaults-file=/etc/my.cnf
14.
15.[root@DB1 bin]# chown mysql:mysql /data/ -R
16.[root@DB1 bin]# service mysqld start
17.Starting MySQL. [确定]
innobackupex还有一个参数可以进行打包stream,可以压缩成tar包,需要注意的是解压的时候必须要用-i来解压。
01.[root@DB1 bin]#./innobackupex-1.5.1 /tmp/backup/ --stream=tar --defaults-file=/etc/my.cnf > /tmp/backup/mysqldb_back.tar
02.[root@DB1 backup]# service mysqld stop
03.Shutting down MySQL... [确定]
04.[root@DB1 bin]# rm -rf /data/*
05.[root@DB1 bin]# tar xif /tmp/backup/mysqldb_back.tar -C /data/
06.[root@DB1 bin]# ./innobackupex-1.5.1 --apply-log /data/ --defaults-file=/etc/my.cnf
07.[root@DB1 bin]# chown mysql:mysql /data/ -R
08.[root@DB1 bin]# service mysqld start
09.Starting MySQL.. [确定]
10.[root@DB1 bin]#
根据status信息对M
Slave_SQL_Ru


October 27, 2009 10:32 | by 





