备份整个数据库
mysqldump -u root -p123456 dbname > backdb.sql
指定导出文件路径
mysqldump -u root -p123456 dbname > 绝对路径\backdb.sql
有时候密码中含有特殊字符比如%,会被识别为命令,可以改成这样写
mysqldump --user='root' --password='123456' dbname > backdb.sql
备份数据库中的某个表
mysqldump -u root -p123456 dbname tbname1, tbname2 > backdb.sql
备份多个数据库
mysqldump -u root -p123456 --databases dbname1, dbname2 > backdb.sql
备份系统中所有数据库
mysqldump -u root -p123456 --all-databases > backdb.sql
备份并压缩,文件名按日期显示
mysqldump -u root -p123456 --all-databases | gzip > backdb_`date '+%Y-%m-%d'`.sql.gz
其他:
跨主机备份
将host1上的sourceDb复制到host2的targetDb,前提是host2主机上已经创建targetDb数据库
-C指示主机间的数据传输使用数据压缩
mysqldump --host=host1 --opt sourceDb| mysql --host=host2 -C targetDb
添加到定时任务,每天凌晨1点备份一次
mysqldump -u root -p123456 --all-databases | gzip > /data/dockers/mysql/data/backdb_`date '+%Y-%m-%d'`.sql.gz
发现在我的系统上,crontab里面带日期的居然执行失败了,于是放到shell文件中了。
/bin/sh /data/www/backup.sh
如果mysql是由docker运行的,保存路径为宿主机的路径,而不是容器里面的
docker exec mysql mysqldump -u root -p123456 --all-databases | gzip > /data/dockers/mysql/data/backdb_`date '+%Y-%m-%d'`.sql.gz
补充说明
当mysql版本为5.7(我的是5.7.24)的时候,上面的命令会报错
mysqldump: [Warning] Using a password on the command line interface can be insecure.
同时定时任务也执行失败。需要做如下修改。
修改配置文件/etc/my.cnf.d/mysql-clients.cnf添加如下内容
[mysqldump]
user = root
password = 'mypass'
host = 127.0.0.1
不需要重启mysql,因为这是对于mysqldump的配置。
执行命令
mysqldump --defaults-extra-file=/etc/my.cnf.d/mysql-clients.cnf chpay > /data/www/backdb/backdb_`date '+%Y-%m-%d'`.sql