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 服务器上了。