# 备份过程中注意目录读写权限 1.使用xtrabackup备份mysql 1.1全量备份 全量备份 innobackupex --user=root --password='123456' /xtrabackup/full 恢复备份 innobackupex --apply-log /xtrabackup/full/2020-1-0 innobackupex --copy-back /xtrabackup/full/2020-1-0 1.2增量备份 首先全量备份一次 innobackupex --user=root --password='123456' /xtrabackup/ 假设全量生成的备份包为2020-1-0 第一次增量备份 innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-0/ # 基于全量的包 假设第一次增量生成的包为 2020-1-1 第二次增量备份 innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-1/ # 基于第一次增量包 假设第二次增量生成的包为 2020-1-2 第三次增量备份 innobackupex --user=root --password='123456' --incremental /xtrabackup/ --incremental-basedir=/xtrabackup/2020-1-2/ # 基于第二次增量包 假设第三次增量生成的包为 2020-1-3 先回滚全量的包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 回滚第一次增量包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-1 回滚第二次增量包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-2 回滚第三次增量包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 --incremental-dir=/xtrabackup/2020-1-3 恢复回滚好的第一次全量包 innobackupex --copy-back /xtrabackup/2020-1-0 1.3差异备份 首先进行一次完全备份 innobackupex --user=root --password='123456' /xtrabackup 假设完全备份的包是2020-1-0 进行第一次差异备份 innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-0 # 基于第一次的全备 假设第一次差异备份包是2020-1-1 进行第二次差异备份 innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备 假设第二次差异备份的包是2020-1-2 进行第三次差异备份 innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备 假设第三次差异备份的包是2020-1-3 进行第四次差异备份 innobackupex --user=root --password='123456' --incremental /xtrabackup --incremental-basedir=/xtrabackup/2020-1-1 # 还是基于第一次的全备 假设第四次差异备份的包是2020-1-4 假设恢复到第三次差异备份的数据 我们回滚时候只需要回滚完全备份包和第三次差异包备份即可 回滚全量备份包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0 回滚第三次差异备份包 innobackupex --apply-log --redo-only /xtrabackup/2020-1-0--incremental-dir=/xtrabacku/2020-1-3 恢复回滚好的第一次全量包 innobackupex --copy-back /xtrabackup/2020-1-0 2.使用mysqldump备份mysql mysqldump -uroot -p'123456' --all-databases --single-transaction --master-data=2 --flush-logs > /backup/2020-01-01-01-mysql-all.sql mysqldump -uroot -p'123456' < /backup/2020-01-01-01-mysql-all.sql 不记录恢复操作(或在my.conf中关闭log_bin) mysql> set sql_log_bin=0; mysql> source 2020-01-01-01-mysql-all.sql mysql> set sql_log_bin=1; 3.二进制日志恢复 查看二进制截取记录 cat /xtrabackup/full/2020-1-0/xtrabackup_binlog_info cat /backup/2020-01-01-01-mysql-all.sql 从记录中的截断位置之后的数据内容恢复 mysqlbinlog localhost-bin.000002 localhost-bin.000003 localhost-bin.000004 --start-position=154 | mysql -uroot -p'123456' 从记录中的截断位置之后的数据内容保存在文本中 mysqlbinlog localhost-bin.000002 localhost-bin.000003 localhost-bin.000004 --start-position=154 > binlog.txt 4.记录的导入和导出 vim /etc/my.cnf [mysqld] secure-file-priv=/backup SELECT ... INTO OUTFILE ... mysql> select * from testdb.t1 into outfile '/backup/testdb.t1.txt' 使用mysql命令导出 mysql -uroot -p'123456' -e 'select * from testdb.t2' > /backup/testdb.t2.txt mysql -uroot -p'123456' --xml -e 'select * from testdb.t2' > /backup/testdb.t2.xml mysql -uroot -p'123456' --html -e 'select * from testdb.t2' > /backup/testdb.t2.html LOAD DATA INFILE ... INTO ... mysql> load data infile '/backup/testdb.t3.txt' into table testdb.t3;