mysql备份相关

Mydumper

安装mydumper

yum -y install glib2-devel zlib-devel pcre-devel cmake mysql-devel
wget https://launchpad.net/mydumper/0.9/0.9.1/+download/mydumper-0.9.1.tar.gz  
tar zxvf mydumper-0.9.1.tar.gz;cd mydumper-0.9.1
cmake . && make && make install
如果报找不到mysql的错,找到mysql_config 这个文件然后软连接到
ln -s  /usr/bin/mysql_config /usr/local/mysql/bin/mysql_config
或者指定对应的变量  
cmake . -DMYSQL_INCLUDE_DIR=对应安装目录中的include文件夹
which mydumper #若报库文件缺少,装完数据库后可将数据库目录下库文件软连或者复制到/usr/lib64目录下即可,若安装异常可确认zlib是否安装了多个。

备份用户授权

GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, PROCESS,SHOW VIEW ON *.* TO 'voole_back'@'localhost' IDENTIFIED BY 'voole_back'

进行备份

mydumper -u $user -p $pass -B dianzanpingfen  -c -o $BACK_DIR -t 10 #dianzanpingfen为需要备份的数据库 
mydumper -u $user -p $pass --trx-consistency-only --regex '^(?!(mysql|test|ptcheck|performance_schema))'  -c -o $BACK_DIR -t 10 #dianzanpingfen 为需要备份的数据库 --regex是一个正则,里边包括排除的库

-B, --database              要备份的数据库,不指定则备份所有库
-T, --tables-list           需要备份的表,名字用逗号隔开
-o, --outputdir             备份文件输出的目录
-c, --compress              压缩输出文件
-e, --build-empty-files     如果表数据是空,还是产生一个空文件(默认无数据则只有表结构文件)
-x, --regex                 是同正则表达式匹配 'db.table'
-i, --ignore-engines        忽略的存储引擎,用都厚分割
-h, --host                  连接的主机名
-u, --user                  备份所使用的用户
-p, --password              密码
-P, --port                  端口
-S, --socket                使用socket通信时的socket文件
-t, --threads               开启的备份线程数,默认是4
-C, --compress-protocol     压缩与mysql通信的数据

进行还原

myloader -d $BACK_DIR -o -u root -p 'mysql*()' -t 10  #还原,注意若mysql库也还原,请先将原库mysql库提前备份,否则将覆盖
备份文件需要找寻的数据同步点可查看备份文件夹内‘metadata’文件

Xtrabackup

安装xtraback

yum -y install perl-DBD-mysql perl-DBI percona-xtrabackup-22 qpress
yum -y install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm

给用户授权

GRANT SELECT, RELOAD, FILE, SUPER, LOCK TABLES, REPLICATION SLAVE, REPLICATION CLIENT, PROCESS,SHOW VIEW ON *.* TO 'voole_back'@'localhost' IDENTIFIED BY 'voole_back'
flush privileges

备份

参数
    --parallel=2 制定多线程备份
    --no-timestamp 不生成时间戳目录,而由自己指定目录
全量备份(备份完成后可以对整个文件夹做压缩)
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password='voole_back' --slave-info --no-timestamp /opt/mysql_bak/base_backup
增量备份1
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password=voole_back  --incremental-basedir=/opt/mysql_bak/base_backup --incremental /opt/mysql_bak/incremental/incre1
增量备份2
    /usr/bin/innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --user=voole_back --password=voole_back  --incremental-basedir=/opt/mysql_bak/incremental/incre1 --incremental /opt/mysql_bak/incremental/incre2

还原

解压缩(到备份目录里)
    for i in `find . -iname "*.qp"`; do qpress -d $i  $(dirname $i) && rm -f $i; done
全量恢复
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --redo-only --use-memory=1G --user=voole_back  --password=voole_back  /opt/mysql_bak/base_backup
增量恢复1
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --redo-only  --use-memory=1G  --user=my_back --password=mysql   /opt/mysql_bak/base_backup --incremental-dir=/opt/mysql_bak/incremental/incre1 
增量恢复2
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log  --redo-only --use-memory=1G  --user=my_back --password=mysql   /opt/mysql_bak/base_backup --incremental-dir=/opt/mysql_bak/incremental/incre2
最后恢复
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --apply-log --use-memory=1G --user=voole_back  --password=voole_back  /opt/mysql_bak/base_backup
最后还原
    innobackupex --defaults-file=/opt/mysql56/etc/my.cnf --copy-back  --user=voole_back --password=voole_back /opt/mysql_bak/base_backup
