MySQL备份

mysql -uroot -p'QFedu123@' servers -e 'drop table t1;'
在shell下删除servers数据库中的表t1

MySQL 逻辑备份 mysqldump

(备份时要锁表)

若想备份时不锁表
备份时希望转储和刷新日志到恰好在同一时刻发生,适用于 InnoDB 引擎
mysqldump --all-databases --single-transaction --flush-logs > $(date +%FT%H_%M_%S).dump_all.sql

创建一个备份用户

备份用户需要的完整权限

select
reload # 允许使用该 FLUSH 语句,告诉服务器将授权表重新加载到内存中
lock tables 锁表
show view 视图
event 事件
trigger 触发
process # 允许显示有关服务器内执行的线程的信息(即有关会话正在执行的语句的信息)
replication client # 读取二进制日志的位置信息,

mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql

查看帮助
mysqldump --help

图片.png

备份所有的数据库

mysqldump --defaults-file=/root/mysqluser.db -h 127.0.0.1 --all-databases > all.dump.sql

备份servers数据库

mysqldump --defaults-file=/root/mysqluser.db -h 127.0.0.1 servers > servers.dump.sql
只备份,不创库
--databases servers…… 可跟多个数据库,而且备份文件会自动创数据库

对比两文件

diff servers.dump.sql servers2.dump.sql

备份servers下的一个或多个表

mysqldump --defaults-file=/root/mysqluser.db -h 127.0.0.1
servers t1 t2 > dump.sql

备份时的选项

--single-transaction 保证数据一致性
-l, --lock tables 依次对正在备份的每个数据库中的所有表进行锁表
-x, --lock-all-tables 锁定所有数据库中的所有表

恢复

shell> mysql -uroot -p123456 db1 < t1.dump.sql

恢复t1表到db1数据库中

shell> mysql -uroot -p123456 < db1.dump.sql
恢复db1数据库,要求备份的文件自己创库

source备份

sql文件在当前文件夹下
进入MySQL mysql> source db1.dump.sql
恢复db1数据库,要求备份的文件自己创库

物理备份

安装

yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install -y libev
yum install https://repo.percona.com/yum/percona-release-latest.noarch.rpm
yum install percona-xtrabackup-24

全量备份

1.xtrabackup --backup --user=root --password='QWERasd1!@' --target-dir=/backups/full

准备恢复的数据

2.xtrabackup --prepare --target-dir=/backups/full
3.xtrabackup --prepare --use-memory=300M --target-dir=/backups/full

恢复

4.systemctl stop mysqld.service
5.rm -rf /var/lib/mysql/*
6.xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/full
7.chown mysql.mysql -R /var/lib/mysql
8.systemctl start mysqld.service

增量备份


基本原理

全量备份
xtrabackup --backup --user=root --password='QFedu123!' --target-dir=/backups/base
修改数据后进行第一次增量备份
xtrabackup --backup --user=root --password='QFedu123!' --target-dir=/backups/inc1 --incremental-basedir=/backups/base
修改数据后进行第二次增量备份,以上一次的备份为基础
xtrabackup --backup --user=root --password='QFedu123!' --target-dir=/backups/inc2 --incremental-basedir=/backups/inc1


图片.png

准备数据除了最后一次增量备份,其他都要跳过回滚阶段
(--apply-log-only)

准备基本备份的数据,跳过回滚阶段
xtrabackup --prepare --apply-log-only --target-dir=/backups/base
把第一次增量备份的数据合并到基础备份数据中,跳过回滚阶段
xtrabackup --prepare --apply-log-only --user=root --password='QFedu123!' --target-dir=/backups/base --incremental-dir=/backups/inc1
把第二次增量备份的数据合并到基础备份数据中
xtrabackup --prepare --user=root --password='QFedu123!' --target-dir=/backups/base --incremental-dir=/backups/inc2

systemctl stop mysqld.service
rm -rf /var/lib/mysql/*
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backups/base/
chown mysql.mysql -R /var/lib/mysql
systemctl start mysqld.service

你可能感兴趣的:(MySQL备份)