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