约 900 字 预计阅读 2 分钟
使用mysqldump进行备份
备份
备份指定数据库
1
2
3
4
|
mysqldump -u root -p'password' dbname >/root/testandmysql.sql
#备份远程数据库
mysqldump -h xxx.xxx.xxx.xxx -P 3306 -u root -p'password' dbname > testandmysql.sql
|
备份多个数据库
1
|
mysqldump -u root -p'password' --databases dbname1 dbname2 ... > filename.sql
|
备份所有数据库
1
2
|
#使用"--all-databases"参数时,不需要指定数据库名称
mysqldump -u root -p'password' --all-databases>filename.sql
|
备份指定数据表
1
|
mysqldump -u root -p'password' dbname tablename >filename.sql
|
导出数据库结构(不含数据)
1
|
mysqldump -u root -p'password' -d dbname > filename.sql
|
导出某张表的表结构(不含数据)
1
|
mysqldump -u root -p'password' -d dbname tablename > filename.sql
|
只导出数据不导出结构
1
2
3
4
5
|
##数据库 -t
mysqldump -u root -p'password' -t dbname > filename.sql
##指定表
mysqldump -u root -p'password' -t dbname tablename > filename.sql
|
恢复
登录后恢复
1
2
3
4
5
6
7
8
9
|
#登录mysql
mysql -u root -p
#进入要还原的数据库
use test;
#还原备份的数据库
source /root/filename.sql
##弹出的提示输入y即可
|
恢复执行数据库
1
2
3
4
|
mysql -uroot -p'password' test < filename.sql
#远程
mysql -h xxx.xxx.xx.xx -P3308 -uroot -p'password' test < filename.sql
|
还原所有数据库
1
2
|
#使用--all-databases参数备份了所有的数据库,还原时不需要指定数据库
mysql -uroot -p'password' < filename.sql
|
mysqldump细节
关键参数
1
2
3
4
5
6
7
8
9
10
11
12
13
|
-B:指定多个库,在备份文件中增加建库语句和use语句
--compact:去掉备份文件中的注释,适合调试,生产场景不用
-A:备份所有库
-F:刷新binlog日志
--master-data:在备份文件中增加binlog日志文件名及对应的位置点
-x --lock-all-tables:锁表
-l:只读锁表
-d:只备份表结构
-t:只备份数据
--single-transaction:适合innodb事务数据库的备份
InnoDB表在备份时,通常启用选项--single-transaction来保证备份的一致性,
原理是设定本次会话的隔离级别为Repeatable read,来保证本次会话(也就是dump)时,
不会看到其它会话已经提交了的数据。
|
不同引擎备份命令参数用法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
#Myisam引擎:
mysqldump -uroot -p123456 -A -B --master-data=1 -x| gzip > /data/all_$(date +%F).sql.gz
##InnoDB引擎:
mysqldump -uroot -p123456 -A -B --master-data=1 --single-transaction > /data/bak.sql
(3)生产环境DBA给出的命令
a、for MyISAM
mysqldump --user=root --all-databases --flush-privileges --lock-all-tables \
--master-data=1 --flush-logs --triggers --routines --events \
--hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql
b、for InnoDB
mysqldump --user=root --all-databases --flush-privileges --single-transaction \
--master-data=1 --flush-logs --triggers --routines --events \
--hex-blob > $BACKUP_DIR/full_dump_$BACKUP_TIMESTAMP.sql
|