数据备份

1.物理备份与逻辑备份

物理备份

物理备份就是将数据库的数据文件,配置文件,日志文件等复制一份到其他路径上,这种备份速度一般较快,因为只有I/O操作。进行物理备份时,一般都需要关闭mysql服务器,或者对需要备份的对象进行锁定,要不很容易造成备份的不一致性,恢复时可能会丢失数据。物理备份的方式有很多,如操作系统命令copy(cp),scp,mysqlbackup,以及MyISAM表的mysqlhotcopy。

逻辑备份

逻辑备份是对数据库的逻辑结构(create database,create table),以及其所存储的数据(转换为insert into)进行备份。这种备份非常的灵活,但是对于大型系统来讲,逻辑备份进行恢复时性能较低。逻辑备份工具有mysqldump,select...into outfile等。

2.联机备份与脱机备份

联机备份又称热备份,即在mysql服务器运行时进行备份,脱机备份,即冷备份,在mysql服务器停止运行后进行备份。

热备份的优点是不会影响其他客户端访问mysql服务,仍可以正常读取数据。但是在进行热备份时需要发生避免数据的修改操作,以至于影响备份的一致性和完整性。

冷备份的有点是没有客户端的连接,直接进行备份即可。但为了降低对业务的影响,尽量在slave端进行备份。

3.完整备份和增量备份

完整备份是对整个数据库所有的数据进行的备份,而增量备份就是指定时间点后发送的修改,增量备份基于mysql binary log来实现。

4.MyISAM表的物理备份

方法一:先锁表在复制,示例

mysql> flush tables stu with read lock;
Query OK, 0 rows affected (0.00 sec)

copy "D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.*"  f:\backup
D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.frm
D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.MYD
D:\ProgramData\MySQL\MySQL Server 5.5\data\test\t2.MYI
已复制         3 个文件。

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

方法二:使用mysqlhotcopy命令

Windows平台下使用mysqlhotcopy需要安装perl以及DBD-MYSQL,DBI模块,但是呢,mysqlhotcopy命令也是调用操作系统命令(cp,scp)来复制文件,因此在Windows平台下无法使用,故大家可以在Linux平台上实验。

-----------------------DBD模块的安装--------------------
C:\Users\Lenovo>ppm install DBD::mysql
Downloading DBD-mysql-4.029...done
Unpacking DBD-mysql-4.029...done
Generating HTML for DBD-mysql-4.029...done
Updating files in site area...done
  11 files installed
----------------mysqlhotcopy命令使用------------------
C:\Users\Lenovo>mysqlhotcopy.pl -u root -p 123456 test  f:/backup
Flushed 11 tables with read lock (`test`.`b`, `test`.`emp_date`, `test`.`t1`, `test`.`
t2`, `test`.`t3`, `test`.`tb_1`, `test`.`tb_2`, `test`.`tb_3`, `test`.`tb_5`, `test`.`
tb_6`, `test`.`users`) in 1 seconds.
Locked 0 views () in 0 seconds.
Copying 22 files...
------------------在Ubuntu上验证结果---------------------
root@zhumuxian-machine:/# mysqlhotcopy -u root -p 123456 test /data/mysql/backup
Warning: /usr/bin/mysqlhotcopy is deprecated and will be removed in a future version.
Flushed 1 tables with read lock (`test`.`stu`) in 0 seconds.
Locked 0 views () in 0 seconds.
Copying 4 files...
Copying indices for 0 files...
Unlocked tables.
mysqlhotcopy copied 1 tables (4 files) in 0 seconds (0 seconds overall).
root@zhumuxian-machine:/# ls /data/mysql/backup/test

5.使用mysqldump进行逻辑备份

使用mysqldump工具创建的备份集有两种格式,一是标准的SQL语句,二是定界格式的文件。

备份单个数据库(可指定具体那个表,在数据库名后面加上表名即可)

PS C:\Users\Lenovo> mysqldump -u root -p123456 --default-character-set gbk zz > f:\zz.sql

备份多个数据库

PS F:\> mysqldump -u root -p7758520 --default-character-set gbk --databases zz,test > zztest.sql

备份所有的数据库(如果有不存在的数据库,则会报错)

PS F:\> mysqldump -u root -p7758520 --default-character-set gbk --all-databases > db_all.sql

输出成定界格式文件

PS F:\> mysqldump -u root -p123456 --default-character-set gbk --tab=f:\mysql_backup --fields-terminated-by ',' --lines-terminated-by '\r\n' zz stu
---------------如果指定的路径不存在,则会报错errorCode2-------------------------------------
PS F:\mysql_backup> dir

Mode                LastWriteTime     Length Name
----                -------------     ------ ----
-a---         2015/4/21      9:18       1482 stu.sql
-a---         2015/4/21      9:18        108 stu.txt

6.恢复mysqldump命令创建的备份,使用MYSQL命令

SQL格式恢复

F:\mysql_backup>mysql -u root -p123456 --default-character-set=utf8  zz < .\zz_stu.sql

定界格式恢复

由于这种备份的分为表对象的备份和其数据的备份,首先将表对象恢复,然后利用LOAD DATA INFILE语句导入表数据。

mysql> drop table stu; --删除数据库
Query OK, 0 rows affected (0.00 sec)
---------------------------------------------
F:\mysql_backup>mysql -u root -p123456  --default-character-set=utf8 zz < .\stu.sql
-------------------------------------------------
mysql> show tables;
+--------------+
| Tables_in_zz |
+--------------+
| sql_users    |
| stu          |
| users        |
+--------------+
3 rows in set (0.00 sec)

mysql> select * from stu;
Empty set (0.00 sec)
------------------------------------------------------
mysql> load data infile 'f:/mysql_backup/stu.txt' into table  stu character set gbk fields terminated by ',' lines termi
nated by '\r\n';
Query OK, 4 rows affected (0.00 sec)
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0

mysql> select * from stu;
+---------+--------+-------+------+--------+
| sno     | sname  | class | age  | gender |
+---------+--------+-------+------+--------+
| 4010404 | 祝小贤 | A1012 |   20 |      1 |
| 4010405 | 肖小杰 | A1013 |   22 |      0 |
| 4010406 | 钟小喜 | A1014 |   24 |      1 |
| 4010407 | 钟小惠 | A1015 |   26 |      0 |
+---------+--------+-------+------+--------+
4 rows in set (0.00 sec)
View Code

相关文章: