mysqldump是MySQL数据库自带的导出sql工具,可以导出原生sql,方便后续使用。
创建备份用户
1 2 3 4 5 6 7
| CREATE USER 'backup'@'%' IDENTIFIED BY 'password';
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
|
备份数据库, 不带drop语句
默认备份的类似于:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
DROP TABLE IF EXISTS `db_sms_auth_code`; ; ; CREATE TABLE `db_sms_auth_code` ( `CID` varchar(32) NOT NULL, `TEXT` varchar(255) DEFAULT NULL, `CODE` int(11) DEFAULT NULL, `MOBILE_NO` varchar(20) DEFAULT NULL, `CREATE_DATE` datetime DEFAULT NULL, `STATUS` int(2) DEFAULT NULL, `PR_ID` varchar(32) DEFAULT NULL, PRIMARY KEY (`CID`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='短信校验码'; ;
|
考虑到安全问题,不想要DROP语句,可以增加--skip-add-drop-table
参数