mysql-使用mysqldump来备份数据库
导出单个表
1
|
mysqldump -u root -p123456 testdb t_user > t_user.sql
|
去掉注释
- 这个太重要了,方便保存后通过git等代码管理工具比较差异
输出更少的信息
1
2
|
--compact 相当于
--skip-add-drop-table --skip-add-locks --skip-comments --skip-disable-keys
|
插入语句单行输出
- 这一点很重要,如果记录比较多的话,生成的sql没法看。
1
|
--extended-insert=FALSE
|
备份多个表
- 在all_base_table.txt中存放需要备份的表名
1
2
3
4
|
cat all_base_table.txt
t_user_config
t_login_config
t_game_config
|
1
2
3
4
5
6
7
8
|
#!/bin/bash
for tbname in $(cat all_base_table.txt)
do
echo tbname: $tbname
mysqldump -h192.168.2.127 -P3306 -uroot -p123456 --opt testdb $tbname--skip-comments --extended-insert=FALSE >./base_table/$tbname.sql
echo basetable: $tbname
done
|
备份整个数据库的结构:
1
2
|
des_file=testdb_no_data_v0.0.1.sql
mysqldump -h192.168.2.127 -P3306 -uroot -p123456 testdb --no-data --routines --skip-comments > $des_file
|
备份整个数据库的结构和数据并压缩
1
2
3
4
5
6
7
|
dt=$(date +%Y%m%d_%H%M%S)
des_file=testdb_bak_$dt.sql
bak_file=testdb_bak_$dt.tar.gz
mysqldump -h192.168.2.127 -P3306 -uroot -p123456 testdb --routines > $des_file
tar -czvf $bak_file $des_file
mv $bak_file ./bak/
rm -f $des_file
|
备份数据恢复
1
2
3
|
mysql -uroot -p
use testdb
source /data/testdb.sql
|
不想导入备份中的某些大表怎么办?
这里提供一个思路,如果你知道是那些表太大了,那就可以把这些表的insert语句删掉再进行导入。
- 例如:条record_round和表record_game太大了,不导入这2个表的记录那么可以用sed命令删除掉相关记录
1
|
sed '/INTO `record_round` VALUES/d;/INTO `record_game` VALUES/d' testdb.sql >testdb_min.sql
|
总结
- 上面只是列举了常用的几种用法
- mysqldump的用法还很多,有需要的同学可以深入研究学习一下。
- mysqldump的笔记先就记到这里,后面有更有价值的用法再行补充。