MySql备份·完全备份mysqldump
2023-02-05 本文已影响0人
技术老男孩
一、备份相关概念:
- 备份分为:完全备份、增量备份、差异备份
- 完全备份策略:可以备份一台数据库服务器上的所有数据、也可以备份一个数据库下所有数据、还可以备份一张表里的所有数据。
- 工作中一般的备份策略:完全备份+增量备份、完全备份+差异备份
- 实现方式:一般会通过计划任务进行实现备份功能
二、完全备份说明:
- 有二种方式进行完全备份分别是:物理方式(冷备)、逻辑方式(热备)
- 物理方式(冷备):需要断开数据库服务,适合线下数据库服务器
- 逻辑方式(热备):1不需要断开数据库服务,适合线上数据库服务器,但缺点是:在备份数据和恢复数据的时候会锁表、备份恢复时,只能把数据恢复到备份时刻的数据。
三、语法格式:
mysqldump 备份数据格式
mysqldump -uroot -p密码 备份语句 > /目录名/备份文件名.sql
- 备份语句格式:
库名 表名
:备份一张的所有数据
库名 表名1 表名2
:备份多张表的所有数据
-B 库名
:备份1个库的所数据
-B 库名1 库名2
:备份多个库的所数据
-A 或 --all-databases
:备份服务器的所有数据mysql 恢复数据格式
mysql -uroot -p密码 [库名] < /目录名/备份文件名.sql
说明:使用表的备份文件恢复数据时必须写库名
四、完全备份示例:
物理方式备份:
- 备份数据
# 必须先停止mysql服务器
[root@host50 ~]# systemctl stop mysqld
# 创建备份文件夹
[root@host50 ~]# mkdir /bakdir
# 备份数据方式一:拷贝数据库目录
[root@host50 ~]# cp -rp /var/lib/mysql /bakdir/mysql.bak
# 备份数据方式二:打包压缩数据库目录下文件
[root@host50 ~]# cd /var/lib/mysql
[root@host50 ~]# tar -zcf /bakdir/mysql.tar.gz ./*
- 查看备份文件,并模拟数据丢失
[root@host50 ~]# ls /bakdir/
mysql.bak mysql.tar.gz
# 模拟数据丢失
[root@host50 ~]# rm -rf /var/lib/mysql/*
- 恢复数据方式一:
# 文件拷贝回数据库目录
[root@host50 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
# 修改属主属组为mysql
[root@host50 ~]# chown -R mysql:mysql /var/lib/mysql
# 重新启动mysql服务
[root@host50 ~]# systemctl start mysqld
# 登录mysql验证
[root@host50 ~]# mysql -uroot -p123qqq...A
mysql> show databases;
- 恢复数据方式二:
# 解压数据至mysql目录下
[root@host50 ~]#tar -zxf /bakdir/mysql.tar.gz
-C /var/lib/mysql
# 重新启动mysql服务
[root@host50 ~]#systemctl start mysqld
# 登录mysql验证
[root@host50 ~]# mysql -uroot -p123qqq...A
mysql> show databases;
逻辑方式备份:
- 备份数据
# 备份tarena库salary表的所有数据
[root@host50 ~]# mysqldump -uroot -p密码 tarena salary > /bakdir/tarena_salary.sql
# 备份tarena库所有数据
[root@host50 ~]# mysqldump -uroot -p密码 -B tarena > /bakdir/tarena.sql
# 备份tarena库和 db1库的所有数据
[root@host50 ~]# mysqldump -uroot -p密码 -B db1 tarena > /bakdir/twodb.sql
# 备份所有数据
[root@host50 ~]# mysqldump -uroot -p密码 -A > /bakdir/allbak.sql
- 查看备份文件
[root@host50 ~]# ls /bakdir/
allbak.sql tarena.sql tarena_salary.sql
mysql.bak mysql.tar.gz twodb.sql
- 恢复表数据
# 模拟数据丢失,删除表数据
mysql> delete from tarena.salary;
mysql> exit
# 导入备份恢复数据
[root@host50 ~]# mysql -uroot -p密码 tarena < /bakdir/ tarena_salary.sql
# 查看表记录
[root@host50 ~]# mysql -uroot -p密码
Mysql> select count(*) from tarena.salary;
...
- 恢复库数据
# 使用库的备份文件恢复数据
mysql> drop database tarena;
mysql> exit;
# 使用库的备份文件恢复数据 不需要写库名
[root@host50 ~]# mysql -uroot -p密码 < /bakdir/tarena.sql
# 管理员登陆查看数据
[root@host50 ~]# mysql -uroot -p密码
mysql> show databases;
...
mysql> use tarena;
...
mysql> show tables;
...