mysqldump是MySQL数据库自带的导出sql工具,可以导出原生sql,方便后续使用。

创建备份用户

1
2
3
4
5
6
7
CREATE USER 'backup'@'%' IDENTIFIED BY 'password';

/* Grant all privileges on *.* to 'backup'@'%' with grant option; */

Grant select,lock tables,show view,trigger,event on database.* to 'backup'@'%';

ALTER USER 'backup'@'%' IDENTIFIED BY 'password';

备份格式

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --databases 数据库名 > 文件名.sql

备份压缩

mysql导出的文件是字节流,可以通过管道进行压缩。

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --databases 数据库名 | gzip > 文件名.sql.gz

解压:

1
gzip < 文件名.sql.gz > 文件名.sql

如果cpu性能比较差,建议不压缩,或者备份完成后再压缩,不然备份速度非常慢

备份指定库

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --databases 数据库名1 数据库名2 数据库名3 > 文件名.sql

备份同个库多个表

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --databases 数据库名 --tables 表1 表2 .... > 文件名.sql

备份所有库

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --all-databases > 文件名.sql

附带drop表或库的备份

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --add-drop-table --add-drop-database 数据库名 > 文件名.sql

这样导入的时候,如果存在对应的库或表,会被先删除再导入。

备份结构,不备份数据

1
mysqldump -h主机名 -P端口 -u用户名 -p密码 --no-data --databases 数据库名1 数据库名2 数据库名3 > 文件名.sql

备份不锁表,记录binlog位置

1
mysqldump -uroot -ppassword -hlocalhost -P3306 --master-data=2 --single-transaction --skip-tz-utc --all-databases > /tmp/db.sql