MySQL知识(二十二)——数据备份、还原与迁移

1 数据备份

  某些意外的情况可能导致数据库的丢失,因此应该定期地备份数据库。

首先创建测试使用的数据和各个表:

CREATE DATABASE booksDB;
use booksDB;

CREATE TABLE books
(
  bk_id  INT NOT NULL PRIMARY KEY,
  bk_title VARCHAR(50) NOT NULL,
  copyright YEAR NOT NULL
);
INSERT INTO books
VALUES (11078, 'Learning MySQL', 2010),
(11033, 'Study Html', 2011),
(11035, 'How to use php', 2003),
(11072, 'Teach youself javascript', 2005),
(11028, 'Learing C++', 2005),
(11069, 'MySQL professional', 2009),
(11026, 'Guide to MySQL 5.5', 2008),
(11041, 'Inside VC++', 2011);

CREATE TABLE authors
(
  auth_id     INT NOT NULL PRIMARY KEY,
  auth_name  VARCHAR(20),
 auth_gender CHAR(1)
);
INSERT INTO authors  
VALUES (1001, 'WriterX' ,'f'),
(1002, 'WriterA' ,'f'),
(1003, 'WriterB' ,'m'),
(1004, 'WriterC' ,'f'),
(1011, 'WriterD' ,'f'),
(1012, 'WriterE' ,'m'),
(1013, 'WriterF' ,'m'),
(1014, 'WriterG' ,'f'),
(1015, 'WriterH' ,'f');

CREATE TABLE authorbook
(
  auth_id  INT NOT NULL,
  bk_id   INT NOT NULL,
  PRIMARY KEY (auth_id, bk_id),
  FOREIGN KEY (auth_id) REFERENCES authors (auth_id),
  FOREIGN KEY (bk_id) REFERENCES books (bk_id)
);

INSERT INTO authorbook
VALUES (1001, 11033), (1002, 11035), (1003, 11072), (1004, 11028),
(1011, 11078), (1012, 11026), (1012, 11041), (1014, 11069);

1.1 使用mysqldump命令备份

  mysqldump命令执行时,可以将数据库备份成一个文本文件,该文件包含了多个CREATE和INSERT语句,可以使用这些语句重新创建和插入数据。

mysqldump - u user -h host -ppassword dbname [tbname[,tbname...]]>filename.sql

  右箭头符号”>”表示将备份数据写入备份文件;filename.sql为备份文件的名称。

1.1.1 备份单个数据库中所有表

  例如,备份booksdb数据库,打开命令行输入窗口,输入

C:\Users\asus>mysqldump -u root -p booksdb > E:\backup\booksdb_20160229.sql
Enter password: ****

1.1.2 备份数据库中某个表

  例如,备份booksdb数据库中的books表,打开命令行输入窗口,输入

C:\Users\asus>mysqldump -u root -p booksdb books > E:\backup\booksdb_books_20160229.sql

1.1.3 备份多个数据库

  需要使用- -databases参数;多个数据库名称之间用空格隔开;

mysqldump -u user -h host -p --databases [dbname [dbname]...]>filename.sql

  例如,booksdb和test数据库:

mysqldump -u root -p --databases  booksDB test> E:\backup\books_testDB_20160229.sql

  另外,可以使用- -all-databases参数指定备份所有数据库:

mysqldump  -u root -p --all-databases > E:\backup\alldbinMySQL.sql

1.2 直接复制整个数据库目录

  因为MySQL表保存为文件方式,所以可以复制MySQL数据库的存储目录下的data文件夹进行备份。
  此种方法简单,但不是最好的。因为对InnoDB存储引擎的表不适用,并且不同版本的MySQL可能不兼容。

1.3 使用mysqlhotcopy工具快速备份

  备份数据库或单个表的最快途径,但只能运行在数据库目录所在的机器上,并且只能备份MyISAM类型的表。

mysqlhotcopy db_name_1,...db_name_n /path/to/new_directory

  例如,备份test数据库到/usr/backup目录下:

mysqlhotcopy  -u root -p test /usr/backup

2 数据还原

2.1 使用mysql命令还原

  对已经备份的包含CREATE、INSERT语句的文本文件,可以使用mysql命令导入到数据库中。

mysql -u user -p [dbname] < filename.sql

  dbname是数据库名,如果filename.sql文件为mysqldump工具创建的包含创建数据库语句的文件,执行的时候不需要指定数据库名。

例如:(必须现在MySQL服务器中创建booksDB数据库)

mysql -u root-p booksDB < E:\backup\booksdb_20160229.sql 

  如果已经登录MySQL服务器,可以使用source命令导入sql文件,例如:
注意,在命令行窗口的目录是用反斜杠”\”;而在MySQL服务器时,目录是用斜杠”/”

mysql> use booksdb;
Database changed
mysql> source E:/database_test_backup/booksdb_20160229.sql;
Query OK, 0 rows affected (0.00 sec)

Query OK, 0 rows affected (0.00 sec)

......

Query OK, 8 rows affected (0.00 sec)
Records: 8  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.00 sec)

......

Query OK, 0 rows affected (0.00 sec)

2.2 直接复制到数据库目录

  通过这种方式还原时,必须保存备份数据的数据库和待还原的数据库服务器的住版本号相同,而且这种方式只对MyISAM引擎的表有效,对于InnoDB引擎的表不可用。

2.3 mysqlhotcopy快速恢复

  在MySQL服务器停止运行时,将备份的数据库文件复制到MySQL存放数据的位置,重新启动MySQL服务器即可。
  在Linux/Unix系统下,如果以根用户执行该操作,必须指定数据库文件的所有者,输入语句:

chown -R mysql.mysql /var/lib/mysql/dbname

例如,从mysqlhotcopy复制备份恢复数据库:

cp -R /usr/backup/test usr/local/mysql/data

3 数据库迁移

3.1 相同版本的数据库之间迁移

  直接复制,只适用于MyISAM引擎的表,所以最常用和最安全的方式是使用mysqldump命令导出数据,然后使用mysql命令导入,例如将www.abc.com主机的数据迁移到www.bcd.com主机上:

mysqldump -h www.bac.com -uroot -ppassword  dbname | 
mysql -hwww.bcd.com -uroot -ppassword

数据的传输通过管道符“|”实现。

2.3 不同版本的数据库之间迁移

  从新版本向旧版本MySQL迁移数据时要特别小心,最好使用mysqldump命令导出,然后倒入目标数据库中。

2.3 不同数据库之间的迁移

  较复杂,借助工具实现,比如Navicat Premium。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值