V变量—建站日记 - mysqldump
type: channel
link: http://vvars.com/tag/mysqldump/
items: 让Mysql数据备份变得简单，巧用mysqldump数据导入导出功能

让Mysql数据备份变得简单，巧用mysqldump数据导入导出功能
type: item
date: 2025-03-21T23:48:18+08:00
description: 一 前言在日常维护工作当中经常会需要对数据进行导出操作，而mysqldump是导出数据过程中使用非常频繁的一个工具；它自带的功能参数非常多，文章中会列举出一些常用的操作，在文章末尾会将所有的参数详细说明列出来。二 语法默认不带参数的导出，导出文本内容大概如下：创建数据库判断语句-删除表-创建表-锁表-禁用索引-插入数据-启用索引-解锁表。Usage: mysqldump [OPTIONS] database [tables]OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]OR mysqldump [OPTIONS] --all-databases [OPTIONS]插入测试数据复制代码CREATE DATABASE db1 DEFAULT CHARSET utf8;USE db1;CREATE TABLE a1(id int);insert into a1() values(1),(2);CREATE TABLE a2(id int);insert into a2() values(2);CREATE TABLE a3(id int);insert into a3() values(3);CREATE DATABASE db2 DEFAULT CHARSET utf8;USE db2;CREATE TABLE b1(id int);insert into b1() values(1);CREATE TABLE b2(id int);insert into b2() values(2);复制代码三 实操教程1.导出所有数据库该命令会导出包括系统数据库在内的所有数据库mysqldump -uroot -proot --all-databases >/tmp/all.sql2.导出db1、db2两个数据库的所有数据mysqldump -uroot -proot --databases db1 db2 >/tmp/user.sql3.导出db1中的a1、a2表注意导出指定表只能针对一个数据库进行导出，且导出的内容中和导出数据库也不一样，导出指定表的导出文本中没有创建数据库的判断语句，只有删除表-创建表-导入数据mysqldump -uroot -proot --databases db1 --tables a1 a2 >/tmp/db1.sql4.条件导出，导出db1表a1中id=1的数据如果多个表的条件相同可以一次性导出多个表字段是整形mysqldump -uroot -proot --databases db1 --tables a1 --where='id=1' >/tmp/a1.sql字段是字符串,并且导出的sql中不包含drop table,create tablemysqldump -uroot -proot --no-create-info --databases db1 --tables a1 --where="id='a'" >/tmp/a1.sql5.生成新的binlog文件,-F有时候会希望导出数据之后生成一个新的binlog文件,只需要加上-F参数即可mysqldump -uroot -proot --databases db1 -F >/tmp/db1.sql6.只导出表结构不导出数据，--no-datamysqldump -uroot -proot --no-data --databases db1 >/tmp/db1.sql7.跨服务器导出导入数据mysqldump --host=h1 -uroot -proot --databases db1 |mysql --host=h2 -uroot -proot db2将h1服务器中的db1数据库的所有数据导入到h2中的db2数据库中，db2的数据库必须存在否则会报错mysqldump --host=192.168.80.137 -uroot -proot -C --databases test |mysql --host=192.168.80.133 -uroot -proot test 加上-C参数可以启用压缩传递。8.将主库的binlog位置和文件名追加到导出数据的文件中，--dump-slave注意：--dump-slave命令如果当前服务器是从服务器那么使用该命令会执行stop slave来获取master binlog的文件和位置，等备份完后会自动执行start slave启动从服务器。但是如果是大的数据量备份会给从和主的延时变的更大，使用--dump-slave获取到的只是当前的从服务器的数据执行到的主的binglog的位置是（relay_mater_log_file,exe…