xtrabackup 工具来进行物理备份。mysqldump。逻辑备份就是备份 SQL 语句,在恢复的时候执行备份的 SQL 语句实现数据库数据的重现。本篇博文就是用这种方式进行迁移。mysqldump 是 MySQL 提供的一个非常有用的数据库备份工具。
比如说,我想把《瑞吉外卖》项目的数据库 reggie 备份,就适合这种情况:

mysqldump 命令执行时,可以将数据库备份成一个文本文件,该文件中实际上包含多个 CREATE 和 INSERT 语句,使用这些语句可以重新创建表和插入数据。其备份过程主要分成两步:
CREATE 语句;INSERT 语句。基本语法:
mysqldump -u 用户名称 -H 主机名称 -p密码 待备份的数据库名称[tbname, [tbname...]]> 备份文件名称.sql
【说明】
- 备份的文件并非一定要求后缀名为
.sql,例如后缀名为.txt的文件也是可以的。
举例:我在 Windows 系统下的 MySQL 使用 root 用户备份 reggie 数据库:
打开 Windows 的 cmd 命令行:
-- 备份文件存储在当前目录下
mysqldump -uroot -p你的MySQL密码 reggie>reggie.sql
-- 备份到具体的目录下
mysqldump -uroot -p你的MySQL密码 reggie > G:\MySQL-backup\reggie.sql
备份完成,在对应目录下可以看到 SQL 文件:

使用 mysqldump 命令将数据库中的数据备份成一个文本文件 (xxx.sql) 。需要恢复时,可以使用 MySQL 命令来恢复备份的数据。
MySQL 命令可以执行备份文件中的 CREATE 语句和 INSERT 语句。通过CREATE 语句来创建数据库和表。通过 INSERT 语句来插入备份的数据。
基本语法:
mysql -u root -p [dbname] < backup.sql
其中,dbname 参数表示数据库名称。该参数是可选参数,可以指定数据库名,也可以不指定。指定数据库名时,表示还原该数据库下的表。此时需要确保 MySQL 服务器中已经创建了该名的数据库。不指定数据库名时,表示还原文件中所有的数据库。此时 SQL 文件中包含有 CREATE DATABASE 语句,不需要 MySQL 服务器中已存在这些数据库。
使用 root 用户,将之前举例中在 Windows 下备份的 reggie.sql 文件中的备份导入到 Linux 服务器上的 MySQL 数据库中。步骤如下:
在 Linux 服务器上的/var/lib/mysql 目录下创建文件夹 backup 存放 MySQL 的备份文件:
mkdir /var/lib/mysql/backup

然后把 Windows 上的 reggie.sql 文件上传至 Linux 服务器上的 /var/lib/mysql/backup 目录下。



如果备份文件中包含了创建数据库的语句,则恢复的时候不需要指定数据库名称,如下所示:
mysql -uroot -p < reggie.sql
否则需要指定数据库名称,如下所示:
mysql -uroot -p reggie < reggie.sql
因此我们打开 reggie.sql 文件查看:
发现没有包含创建数据库的语句,因此我们下一步是先进入 Linux 服务器上的 MySQL 数据库来创建对于的数据库。
在 Linux 命令行窗口中输入下面语句来进入 MySQL:
mysql -uroot -p你的密码

创建瑞吉外卖的数据库 reggie :
CREATE DATABASE IF NOT EXISTS reggie CHARACTER SET 'utf8';

查询所有的数据库:
SHOW DATABASES;

接着,我们退出 MySQL :
QUIT

进入 /var/lib/mysql/backup/ 目录下:
cd /var/lib/mysql/backup/
然后,我们就可以开始逻辑恢复数据库了:
mysql -uroot -p你的密码 reggie < reggie.sql

再次进入 MySQL :
mysql -uroot -p你的密码

进入 reggie 数据库:
USE reggie;
查看 reggie 数据库中的数据表:
SHOW tables;
随便查看一个数据库表:
SELECT * FROM user;
数据全部都对,说明 reggie 数据库中的所有数据都成功迁移到 Linux 服务器上了。