1 概述
mysqldump
是 MySQL
自带的逻辑备份工具。
它的备份原理是通过协议连接到 MySQL
数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert
语句,当我们需要还原这些数据时,只要执行这些 insert
语句,即可将对应的数据还原。
2 使用方法
2.1 命令格式
mysqldump [选项] 数据库名 [表名] > 脚本名
或
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
或
mysqldump [选项] --all-databases [选项] > 脚本名
2.2 选项说明
参数名 | 缩写 | 含义 |
---|---|---|
--host | -h | 服务器IP地址 |
--port | -P | 服务器端口号 |
--user | -u | MySQL 用户名 |
--pasword | -p | MySQL 密码 |
--databases | 指定要备份的数据库 | |
--all-databases | 备份mysql服务器上的所有数据库 | |
--compact | 压缩模式,产生更少的输出 | |
--comments | 添加注释信息 | |
--complete-insert | 输出完成的插入语句 | |
--lock-tables | 备份前,锁定所有数据库表 | |
--no-create-db/--no-create-info | 禁止生成创建数据库语句 | |
--force | 当出现错误时仍然继续备份操作 | |
--default-character-set | 指定默认字符集 | |
--add-locks | 备份数据库表时锁定数据库表 |
3 导出
3.1 db级别
3.1.1 导出所有db结构和数据
mysqldump -uroot -p -A > /data/bak/all.sql
3.1.2 仅导出所有db结构
mysqldump -uroot -p -A -d > /data/bak/all_struct.sql
3.1.3 仅导出所有db数据不导表结构
mysqldump -uroot -p -A -t > /data/bak/all_data.sql
3.1.4 导出单个db结构和数据
mysqldump -uroot -p mydb > /data/bak/mydb.sql
3.1.5 仅导出单个db结构
mysqldump -uroot -p mydb -d > /data/bak/mydb.sql
3.1.6 仅导出单个db数据
mysqldump -uroot -p mydb -t > /data/bak/mydb.sql
3.1.7 导出多个db结构和数据
--databases参数,数据,结构单独导出方法同上。
mysqldump -uroot -p --databases db1 db2 > /data/bak/muldbs.sql
3.2 表级别
参数-d表示只到处表结构,不导数据。
3.2.1 导出一个库中的所有表结构
mysqldump -h localhost -u root -p -d db_name > db_name.sql
3.2.2 导出一个库中的一张或多张表的表结构
mysqldump -h localhost -u root -p pwd -d db_name user> user.sql
mysqldump -ulocalhost -uroot -p dbpasswd -d db_name test1 test2 test3 > db.sql;
3.2.3 导出多个库的所有表结构
mysqldump -h localhost -u root -p -d --databases dbname1 dbname2 > db_name.sql
3.2.4 导出所有的数据库表结构
mysqldump -h localhost -u root -p -d --all-databases > all_db.sql
3.2.5 备份指定数据库排除某些表
mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db
3.3 压缩备份
mysqldump -h localhost -u root -p dbname | gzip > db_name.sql.gz
3.4 定时备份数据库任务
0 0 1 * * /usr/bin/mysqldump --defaults-extra-file=/root/.my.cnf --user=root db_name > /root/dump-$(date +"%Y%m%d").sql
3.5 导入数据
在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。
3.5.1 导入恢复数据库(系统行命令)
mysql -u user_name -p db_name < dump-backup.sql
3.5.2 导入恢复数据库(soure 方法)
mysql > use db_name
mysql > source /backup/mysqldump/db_name.db
3.5.3 导入单个数据库
3.5.3.1 mysql命令行:
mysql>use mydb
mysql>source /data/bak/mydb.sql
3.5.3.2 系统命令行:
mysql -uroot -p123456 mydb < /data/bak/mydb.sql