MySQL 备份与恢复mysqldump

先保存一篇文章:http://www.ytyzx.net/index.php/如何使用Kickstart自动批量安装Linux客户端(CentOS)


备份:
备份一个数据库(shell中执行,下同):
mysqldump -uusername -ppassword -hhostname --databases db_name > /path/db_name.sql

备份多个数据库
mysqldump -uusername -hhostname -ppassword --databases db1_name db2_name db3_name >/path/multidb_name.sql

备份所有数据库
mysqldump -uusername -hhostname -ppassword --all-databases >/path/alldb_name.sql

仅仅备份数据结构

mysqldump -uusername -hhostname -ppassword --no-data db_name >/path/db_name.sql

基于事务的备份
  
mysqldump -uuser -hhostname -ppassword --opt --single-transaction --default-character-set=utf8 --triggers db_name >/path/db_name.sql

在线备份
1 mysqldump -uuser -ppassword -hhostname --opt --single-transaction --default-character-set=utf8 --master-data=1 --flust-logs db_name > /path/db_name.sql

压缩备份
mysqldump -uusername -hhostname -ppassword db_name |gzip -9 >/path/db_name.gz

常用选项:
--databases db_name
--all-databases
--single-transaction(适用事务表)
--master-data(热备份)
--trigers(同时导出触发器,该选项默认启用,用--skip-trigers禁用他)
--routines,-R(导出存储过程以及自定义函数)
--opt(这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset
选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行 mysqldump 没有指定 --quick 或 --opt 选项
,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。)
--no-data,-d(不导出任何数据,只导出数据库表结构)
--no-create-info,-t(只导出数据,而不添加CREATE TABLE语句)
--lock-tables(它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single
-transaction 选项。)
--hex-blob(使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。)
--extended-insert = true|false(默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。)

MySQL还原:
普通备份还原

mysql db_name </path/db_name.sql  #此时的数据库必须事先手动创建好,然后在恢复

压缩备份还原

gunzip </path/db_name.gz | mysql -uusername -ppassword -hhostname db_name

MySQL中还原
source /root/data.back

将数据库转移到新服务器  
mysqldump -uusername -ppassword databasename | mysql �host=*.*.*.* -C databasename

例子
恢复数据库必须指定一个已经存在的数据库 db2
[root@stu188 bin]# mysql -u root -p123 db2 < all.sql
mysql> source /root/db1.sql;(在mysql中进行恢复)

#备份db1里的t7表 
[root@stu12 mysql]#  mysqldump -u root -p123 db1 t7 > t7.sql 
#恢复db1里的t7表 
[root@stu12 mysql]#  mysqldump -u root -p123 db1 t7 < t7.sql 
#备份所有库 
[root@stu12 mysql]# mysqldump -uroot -p123 --all-database > all.sql 
#恢复所有库 
[root@stu12 mysql]# mysqldump -uroot -p123 < all.sql 
#备份db1里面的tb1和tb2的表 
[root@stu12 mysql]# mysqldump db1 tb1 tb2 -u root -p123 > biao.sql


Linux中使用mysqldump对MySQL数据库进行定时备份:

  1. #!/bin/bash   

  2. PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin   

  3. export PATH   

  4. export LANG=en_US.UTF-8  

  5. savedir=/log/database_bak/   

  6. cd "$savedir"  

  7. time="$(date +"%Y-%m-%d %H:%M:%S")"  

  8. mysqldump -u [my_user] -p[my_pwd] [db_name] > [db_name]-"$time".sql  

这里注意以下-p后面没有空格直接加[my_pwd]

然后该sh脚本放入/log/sh/目录下并赋予执行权限,最后进入linux定时任务crond,加入以下脚本:

  1. # run-parts 每天502分执行databasebak.sh   

  2. 01 * * * * root run-parts /etc/cron.hourly   

  3. 02 4 * * * root run-parts /etc/cron.daily   

  4. 22 4 * * 0 root run-parts /etc/cron.weekly   

  5. 42 4 1 * * root run-parts /etc/cron.monthly   

  6. 02 5 * * * root sh /log/sh/databasebak.sh  

最后保存好后重启crond,service crond restart即可!


xtrbackup的使用在这里:http://blog.csdn.net/yongsheng0550/article/details/6682162

你可能感兴趣的:(mysql,linux,数据库,备份,MysqlDump)