xtrabackup 2.4.5 文档

mysql锁分为 读锁(读写都不行) 写锁(只读,不允许写入)
[root@localhost ~]# yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr bison libtool ncurses5-devel perl perl-devel perl-Digest-MD5 perl-Time-HiRes perl-DBD-MySQL libev libev-devel libgcrypt libgcrypt-devel curl curl-devel python-setuptools libarchive-devel

直接rpm -ivh 安装官网下载的rpm包,根据提示缺什么装什么,直至完成。

全量备份:
1、执行备份

[root@localhost ~]# innobackupex --user=root --password=root --databases=simon --no-lock --no-timestamp /mnt/backup/simon/full_$(date +%Y_%m_%d_%H_%M_%S)

2、删除simon库,测试

[root@localhost ~]# rm -rf /var/lib/mysql/simon/

恢复数据:
1、先关闭mysql服务
2、再处理备份数据

[root@localhost ~]# innobackupex --apply-log /mnt/backup/simon/full_2017_02_19_21_29_42/
--apply-log处理全备中的事物,未提交的回滚,已提交的写入文件

3、恢复

[root@localhost ~]# cp -R /mnt/backup/simon/full_2017_02_19_21_29_42/simon/ /var/lib/mysql/
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql/simon/

直接复制备份的simon库的文件夹到mysql数据目录,并修改权限,启动mysql。

数据恢复完成。

增量备份(只支持innodb):
1、增量备份基于全备

[root@localhost ~]# innobackupex --user=root --password=root --databases=simon --no-lock --no-timestamp /mnt/backup/simon/full_$(date +%Y_%m_%d_%H_%M_%S)

2、增量备份,目录要与全备目录路径一样,否则无法执行

[root@localhost ~]# innobackupex --user=root --password=root --databases=simon --no-lock --no-timestamp --incremental-basedir=/mnt/backup/simon/full_2017_02_19_21_29_42/ --incremental /mnt/backup/simon/increment_$(date +%Y_%m_%d_%H_%M_%S)

增量恢复:
删除simon库,模拟丢失

[root@localhost ~]# rm -rf /var/lib/mysql/simon/

关闭mysql服务

将增量备份数据合并到全备中

[root@localhost simon]# pwd
/mnt/backup/simon
[root@localhost simon]# innobackupex --apply-log --redo-only full_2017_02_19_21_29_42/
[root@localhost simon]# innobackupex --apply-log full_2017_02_19_21_29_42/ --incremntal-dir=increment_2017_02_19_22_16_10/
[root@localhost simon]# innobackupex --apply-log /mnt/backup/simon/full_2017_02_19_21_29_42/

[root@localhost ~]# cp -R /mnt/backup/simon/full_2017_02_19_21_29_42/simon/ /var/lib/mysql/
[root@localhost ~]# chown -R mysql:mysql /var/lib/mysql/simon/

启动mysql,数据恢复完成。

–apply-log –redo-only 作用,来自网络
redo-only 只对增量备份有作用,
对于全备份和增量备份(出最后一个增备外) 都需要加 redo-only ;
这个选项是 让xtrabackup跳过 rollback 阶段,只进行redo 阶段(中间的增备如果 rollback ,那增备之间可能无法衔接起来)

PS:
增量备份可以基于一个增量,再做增量,不过恢复起来比较繁琐。这里没有采用。

可看下下面资料:基于增量的增量备份及恢复

http://www.toxingwang.com/database/mysql/1539.html

http://blog.csdn.net/dbanote/article/details/13295727

评论关闭

sshpass: 用于非交互的ssh 密码验证

来源:http://blog.csdn.net/gsnumen/article/details/7293274

ssh登陆不能在命令行中指定密码,也不能以shell中随处可见的,sshpass 的出现,解决了这一问题。它允许你用 -p 参数指定明文密码,然后直接登录远程服务器。 它支持密码从命令行,文件,环境变量中读取

$> sshpass -h

Usage: sshpass [-f|-d|-p|-e] [-hV] command parameters

-f filename Take password to use from file

-d number Use number as file descriptor for getting password

-p password Provide password as argument (security unwise)

-e Password is passed as env-var “SSHPASS”

With no parameters – password will be taken from stdin

-h Show help (this screen)

-V Print version information

At most one of -f, -d, -p or -e should be used

sshpass [-f|-d|-p|-e] [-hV] command parameters 中的 command parameters 和使用交互式密码验证的使用方法相同

#从命令行方式传递密码

$> sshpass -p user_password ssh user_name@192.168..1.2

$> sshpass -p user_password scp -P22 192.168.1.2:/home/test/t .

#从文件读取密码

$> echo “user_password” > user.passwd

$> sshpass -f user.passwd ssh user_name@192.168..1.2

#从环境变量获取密码

$> export SSHPASS=”user_password”

$> sshpass -e ssh user_name@192.168..1.2

源码位置:http://sourceforge.net/projects/sshpass/

评论关闭

mysql FIND_IN_SET 用法

比如现在有个场景:
一家电子商务,在淘宝、京东、国美等平台售卖商品,商品可以同时在不同平台上卖,
现在需要查询所有在京东上出售的商品。

淘宝在数据库中用数字1表示,京东为2,国美为3

表结构如下:


SQL语句为:

SELECT * FROM `product` WHERE FIND_IN_SET(’2′,`channel`) ORDER BY `id` DESC;

FIND_IN_SET 可以理解为在所有数据中,检查每条数据所查询的条件,以逗号作为分隔符,来取数据。

SELECT * FROM `product` WHERE `id` IN (1,2);
可以理解为全部匹配。

评论关闭