完全备份与恢复

1 问题

  1. 练习物理备份与恢复
  2. 练习mysqldump备份与恢复

2 方案

准备新的服务器,角色如表-1所示。

mysql数据库完全备份_数据备份

表-1

3 步骤

实现此案例需要按照如下步骤进行。

准备虚拟机MySQL51

步骤一:练习物理备份与恢复

在数据库服务器192.168.88.50 练习数据的备份

备份数据

[root@mysql50 ~]# systemctl  stop  mysqld
 [root@mysql50 ~]# mkdir /bakdir  创建备份目录
 [root@mysql50 ~]# cp -r /var/lib/mysql /bakdir/mysql.bak  拷贝数据库目录
 
 [root@mysql50 ~]# cd /var/lib/mysql 进入数据库目录
 [root@mysql50 mysql]# tar -zcf /bakdir/mysql.tar.gz  ./*  打包压缩数据源文件
 [root@mysql50 mysql]# ls /bakdir/  查看备份文件
 mysql.bak  mysql.tar.gz

把备份文件拷贝给mysql51

[root@mysql50 ~]# scp -r /bakdir/mysql.bak root@192.168.88.51:/root/
 [root@mysql50 ~]# scp /bakdir/mysql.tar.gz root@192.168.88.51:/root/

在MySQL51主机恢复数据

[root@mysql51 ~]# systemctl  stop  mysqld  停止服务
 [root@mysql51 ~]# rm  -rf  /var/lib/mysql/* 清空数据库目录
 [root@mysql51 ~]# tar -xf /root/mysql.tar.gz  -C /var/lib/mysql/  释放压缩包
 [root@mysql51 ~]# chown -R mysql:mysql /var/lib/mysql 修改所有者和组用户
 [root@mysql51 ~]# systemctl  start mysqld  启动服务
 [root@mysql51 ~]# mysql -uroot -pNSD2023...a  连接服务查看数据
  mysql> show databases;
 +--------------------+
 | Database           |
 +--------------------+
 | GAMEDB             |
 | db1                |
 | home               |
 | information_schema |
 | mysql              |
 | performance_schema |
 | studb              |
 | sys                |
 | tarena             |
 | 学生库             |
 +--------------------+
 10 rows in set (0.00 sec)

也可使用cp拷贝的备份文件恢复数据

[root@mysql51 ~]# systemctl  stop  mysqld
 [root@mysql51 ~]# rm -rf /var/lib/mysql/*
 [root@mysql51 ~]# cp -r /bakdir/mysql.bak/* /var/lib/mysql/
 [root@mysql51 ~]# chown  -R mysql:mysql /var/lib/mysql
 [root@mysql51 ~]# systemctl  start mysqld
 [root@mysql51 ~]# mysql -uroot -pNSD2023...a

步骤二:练习mysqldump备份与恢复

//备份1张表

[root@mysql50 ~]# mysqldump -uroot -pNSD2023...a  tarena salary > /bakdir/tarena_salary.sql
 mysqldump: [Warning] Using a password on the command line interface can be insecure.

//备份多张表

[root@mysql50 ~]# mysqldump -uroot -pNSD2023...a  tarena employees departments > /bakdir/tarena_employees_deparments.sql

//备份1个库

[root@mysql50 ~]# mysqldump -uroot -pNSD2023...a  -B tarena > /bakdir/tarena.sql

//备份多个库

[root@mysql50 ~]# mysqldump -uroot -pNSD2023...a  -B studb db1 > /bakdir/studb_db1.sql

//备份所有库

[root@mysql50 ~]# mysqldump -uroot -pNSD2023...a  -A  > /bakdir/allbak.sql

查看备份文件

[root@mysql50 ~]# ls  /bakdir/*.sql

把备份文件拷贝给mysql51

[root@mysql50 ~]# scp  /bakdir/*.sql  root@192.168.88.51:/root/

在mysql51主机连接服务 删除库

[root@mysql51 ~]# mysql -uroot -pNSD2023...a    连接数据库
 mysql> drop  database tarena;  删除库
 mysql> exit

//恢复数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a < /root/tarena.sql

//登陆查看数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a 
 mysql> use tarena; //进库
 mysql> show tables; //看表
 +------------------+
 | Tables_in_tarena |
 +------------------+
 | departments      |
 | employees        |
 | salary           |
 | stu4             |
 | user             |
 | wage_grade       |
 +------------------+
 6 rows in set (0.00 sec)

//删除表记录

mysql> delete from salary; 
 mysql> exit

//使用备份文件恢复数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a  tarena < /root/tarena_salary.sql

//登陆查看数据

[root@mysql51 ~]# mysql -uroot -pNSD2023...a 
 mysql> select count(*) from tarena.salary; //查看行数
 +----------+
 | count(*) |
 +----------+
 |     8055 |
 +----------+
 1 row in set (0.00 sec)

分析:

Mysqldump 备份和恢复数据时会锁表,锁表期间无法对表做写访问,mysqldump适合备份数据量比较小的数据或在数据库服务器访问量少的时候备份。