/var/lib/mysql
逻辑备份(备份语句)
物理备份(拷贝、镜像、文件系统备份)
提供服务时备份(热备份)
服务down掉不是服务器关闭(冷备份、离线备份)(cp、tar)
systemctl stop mysql
部分备份
全部备份
增量备份
常用工具: mysqldump(逻辑备份)、 xtrabackup(物理备份)
备份/恢复时锁表
备份恢复
在线
离线
注意文件路径权限
mysqldump(逻辑备份)
进入mysql,加一个backup用户
mysql> grant select,show view,event,trigger,lock tables,process,replication client,reload on *.* to backup@'%' identified by 'QFedu123!';
修改mysqluser.db文件
[mysql]
user=root
password=QFedu123!
[mysqldump]
user=backup
password=QFedu123!
mysqldump --defaults-file=~/mysqluser.db -h 10.0.122.108 --all-databases >$(date +%FT%H_%M_%S)-dump-all.sql
//备份所有数据库
mysqldump --defaults-file=~/mysqluser.db -h10.0.122.108 --databases servers > servers.sql
//备份servers库,有创库语句,可以直接恢复
mysqldump --defaults-file=~/mysqluser.db -h10.0.122.108 servers > servers_all.sql
//备份servers库,没有创库语句,需要新建数据库恢复(数据可以恢复到其他库中)
[root@huangstts ~]# mysql -uroot -pQFedu123! serv < servers_all.sql
//数据恢复
备份多个数据库
mysqldump --defaults-file=~/mysqluser.db -h10.0.122.108 --databases servers1 servers2 servers3 > serverssss.sql
备份某个表
mysqldump --defaults-file=~/mysqluser.db -h10.0.122.108 datadb tb1 tb2 > table.sql
xtrabackup(物理备份)
xtrabackup全备
开始备份
shell> xtrabackup --backup --user=root --password='QFedu123!' --target-dir=/backup/full
停止mysql服务
systemctl stop mysql
删除mysql全部文件
rm -rf /var/lib/mysql/*
准备数据
xtrabackup --prepare --target-dir=/backup/full
复制
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/full
改权限
为什么要改权限?
数据删除完又被复制过来,当前数据是root创建,mysql需要获取数据。
chown mysql.mysql -R /var/lib/mysql
启动数据库
systemctl start mysql
增量备份
全备
xtrabackup --backup --user=root --password='QFedu123!' --target-dir=/backup/base
第一次增量备份
xtrabackup --backup --user=root --password=QFedu123! --target-dir=/backup/inc1 --incremental-basedir=/backup/base
第二次增量备份
xtrabackup --backup --user=root --password=QFedu123! --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1
准备数据------------
xtrabackup --prepare --apply-log-only --target-dir=/backup/base
xtrabackup --prepare --apply-log-only --user=root --password=QFedu123! --target-dir=/backup/base --incremental-dir=/backup/inc1
xtrabackup --prepare --user=root --password=QFedu123! --target-dir=/backup/base --incremental-dir=/backup/inc2
停止数据库的操作,删除mysql数据
systemctl stop mysqld
rm -rf /var/lib/mysql/*
恢复数据—>修改权限—>启动mysql
xtrabackup --copy-back --datadir=/var/lib/mysql --target-dir=/backup/base/
chown mysql.mysql -R /var/lib/mysql
systemctl start mysqld