MySQL备份和还原

通过系统命令进行全局冷备份

#1. 停止服务
systemctl stop mariadb

#2. 打包压缩数据库备份
tar Jcvf all.bak.xz /var/lib/mysql/

#3. 打包压缩二进制日志文件
tar Jcvf logbin.bak.xz /data/logbin/

#4. 创建文件夹备份数据库配置文件
mkdir db_backup
cp /etc/my.cnf db_backup

mysqldump备份工具

Scenario I

备份数据库

mysqldump -A --master-data=2 > /data/all.sql
mysql -e 'show master logs;'
+---------------------+-----------+
| Log_name            | File_size |
+---------------------+-----------+
| mysql-logbin.000001 |      7655 |
+---------------------+-----------+

恢复备份

  1. 阻止用户访问
  2. 停止二进制日志生成
MariaDB [(none)]> set sql_log_bin=off;

3.准备二进制增量文件

  • 查看备份文件 /data/all.sql 确定开始的二进制日志文件和开始位置
  • 备份时的二进制日志文件是mysql.000001,位置是7655
CHANGE MASTER TO MASTER_LOG_FILE='mysql.000001', MASTER_LOG_POS=7655;

MariaDB [(none)]> show master logs;
+--------------+-----------+
| Log_name     | File_size |
+--------------+-----------+
| mysql.000001 |      7674 |
| mysql.000002 |     30334 |
| mysql.000003 |   1038814 |
| mysql.000004 |       245 |
+--------------+-----------+
  • 当前的二进制日志文件是mysql.000003
  • 即生成增量的二进制文件:
[root@80_11 data]# mysqlbinlog  --start-position=7655 mysql.000001 > /data/inc.sql
[root@80_11 data]# mysqlbinlog mysql.000002 >> /data/inc.sql
[root@80_11 data]# mysqlbinlog mysql.000003 >> /data/inc.sql
  1. 还原
## 恢复备份
MariaDB [test]> source /data/all.sql
## 恢复增量
MariaDB [test]> source /data/inc.sql
  1. 恢复二进制日志
set sql_log_bin=on;
  1. 恢复用户访问

Scenario II

image.png

备份

[root@80_11 data]# mysqldump -A --master-data=2 > /data/all_`date +%F`.sql
[root@80_11 data]# mysql -e "show master logs;"
+--------------+-----------+
| Log_name     | File_size |
+--------------+-----------+
| mysql.000001 |      7674 |
| mysql.000002 |     30334 |
| mysql.000003 |   1038814 |
| mysql.000004 |       245 |
+--------------+-----------+
CHANGE MASTER TO MASTER_LOG_FILE='mysql.000004', MASTER_LOG_POS=245;

模拟误操作

MariaDB [hellodb]> insert students(name,age) values('a',29);
MariaDB [hellodb]> insert students(name,age) values('b',39);
MariaDB [hellodb]> drop table students;
MariaDB [hellodb]> insert teachers(name,age) values('c',45);
MariaDB [hellodb]> insert teachers(name,age) values('d',88);

恢复

  1. 阻止用户访问
  2. 确定恢复二进制日志
    从 mysql.000004的245到mysql.000004的1325
MariaDB [hellodb]> flush logs;
MariaDB [hellodb]> show master logs;
+--------------+-----------+
| Log_name     | File_size |
+--------------+-----------+
| mysql.000001 |      7674 |
| mysql.000002 |     30334 |
| mysql.000003 |   1038814 |
| mysql.000004 |      1325 |
| mysql.000005 |       245 |
+--------------+-----------+
  1. 生成二进制日志增量文件
[root@80_11 data]# mysqlbinlog --start-position=245 /data/mysql.000004 > /data/inc.sql
  1. vim /data/inc.sql
    删除inc.sql中DROP TABLE命令
  2. 清空数据库,重启mysql,关闭二进制日志
[root@80_11 ~]# rm -rf /var/lib/mysql/*
[root@80_11 ~]# systemctl restart mariadb
MariaDB [(none)]> set sql_log_bin=off;
  1. 恢复数据库
MariaDB [test]> source /data/all_2020-09-19.sql
MariaDB [hellodb]> source /data/inc.sql

mysqldump 选项

# 备份同时生成新的日志
mysqldump -F -A --single-transaction --master-data=2 > /data/all`date +F%`.sql

# 清除已备份的日志
MariaDB [hellodb]> purge binary logs to 'mysql.000009';
# 清除日志从头计数
MariaDB [hellodb]> reset master;

建议的备份命令

mysqldump –uroot –A –F –E –R --single-transaction --master-data=1 --flush-privileges --triggers --default-character-set=utf8mb4 --hex-blob > $BACKUP/fullbak_$BACKUP_TIME.sql 

分库备份压缩

for db in `mysql -e "show databases;" | grep -Ev '^(information_schema|performance_schema|Database)$'`; do mysqldump -B $db --single-transaction --master-data=2 | gzip > /data/$db.sql.gz; done

xtrabackup

完全备份和还原

  1. 备份
    [root@80_11 ~]# xtrabackup --backup --target-dir=/backup

  2. 在目标主机还原

# 1. 预准备,确保数据一致,提交完成的事务,回滚未完成的事务
[root@80_12 data]# xtrabackup --prepare --target-dir=/data/backup/
# 2. 复制到数据库目录(数据库目录为空,mysql不能启动)
xtrabackup --copy-back --target-dir=/data/backup
# 3. 还原属性
[root@80_12 data]# chown -R mysql.mysql mysql
# 4. 启动服务
systemctl restart mariadb

完全、增量备份及还原

  1. 备份
#1 完全备份
xtrabackup --backup --target-dir=/backup/base
#2 第一次修改数据
MariaDB [hellodb]> insert students(name,age) values('lisi',40);
MariaDB [hellodb]> delete from students where name='a';
#3 第一次增量备份
xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base/
#4 第二次修改数据
delete from teachers where tid=6;
insert teachers(name,age) values('wangermazi',56);
#5 第二次增量
xtrabackup --backup --target-dir=/backup/inc2 --incremental-basedir=/backup/inc1/
#6 复制到目标主机
scp -r /backup/ 192.168.80.12:/
#7 备份生成的三个目录
[root@80_11 ~]# tree -d /backup
/backup
├── base
│   ├── hellodb
│   ├── mysql
│   ├── performance_schema
│   └── test
├── inc1
│   ├── hellodb
│   ├── mysql
│   ├── performance_schema
│   └── test
└── inc2
    ├── hellodb
    ├── mysql
    ├── performance_schema
    └── test

  1. 还原
#1 预准备完成备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base/
#2 合并第一次增量备份到完全备份
xtrabackup --prepare --apply-log-only --target-dir=/backup/base/ --incremental-dir=/backup/inc1
#3 合并第二次增量备份到完全备份
xtrabackup --prepare --target-dir=/backup/base/ --incremental-dri=/backup/inc2
#4 复制到数据库目录(数据库目录为空,mysql不能启动)
xtrabackup --copy-back --target-dir=/backup/base
#5 还原属性
chown -R mysql.mysql /data/mysql/
#6 启动服务
systemctl start mariadb
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343