1.数据库的备份按照格式可以分为两大类:

文本格式的备份:使用mysqldump程序把数据表的内容写到转储文件,其内容主要有create table 和insert两种sql语句。

二进制备份:直接复制那些包含数据表内容的文件而得到的,可以用的指令有mysqlhotcopy,cp,tar等

二者的区别:mysqldump程序生成的是内容为sql语句的文本文件,

2.mysqldump 3种运行格式:

mysqldump [OPTIONS] database [tables]

[root@zhu1 ~]# mysqldump -uroot -p123456 zhuzhu student >student.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 zhuzhu > zhuzhu.sql

这种模式,mysqldump将导出指定数据库里的指定的数据表,如果没有指出数据表的名字,默认为导出指定数据库的所有数据表。

mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases  zabbix zhuzhu > zhu.sql

该模式用于同时导出多个数据库,数据库之间用空格隔开

 mysqldump [OPTIONS] --all-databases [OPTIONS]

[root@zhu1 ~]# mysqldump -uroot -p123456 --all-databases > jiangjiang.sql
mysqldump: Got error: 1556: You can't use locks with log tables. when using LOCK TABLES
[root@zhu1 ~]# /opt/mysql/bin/mysqldump -uroot -p123456 --all-databases > jiangjiang.sql

第一次出错是因为没有使用mysqldump的绝对路径,而原来用yum安装过mysql,而现在所使用的数据库是编译安装的。

************************************************************************

mysqldump常用参数详解

--all-databases  或-A  :导出所有的数据库

[root@zhu1 ~]# mysqldump -uroot -p123456 -A >zhu.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 --all-databases > jiang.sql
[root@zhu1 ~]# ll | grep sql
-rw-r--r--  1 root root 279185126 09-01 11:45 jiang.sql
-rw-r--r--  1 root root 279185126 09-01 11:44 zhu.sql

--databases 或-B :导出指定的多个数据库

 

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases mysql zabbix  > jiang.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 -B  mysql zabbix  > jiang1.sql
[root@zhu1 ~]# ll | grep sql
-rw-r--r--  1 root root 1891602 09-01 11:48 jiang1.sql
-rw-r--r--  1 root root 1891602 09-01 11:48 jiang.sql

--ignore-table=name  :指定不备份的表

 

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu --ignore-table=zhuzhu.student --ignore-table=zhuzhu.book > zhu.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu > zhuzhu.sql
[root@zhu1 ~]# ll *.sql
-rw-r--r-- 1 root root 2017 09-01 11:57 zhu.sql
-rw-r--r-- 1 root root 3283 09-01 11:57 zhuzhu.sql

查看:

删除数据库:

mysql> show tables from zhuzhu;
+------------------+
| Tables_in_zhuzhu |
+------------------+
| book             |
| computer         |
| student          |
+------------------+
3 rows in set (0.00 sec)
mysql> drop database zhuzhu;
Query OK, 3 rows affected (0.03 sec)

恢复并查看

 

[root@zhu1 ~]# mysql -uroot -p123456 < zhu.sql
mysql> show tables from zhuzhu;
+------------------+
| Tables_in_zhuzhu |
+------------------+
| computer         |
+------------------+
1 row in set (0.00 sec)

刚才进导出了这个表

 

[root@zhu1 ~]# mysql -uroot -p123456 < zhuzhu.sql
mysql> show tables from zhuzhu;
+------------------+
| Tables_in_zhuzhu |
+------------------+
| book             |
| computer         |
| student          |
+------------------+
3 rows in set (0.01 sec)

该参数用在“当备份一个数据库,但数据库中指定的表备份的情况”

 

--events 或-E 连同事件也一起备份导出

 

 

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu --events  > zhuzhu.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu -E  > zhuzhu1.sql

--triggers :连同触发器一起导出(该项默认已经存在)

若不备份触发器时刻用参数 :

--skip-trigger

 

--routine或-R :连同存储函数和过程一起导出

 

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu -E -R   > zhujiangtao.sql
[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu -E --routines   > zhujiangtao1.sql

 

--single-transaction 让innodb数据表在备份过程保持不变,在一个事物中导出数据表。

 

[root@zhu1 ~]# mysqldump -uroot -p123456 --databases zhuzhu -E --routines --single-transaction  >mm.sql