Mysql备份及恢复

使用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
Buy me a coffee
支付宝
微信
0%