更改还原后数据文件属主属组(具体需要更改数据库的文件夹视情况而定)
    chown -R mysql.mysql var redolog undolog

mysqldump

常用语法

mysqldump [OPTIONS] database [table1] [table2]    备份某个数据库的某些表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2]    备份备份多个数据库
mysqldump [OPTIONS] --all-databases [OPTIONS]    备份所有数据库

常用参数

-u,--user=name    备份用户名
-p,--password[=name]    备份密码
--single-transaction     在一个事务中执行备份,InnoDB中使用,保持备份数据一致,需确保没有其他DDL语句执行,因为事务并不隔离DDL操作。
-l,--lock-tables    在非事务型数据库备份,进行锁表来保持备份数据一致性。于--single-transaction是互斥的,不能同时使用,如果混合引擎,则只能使用锁表
-x,--lock-all-tables    锁定所有的表,保证所有数据库下所有需要备份的表都是一致的,--lock-tables只会锁定一个db下的所有表,保证单个数据库的备份数据是一致的。
--master-data=[1/2]    值为1时,备份文件中只记录了change master 语句,值为2时,change master 以注释的形式出现。当制定了此参数时,而未指定--single-transaction,则会自动使用--lock-all-tables。
-R,--routines    备份存储过程
--triggers    备份触发器
-E,--events    备份调度事件
--hex-blob    对数据库中存在的不可读类型,备份为十六进制。
--tab=path    在制定路径下,生成两个文件,一个为表结构.sql,一个为表数据.txt,数据文件中用tab隔开便于阅读。
-w,--where='过滤条件'    单表导出时,指定条件。

备份用户授权

GRANT SELECT,RELOAD,LOCK TABLES,REPLICATION CLIENT,SHOW VIEW,PROCESS ON *.* to backup@'localhost' IDENTIFIED BY 'mysql*()'

备份实例

mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events mc_orderdb > mc_orderdb.sql    备份mc_orderdb数据库
mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events mc_orderdb order_master > order_master.sql    备份mc_orderdb 数据库中的order_master表
mysqldump -ubackup -p --master-data=1 --single-transaction --routines --triggers --events --all-databases > mc.sql 备份所有的数据库,此备份的change master 不会被注释。
--tab 备份数据库 mc_orderdb
    1、需要mysql对目录有写权限
    2、用户需要写文件权限 grant file on *.* to backup@'localhost';
    3、mysqldump -ubackup -p --master-data=2 --single-transaction --routines --triggers --events --tab="/tmp/db_backup/mc_orderdb" mc_orderdb
--where 备份数据库 mc_orderdb中的order_master表的一部分数据 
    1、mysqldump -ubackup -p --master-data=2 --single-transaction --where "order_id>1000 and order_id<1050" mc_orderdb order_master > order_master_1000.sql

如何回复mysqldump备份的数据库

mysql -u -p dbname < backup.sql
mysql> source /tmp/backup.sql
恢复指定--tab的备份数据
    mysql > \. /tmp/mc_orderdb/region_info.sql
    mysql > load data infile '/tmp/mc_orderdb/region_info.txt' into table region_info;

如何进行指定时间点的恢复

1、先决条件
    具有指定时间点前的一个全备
    具有自上次全备后到指定时间点的所有二进制日志
2、恢复全备,查看全备的最后的点,此处为84882
3、查看对应的binlog日志,找到需要恢复的时间点。
    mysqlbinlog --base64-output=decode-rows -vv --start-position=84882 --database=mc_orderdb mysql-bin.000011 | grep -B3 DELETE
    查找位置为84882后的,数据库为mc_orderdb的,删除语句,然后找到需要恢复的时间点,此处为169348
4、将时间点中间的数据写入到sql文件中
    mysqlbinlog --start-position=84882 --stop-position=169348 --database=mc_orderdb mysql-bin.000011 > mc_order_diff.sql
5、应用上一步得到的sql文件
    mysql -uroot -p mc_orderdb < mc_order_diff.sql

实时二进制日志备份

1、创建帐号
    grant replication slave on *.* to 'repl'@'localhost' identified by '123456';
2、创建目录
    mkdir binlog_bak;cd binlog_bak
3、实时进行二进制日志备份,其实就是开启了一个IO线程,和slave一样。
    mysqlbinlog --raw --read-from-remote-server --stop-never --host localhost --port 3306 -urepl -p123456 mysql-bin.000010

你可能感兴趣的:(mysql备份相关)