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