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
备份所有的数据库
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
准备数据除了最后一次增量备份,其他都要跳过回滚阶段
(--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